Message ID | ZfiKsTBLzelQ1JvI@tucnak |
---|---|
State | New |
Headers | show |
Series | alpha: Fix alpha_setup_incoming_varargs [PR114175] | expand |
On 3/18/24 12:40 PM, Jakub Jelinek wrote: > Hi! > > Like in the r14-9503 change on x86-64, I think Alpha also needs to > function_arg_advance after the hidden return pointer argument if > any. > At least, the following patch changes the assembly of s1-s6 functions > on the https://gcc.gnu.org/pipermail/gcc-patches/2024-March/647956.html > c23-stdarg-9.c testcase, and eyeballing the assembly for int f8 (...) > the ... args are passed in 16..21 registers and then on the stack, > while for struct S s8 (...) have hidden return pointer passed in 16 > register and ... args in 17..21 registers and then on the stack, and > seems without this patch the incoming varargs setup does the wrong thing > (but I can't test on alpha easily). > > Many targets seem to be unaffected, e.g. aarch64, arm, s390*, so I'm not > trying to change all targets together because such a change clearly isn't > needed e.g. for targets which use special register for the hidden return > pointer. > > Ok for trunk? > > 2024-03-18 Jakub Jelinek <jakub@redhat.com> > > PR target/114175 > * config/alpha/alpha.cc (alpha_setup_incoming_varargs): Only skip > function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions > if arg.type is NULL. OK. And I think you should go ahead with any others that you think need a similar change. I certainly trust your judgment. jeff
--- gcc/config/alpha/alpha.cc.jj 2024-01-05 15:22:21.762686175 +0100 +++ gcc/config/alpha/alpha.cc 2024-03-18 16:12:14.594761619 +0100 @@ -6090,7 +6090,8 @@ alpha_setup_incoming_varargs (cumulative { CUMULATIVE_ARGS cum = *get_cumulative_args (pcum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) /* Skip the current argument. */ targetm.calls.function_arg_advance (pack_cumulative_args (&cum), arg);