aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.c6
-rw-r--r--gcc/config/avr/avr.h3
3 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bcf6c64..27204b4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-12 Anatoly Sokolov <aesok@post.ru>
+
+ * config/avr/avr.h (machine_function): Add 'is_leaf' field.
+ * config/avr/avr.c (avr_regs_to_save): Compute 'machine->is_leaf'.
+ Use 'machine->is_leaf' instead of 'leaf_func_p'.
+
2008-05-12 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/sse.md (*sse_concatv4sf): Renamed to ...
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 7248fd6..e1d7775 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -471,7 +471,9 @@ avr_regs_to_save (HARD_REG_SET *set)
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);
@@ -490,7 +492,7 @@ avr_regs_to_save (HARD_REG_SET *set)
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
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 7dbc76c..b56c8e0 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -1026,6 +1026,9 @@ mmcu=*:-mmcu=%*}"
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;