calls.c (prepare_call_address): New parameter SIBCALLP.
authorRichard Henderson <rth@gcc.gnu.org>
Wed, 18 Jul 2001 03:24:53 +0000 (20:24 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 18 Jul 2001 03:24:53 +0000 (20:24 -0700)
        * calls.c (prepare_call_address): New parameter SIBCALLP.  If true,
        don't force the function address into a register.
        (expand_call, emit_library_call_value_1): Update callers.
        * builtins.c (expand_builtin_apply): Likewise.
        * expr.h (prepare_call_address): Update decl.

From-SVN: r44095

gcc/ChangeLog
gcc/builtins.c
gcc/calls.c
gcc/expr.h

index b4eaf6d84510dae010e9d311f13f467986050420..b0525f874a008665e3aa195027ac74a11dd2bddb 100644 (file)
@@ -1,11 +1,19 @@
+2001-07-17  Richard Henderson  <rth@redhat.com>
+
+       * calls.c (prepare_call_address): New parameter SIBCALLP.  If true,
+       don't force the function address into a register.
+       (expand_call, emit_library_call_value_1): Update callers.
+       * builtins.c (expand_builtin_apply): Likewise.
+       * expr.h (prepare_call_address): Update decl.
+
 2001-07-17  Chandrakala Chavva  <cchavva@redhat.com>
 
-        * config.gcc: For *-*-chorusos triplet, get chorus.h file from
-        config directory.
-        * config/i386/chorus.h: Move up.
-        * config/sparc/chorus.h: Likewise.
-        * config/rs6000/chorus.h: Likewise.
-        * config/chorus.h: Moved here.
+       * config.gcc: For *-*-chorusos triplet, get chorus.h file from
+       config directory.
+       * config/i386/chorus.h: Move up.
+       * config/sparc/chorus.h: Likewise.
+       * config/rs6000/chorus.h: Likewise.
+       * config/chorus.h: Moved here.
 
 2001-07-17  Andreas Schwab  <schwab@suse.de>
  
index 219714dd7d1cd551b225bdb1702ee4707d063fb8..8a44a7c679864898cf438b6c66a2fbaf60faf1ad 100644 (file)
@@ -1138,7 +1138,7 @@ expand_builtin_apply (function, arguments, argsize)
     }
 
   /* All arguments and registers used for the call are set up by now!  */
-  function = prepare_call_address (function, NULL_TREE, &call_fusage, 0);
+  function = prepare_call_address (function, NULL_TREE, &call_fusage, 0, 0);
 
   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
      and we don't want to load it into a register as an optimization,
index 7421d340cd192ba7b098a44e2e6afedddc3ad4ff..045c9f9e1a2f1c0e01f46d785eb5ff62c3105188 100644 (file)
@@ -355,11 +355,12 @@ calls_function_1 (exp, which)
    CALL_INSN_FUNCTION_USAGE information.  */
 
 rtx
-prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
+prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen, sibcallp)
      rtx funexp;
      tree fndecl;
      rtx *call_fusage;
      int reg_parm_seen;
+     int sibcallp;
 {
   rtx static_chain_value = 0;
 
@@ -377,7 +378,7 @@ prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
     funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
              ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
              : memory_address (FUNCTION_MODE, funexp));
-  else
+  else if (! sibcallp)
     {
 #ifndef NO_FUNCTION_CSE
       if (optimize && ! flag_no_function_cse)
@@ -3038,7 +3039,7 @@ expand_call (exp, target, ignore)
        }
 
       funexp = prepare_call_address (funexp, fndecl, &call_fusage,
-                                    reg_parm_seen);
+                                    reg_parm_seen, pass == 0);
 
       load_register_parameters (args, num_actuals, &call_fusage, flags);
 
@@ -4005,7 +4006,7 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
   else
     argnum = 0;
 
-  fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0);
+  fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0, 0);
 
   /* Now load any reg parms into their regs.  */
 
index f43b08ca291f7c6631066493dff7e6778782a903..ed79d99d05bd9057ae7be253137191dff7faafd0 100644 (file)
@@ -1112,7 +1112,7 @@ extern rtx trampoline_address PARAMS ((tree));
    in its original home.  This becomes invalid if any more code is emitted.  */
 extern rtx hard_function_value PARAMS ((tree, tree, int));
 
-extern rtx prepare_call_address        PARAMS ((rtx, tree, rtx *, int));
+extern rtx prepare_call_address        PARAMS ((rtx, tree, rtx *, int, int));
 
 extern rtx expand_call PARAMS ((tree, rtx, int));