aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2003-06-26 13:51:54 -0700
committerRichard Henderson <rth@gcc.gnu.org>2003-06-26 13:51:54 -0700
commit4e14f1f90fe38d7e5e25aa23fbb8e57fafd72a3e (patch)
tree1c2fefd494d1513938f7f0318e8f9f4c2f6eacd4 /gcc/config/ia64
parent49b83932ae442ba5c4f03377454c94ebf8786a6f (diff)
downloadgcc-4e14f1f90fe38d7e5e25aa23fbb8e57fafd72a3e.zip
gcc-4e14f1f90fe38d7e5e25aa23fbb8e57fafd72a3e.tar.gz
gcc-4e14f1f90fe38d7e5e25aa23fbb8e57fafd72a3e.tar.bz2
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
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r--gcc/config/ia64/ia64.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index eea13a7..3803033 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -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);