non-local goto optimization
Roman Zippel
zippel@linux-m68k.org
Thu Aug 30 15:02:00 GMT 2007
Hi,
On Fri, 6 Jul 2007, Eric Botcazou wrote:
> > 200x-xx-xx Roman Zippel <zippel@linux-m68k.org>
> >
> > * function.h (struct function): Rename calls_unwind_init
> > to saves_all_register.
> > (current_function_saves_all_register): Renamed from
> > current_function_calls_unwind_init.
> > * reload1.c (reload): Set current_function_saves_all_register.
> > * except.c (expand_builtin_unwind_init): Likewise.
>
> This is OK *only* if you add the missing 's' to saves_all_register. :-)
>
> > * config/i386/i386.c (ix86_save_reg): Use
> > current_function_saves_all_register to save pic register.
> > * config/m68k/m68k.c (m68k_save_reg): Likewise.
>
> I cannot approve this.
>
>
> Architecture maintainers CCed, your back-end tests the flag
Ping?
Full patch at http://gcc.gnu.org/ml/gcc-patches/2007-07/msg00560.html
>
> current_function_has_nonlocal_label
>
> This flag used to instruct the middle-end to mark all call-saved registers as
> "ever live" and thus to force them to be saved and restored by the back-end.
>
> Thanks to Nathan's work, the middle-end is now more clever and doesn't always
> mark them if this flag is set; instead, it will think a little more and set
> an additional flag
>
> current_function_saves_all_registers
>
> if it will eventually mark them.
>
>
> In order to implement this, current_function_has_nonlocal_label is set in
> exactly 1 less occasion than it used to, in expand_builtin_unwind_init.
> Instead current_function_saves_all_registers is set there.
>
> Therefore, the conservatively correct change is very likely to test
>
> current_function_has_nonlocal_label || current_function_saves_all_registers
>
> in your back-end. However, your back-end could further benefit from Nathan's
> work by substituting the latter flag for the former in the test(s).
>
> Thanks for your attention. :-)
>
> --
> Eric Botcazou
>
More information about the Gcc-patches
mailing list