Message ID | 56A000D9.4080902@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On 01/20/2016 10:49 PM, Kelvin Nilsen wrote: > * toplev.c (do_compile): remove invocation of process_options () > from within do_compile () > (toplev::main): insert invocation of process_options () before > invocation of handle_common_deferred_options (). The ChangeLog seems badly formatted, but it could have been eaten by your mailer. You might want to include it as part of the attachment to avoid whitespace damage. As for the patch itself, it makes me a little nervous - it's hard to judge whether this could have unintended consequences where something relies on the existing ordering. I'd much rather postpone the generation of stack_limit_rtx until rtl initialization time. Maybe this needs to be per-function anyway, can Pmode change with attribute target? Bernd
On 01/20/2016 04:51 PM, Bernd Schmidt wrote: > > > On 01/20/2016 10:49 PM, Kelvin Nilsen wrote: > >> * toplev.c (do_compile): remove invocation of process_options () >> from within do_compile () >> (toplev::main): insert invocation of process_options () before >> invocation of handle_common_deferred_options (). > > The ChangeLog seems badly formatted, but it could have been eaten by > your mailer. You might want to include it as part of the attachment to > avoid whitespace damage. > > As for the patch itself, it makes me a little nervous - it's hard to > judge whether this could have unintended consequences where something > relies on the existing ordering. I'd much rather postpone the generation > of stack_limit_rtx until rtl initialization time. Maybe this needs to be > per-function anyway, can Pmode change with attribute target? I couldn't ever get past my own nervousness about this patch either. If there isn't a need for stack_limit_rtx early, then delaying that initialization seems wiser. jeff
Index: gcc/testsuite/gcc.target/powerpc/pr48344-1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/pr48344-1.c (revision 0) +++ gcc/testsuite/gcc.target/powerpc/pr48344-1.c (revision 232633) @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-fstack-limit-register=r2" } */ +void foo () +{ + int N = 2; + int slots[N]; + +} + Index: gcc/toplev.c =================================================================== --- gcc/toplev.c (revision 232135) +++ gcc/toplev.c (working copy) @@ -1938,8 +1938,6 @@ standard_type_bitsize (int bitsize) static void do_compile () { - process_options (); - /* Don't do any more if an error has already occurred. */ if (!seen_error ()) { @@ -2072,6 +2070,11 @@ toplev::main (int argc, char **argv) save_decoded_options, save_decoded_options_count, UNKNOWN_LOCATION, global_dc); + /* process_options() must execute before handle_common_deferred_options() + because handle_common_deferred_options() makes use of variables + initialized by process_options() (e.g. Pmode) */ + process_options (); + handle_common_deferred_options (); init_local_tick ();