ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.

* config/ia64/ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.
        (ia64_split_call): Only load descriptor for GP register inputs.
        (ia64_expand_epilogue): Check current_frame_info.mask not
        current_function_is_leaf to restore ar.pfs.

From-SVN: r68549
This commit is contained in:
Richard Henderson 2003-06-26 13:51:54 -07:00 committed by Richard Henderson
parent 49b83932ae
commit 4e14f1f90f
2 changed files with 10 additions and 7 deletions

View File

@ -2,6 +2,13 @@
* config/ia64/ia64.h (REGISTER_NAMES): R0 is really AP.
2003-06-26 Richard Henderson <rth@redhat.com>
* config/ia64/ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.
(ia64_split_call): Only load descriptor for GP register inputs.
(ia64_expand_epilogue): Check current_frame_info.mask not
current_function_is_leaf to restore ar.pfs.
2003-06-26 Richard Henderson <rth@redhat.com>
* emit-rtl.c (try_split): Append to new CALL_INSN_FUNCTION_USAGE

View File

@ -1499,11 +1499,7 @@ ia64_expand_call (retval, addr, nextarg, sibcall_p)
}
if (sibcall_p)
{
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
use_reg (&CALL_INSN_FUNCTION_USAGE (insn),
gen_rtx_REG (DImode, AR_PFS_REGNUM));
}
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
}
void
@ -1557,7 +1553,7 @@ ia64_split_call (retval, addr, retaddr, scratch_r, scratch_b,
/* If we find we're calling through a register, then we're actually
calling through a descriptor, so load up the values. */
if (REG_P (addr))
if (REG_P (addr) && GR_REGNO_P (REGNO (addr)))
{
rtx tmp;
bool addr_dead_p;
@ -2785,7 +2781,7 @@ ia64_expand_epilogue (sibcall_p)
reg = gen_rtx_REG (DImode, AR_PFS_REGNUM);
emit_move_insn (reg, alt_reg);
}
else if (! current_function_is_leaf)
else if (TEST_HARD_REG_BIT (current_frame_info.mask, AR_PFS_REGNUM))
{
alt_regno = next_scratch_gr_reg ();
alt_reg = gen_rtx_REG (DImode, alt_regno);