[patch v2] Get rid of stack trampolines for nested functions (1/4)
Andreas Schwab
schwab@suse.de
Wed Mar 29 10:05:00 GMT 2017
On Mär 28 2017, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> That needs to use ptr_mode, not Pmode.
>
> I don't think so, the whole computation is in Pmode. Could you try something
> similar to what is done in the 'else' arm of the big surrounding conditional?
Thanks, this gets me further, the ada library now compiles with
-mabi=ilp32. But I still see some ICEs while running the testsuite,
which I haven't investigated yet. And the original comment before this
hunk doesn't make sense at this point.
Andreas.
diff --git a/gcc/calls.c b/gcc/calls.c
index 61caf4ca75..c92e35ea5a 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -206,6 +206,9 @@ prepare_call_address (tree fndecl_or_type, rtx funexp, rtx static_chain_value,
DECL_STATIC_CHAIN (fndecl_or_type) = 1;
rtx chain = targetm.calls.static_chain (fndecl_or_type, false);
+ if (GET_MODE (funexp) != Pmode)
+ funexp = convert_memory_address (Pmode, funexp);
+
/* Avoid long live ranges around function calls. */
funexp = copy_to_mode_reg (Pmode, funexp);
--
2.12.2
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
More information about the Gcc-patches
mailing list