]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.
authorRichard Henderson <rth@redhat.com>
Thu, 26 Jun 2003 20:51:54 +0000 (13:51 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 26 Jun 2003 20:51:54 +0000 (13:51 -0700)
        * 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

gcc/ChangeLog
gcc/config/ia64/ia64.c

index e2cc0491e62ec5ee66f9f5003ba1733a41ba2d97..90789f4935963b1d56aac12b5381b8f28ccfc1a7 100644 (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
index eea13a7d9fe5f99fccd474b7d1d25d0bdfee47a8..3803033a4b85b9c6163236b30acd29c84f54b7aa 100644 (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);