i386.c (pro_epilogue_adjust_stack): Use EBP for tail call epilogues.

* config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
	for tail call epilogues.

From-SVN: r160050
This commit is contained in:
Jan Hubicka 2010-05-30 14:14:49 +02:00 committed by Jan Hubicka
parent e6bdd0396c
commit 17f01631e1
2 changed files with 17 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2010-05-30 Jan Hubicka <jh@suse.cz>
* config/i386/i386.c (pro_epilogue_adjust_stack): Use EBP
for tail call epilogues.
2010-05-30 Jan Hubicka <jh@suse.cz>
* passes.c (ipa_write_optimization_summaries_1, ipa_write_summaries_2,

View File

@ -8363,17 +8363,21 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64 (dest, src, offset));
else
{
rtx r11;
rtx tmp;
/* r11 is used by indirect sibcall return as well, set before the
epilogue and used after the epilogue. ATM indirect sibcall
shouldn't be used together with huge frame sizes in one
function because of the frame_size check in sibcall.c. */
gcc_assert (style);
r11 = gen_rtx_REG (DImode, R11_REG);
insn = emit_insn (gen_rtx_SET (DImode, r11, offset));
epilogue and used after the epilogue. */
if (style)
tmp = gen_rtx_REG (DImode, R11_REG);
else
{
gcc_assert (src != hard_frame_pointer_rtx
&& dest != hard_frame_pointer_rtx);
tmp = hard_frame_pointer_rtx;
}
insn = emit_insn (gen_rtx_SET (DImode, tmp, offset));
if (style < 0)
RTX_FRAME_RELATED_P (insn) = 1;
insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, r11,
insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, tmp,
offset));
}