From 4c75f709287a6fd3bcf95ab1b845528574855266 Mon Sep 17 00:00:00 2001 From: Anatoly Sokolov Date: Tue, 13 May 2008 00:39:51 +0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/avr/avr.c | 6 ++++-- gcc/config/avr/avr.h | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcf6c64b6a3..27204b40bd3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-05-12 Anatoly Sokolov + + * 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 * config/i386/sse.md (*sse_concatv4sf): Renamed to ... diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 7248fd6a27c..e1d77758c3c 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 7dbc76ce9de..b56c8e044fc 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;