From: Richard Henderson Date: Thu, 26 Jun 2003 20:51:54 +0000 (-0700) Subject: ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls. X-Git-Tag: releases/gcc-3.4.0~5438 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4e14f1f90fe38d7e5e25aa23fbb8e57fafd72a3e;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2cc0491e62e..90789f493596 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,13 @@ * config/ia64/ia64.h (REGISTER_NAMES): R0 is really AP. +2003-06-26 Richard Henderson + + * 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 * emit-rtl.c (try_split): Append to new CALL_INSN_FUNCTION_USAGE diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index eea13a7d9fe5..3803033a4b85 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);