OSDN Git Service

* function.c (assign_parms): Make sure parm PARALLEL combined
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Dec 2003 04:48:26 +0000 (04:48 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Dec 2003 04:48:26 +0000 (04:48 +0000)
        in reg is composed of more than one object and the mode really
        produces a reg.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74214 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/function.c

index f94dfda..26349e4 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 9dac3e4..79334af 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