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