The patch.
Anatoly.
Index: gcc/config/avr/avr.c
===================================================================
--- gcc/config/avr/avr.c (revision 134897)
+++ gcc/config/avr/avr.c (working copy)
@@ -471,8 +471,10 @@
int reg, count;
int int_or_sig_p = (interrupt_function_p (current_function_decl)
|| signal_function_p (current_function_decl));
- int leaf_func_p = leaf_function_p ();
+ if (!reload_completed)
+ cfun->machine->is_leaf = leaf_function_p ();
+
if (set)
CLEAR_HARD_REG_SET (*set);
count = 0;
@@ -490,7 +492,7 @@
if (fixed_regs[reg])
continue;
- if ((int_or_sig_p && !leaf_func_p && call_used_regs[reg])
+ if ((int_or_sig_p && !cfun->machine->is_leaf && call_used_regs[reg])
|| (df_regs_ever_live_p (reg)
&& (int_or_sig_p || !call_used_regs[reg])
&& !(frame_pointer_needed
Index: gcc/config/avr/avr.h
===================================================================
--- gcc/config/avr/avr.h (revision 134897)
+++ gcc/config/avr/avr.h (working copy)
@@ -1026,6 +1026,9 @@
This is added to the cfun structure. */
struct machine_function GTY(())
{
+ /* TRUE if the current function is a leaf function. */
+ int is_leaf;
+
/* 'true' - if current function is a naked function. */
int is_naked;
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list