aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2011-05-21 22:02:25 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-05-21 22:02:25 +0000
commit6d1e6c0f5bc51270d159fd727b70176963fb2bf5 (patch)
treec33f3eff65e9ec19d6c8140cc20ef668bf0f57fb /gcc
parentfa4a1e468dd4fc44b1d805142d60ff1c3330276e (diff)
downloadgcc-6d1e6c0f5bc51270d159fd727b70176963fb2bf5.zip
gcc-6d1e6c0f5bc51270d159fd727b70176963fb2bf5.tar.gz
gcc-6d1e6c0f5bc51270d159fd727b70176963fb2bf5.tar.bz2
sparc.c (eligible_for_return_delay): Do not return false if there are call-saved registers here...
* config/sparc/sparc.c (eligible_for_return_delay): Do not return false if there are call-saved registers here... (sparc_can_use_return_insn_p): ...but here instead. (save_or_restore_regs): Fix thinko. (sparc_expand_prologue): Use current_function_is_leaf. (sparc_frame_pointer_required): Likewise. From-SVN: r174008
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sparc/sparc.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 10b35f2..22f641d 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -2808,11 +2808,6 @@ eligible_for_return_delay (rtx trial)
if (get_attr_length (trial) != 1)
return 0;
- /* If there are any call-saved registers, we should scan TRIAL if it
- does not reference them. For now just make it easy. */
- if (num_gfregs)
- return 0;
-
/* If the function uses __builtin_eh_return, the eh_return machinery
occupies the delay slot. */
if (crtl->calls_eh_return)
@@ -4400,7 +4395,7 @@ save_or_restore_regs (int low, int high, rtx base, int offset, int action)
emit_move_insn (gen_rtx_REG (mode, regno), mem);
/* Always preserve double-word alignment. */
- offset = (offset + 7) & -8;
+ offset = (offset + 8) & -8;
}
}
@@ -4507,7 +4502,7 @@ sparc_expand_prologue (void)
example, the regrename pass has special provisions to not rename to
non-leaf registers in a leaf function. */
sparc_leaf_function_p
- = optimize > 0 && leaf_function_p () && only_leaf_regs_used ();
+ = optimize > 0 && current_function_is_leaf && only_leaf_regs_used ();
/* Need to use actual_fsize, since we are also allocating
space for our callee (and our own register save area). */
@@ -4637,6 +4632,7 @@ bool
sparc_can_use_return_insn_p (void)
{
return sparc_prologue_data_valid_p
+ && num_gfregs == 0
&& (actual_fsize == 0 || !sparc_leaf_function_p);
}
@@ -9796,7 +9792,7 @@ sparc_expand_compare_and_swap_12 (rtx result, rtx mem, rtx oldval, rtx newval)
bool
sparc_frame_pointer_required (void)
{
- return !(leaf_function_p () && only_leaf_regs_used ());
+ return !(current_function_is_leaf && only_leaf_regs_used ());
}
/* The way this is structured, we can't eliminate SFP in favor of SP