function.c (assign_parms): Make sure parm PARALLEL combined in reg is composed of...
authorDavid Edelsohn <edelsohn@gnu.org>
Wed, 3 Dec 2003 04:48:26 +0000 (04:48 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Wed, 3 Dec 2003 04:48:26 +0000 (23:48 -0500)
        * function.c (assign_parms): Make sure parm PARALLEL combined
        in reg is composed of more than one object and the mode really
        produces a reg.

From-SVN: r74214

gcc/ChangeLog
gcc/function.c

index f94dfda77b5cefa7bb1edb055fdb5a1c72c20ad8..26349e4445caeb8f1f908fee6fbf7a42aa144d69 100644 (file)
@@ -1,3 +1,9 @@
+2003-12-03  David Edelsohn  <edelsohn@gnu.org>
+
+       * function.c (assign_parms): Make sure parm PARALLEL combined
+       in reg is composed of more than one object and the mode really
+       produces a reg.
+
 2003-12-03  Jan Hubicka  <jh@suse.cz>
 
        * i386.c (classify_argument): Make it 64bit clean.
index 9dac3e455768273c70b621f9d912a7a54904d254..79334af980d6fd82e5f4bf1442c6b41824c557cf 100644 (file)
@@ -4704,13 +4704,19 @@ assign_parms (tree fndecl)
 
         Set DECL_RTL to that place.  */
 
-      if (GET_CODE (entry_parm) == PARALLEL && nominal_mode != BLKmode)
+      if (GET_CODE (entry_parm) == PARALLEL && nominal_mode != BLKmode
+         && XVECLEN (entry_parm, 0) > 1)
        {
-         /* Objects the size of a register can be combined in registers */
+         /* Reconstitute objects the size of a register or larger using
+            register operations instead of the stack.  */
          rtx parmreg = gen_reg_rtx (nominal_mode);
-         emit_group_store (parmreg, entry_parm, TREE_TYPE (parm),
-                           int_size_in_bytes (TREE_TYPE (parm)));
-         SET_DECL_RTL (parm, parmreg);
+
+         if (REG_P (parmreg))
+           {
+             emit_group_store (parmreg, entry_parm, TREE_TYPE (parm),
+                               int_size_in_bytes (TREE_TYPE (parm)));
+             SET_DECL_RTL (parm, parmreg);
+           }
        }
 
       if (nominal_mode == BLKmode