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

Reply via email to