]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree.h (set_decl_incoming_rtl): Add a by_reference_p parameter.
authorRichard Sandiford <rsandifo@nildram.co.uk>
Wed, 19 Dec 2007 09:54:45 +0000 (09:54 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 19 Dec 2007 09:54:45 +0000 (09:54 +0000)
gcc/
* tree.h (set_decl_incoming_rtl): Add a by_reference_p parameter.
* emit-rtl.c (set_decl_incoming_rtl): Likewise.  Don't set the
rtl's register attributes when the parameter is true.
* function.c (assign_parms_unsplit_complex, assign_parms)
(expand_function_start): Update calls to set_decl_incoming_rtl.

From-SVN: r131056

gcc/ChangeLog
gcc/emit-rtl.c
gcc/function.c
gcc/tree.h

index b8ae7dea22e315a2c0ebcc4b1cfb7a09df495d51..46b29f081b1e0e1f49100071c50469b9ea7312ca 100644 (file)
@@ -1,3 +1,11 @@
+2007-12-19  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+       * tree.h (set_decl_incoming_rtl): Add a by_reference_p parameter.
+       * emit-rtl.c (set_decl_incoming_rtl): Likewise.  Don't set the
+       rtl's register attributes when the parameter is true.
+       * function.c (assign_parms_unsplit_complex, assign_parms)
+       (expand_function_start): Update calls to set_decl_incoming_rtl.
+
 2007-12-19  Richard Sandiford  <rsandifo@nildram.co.uk>
 
        * rtl.def (SUBREG): Update comments.
index ae8970ce25c74014364fe0440b4c98e1102bb805..5a2aede40ddc740601896073da727c37d5182cc7 100644 (file)
@@ -1045,13 +1045,14 @@ set_decl_rtl (tree t, rtx x)
     set_reg_attrs_for_decl_rtl (t, x);
 }
 
-/* Assign the RTX X to parameter declaration T.  */
+/* Assign the RTX X to parameter declaration T.  BY_REFERENCE_P is true
+   if the ABI requires the parameter to be passed by reference.  */
 
 void
-set_decl_incoming_rtl (tree t, rtx x)
+set_decl_incoming_rtl (tree t, rtx x, bool by_reference_p)
 {
   DECL_INCOMING_RTL (t) = x;
-  if (x)
+  if (x && !by_reference_p)
     set_reg_attrs_for_decl_rtl (t, x);
 }
 
index fe70cbf47acc44c00f2ffca3d1623e32fe8c6fa8..d89a04059246ae0dec3e8c28fe0d243941282694 100644 (file)
@@ -2973,13 +2973,13 @@ assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs)
              imag = gen_lowpart_SUBREG (inner, imag);
            }
          tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag);
-         set_decl_incoming_rtl (parm, tmp);
+         set_decl_incoming_rtl (parm, tmp, false);
          fnargs = TREE_CHAIN (fnargs);
        }
       else
        {
          SET_DECL_RTL (parm, DECL_RTL (fnargs));
-         set_decl_incoming_rtl (parm, DECL_INCOMING_RTL (fnargs));
+         set_decl_incoming_rtl (parm, DECL_INCOMING_RTL (fnargs), false);
 
          /* Set MEM_EXPR to the original decl, i.e. to PARM,
             instead of the copy of decl, i.e. FNARGS.  */
@@ -3035,7 +3035,7 @@ assign_parms (tree fndecl)
        }
 
       /* Record permanently how this parm was passed.  */
-      set_decl_incoming_rtl (parm, data.entry_parm);
+      set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer);
 
       /* Update info on where next arg arrives in registers.  */
       FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
@@ -4259,7 +4259,7 @@ expand_function_start (tree subr)
       tree parm = cfun->static_chain_decl;
       rtx local = gen_reg_rtx (Pmode);
 
-      set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
+      set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
       SET_DECL_RTL (parm, local);
       mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
 
index 331bdfab16efea304cdae5ecd57d13f30c7db87d..f61085da3d34ee885b4edb3f56f377a1c17dd6ff 100644 (file)
@@ -5135,7 +5135,7 @@ extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*,
 /* Assign the RTX to declaration.  */
 
 extern void set_decl_rtl (tree, rtx);
-extern void set_decl_incoming_rtl (tree, rtx);
+extern void set_decl_incoming_rtl (tree, rtx, bool);
 \f
 /* Enum and arrays used for tree allocation stats.
    Keep in sync with tree.c:tree_node_kind_names.  */