diff options
author | Anatoly Sokolov <aesok@post.ru> | 2008-05-13 00:39:51 +0400 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2008-05-13 00:39:51 +0400 |
commit | 4c75f709287a6fd3bcf95ab1b845528574855266 (patch) | |
tree | dbd6968f65f49773f9c7e3f56cc8871ada9af2f8 /gcc | |
parent | ea0a7f390a26152d2a7986e78fdf476cabc6630e (diff) | |
download | gcc-4c75f709287a6fd3bcf95ab1b845528574855266.zip gcc-4c75f709287a6fd3bcf95ab1b845528574855266.tar.gz gcc-4c75f709287a6fd3bcf95ab1b845528574855266.tar.bz2 |
avr.h (machine_function): Add 'is_leaf' field.
* 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'.
From-SVN: r135231
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/avr/avr.c | 6 | ||||
-rw-r--r-- | gcc/config/avr/avr.h | 3 |
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; |