+2011-05-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * 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.
+
2011-05-20 Nick Clifton <nickc@redhat.com>
* config/rx/rx.h (HAVE_PRE_DECREMENT): Fix typo in macro name.
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)
emit_move_insn (gen_rtx_REG (mode, regno), mem);
/* Always preserve double-word alignment. */
- offset = (offset + 7) & -8;
+ offset = (offset + 8) & -8;
}
}
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). */
sparc_can_use_return_insn_p (void)
{
return sparc_prologue_data_valid_p
+ && num_gfregs == 0
&& (actual_fsize == 0 || !sparc_leaf_function_p);
}
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