function.c (assign_parm_remove_parallels): Check mode of entry_parm.
authorDaniel Jacobowitz <dan@codesourcery.com>
Mon, 7 Jul 2008 16:05:11 +0000 (16:05 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Mon, 7 Jul 2008 16:05:11 +0000 (16:05 +0000)
* function.c (assign_parm_remove_parallels): Check mode of
entry_parm.
(assign_parm_setup_block_p): Also check mode of entry_parm.

From-SVN: r137575

gcc/ChangeLog
gcc/function.c

index 7ae7101a7c1cf725589cf0a6c1218341a79106db..3a74146f300e3eea6b323db6888d3b8adaea728a 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-07  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * function.c (assign_parm_remove_parallels): Check mode of
+       entry_parm.
+       (assign_parm_setup_block_p): Also check mode of entry_parm.
+
 2008-07-07  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-structalias.h (set_used_smts): Remove.
index d8234da38771098f5e4d8963832234d56d84ebef..69c2f68a4f9519a6e6bf91a9bbc20685b50339c7 100644 (file)
@@ -2364,8 +2364,7 @@ assign_parm_remove_parallels (struct assign_parm_data_one *data)
      This can be done with register operations rather than on the
      stack, even if we will store the reconstituted parameter on the
      stack later.  */
-  if (GET_CODE (entry_parm) == PARALLEL
-      && data->passed_mode != BLKmode)
+  if (GET_CODE (entry_parm) == PARALLEL && GET_MODE (entry_parm) != BLKmode)
     {
       rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm));
       emit_group_store (parmreg, entry_parm, NULL_TREE,
@@ -2421,6 +2420,8 @@ assign_parm_setup_block_p (struct assign_parm_data_one *data)
 {
   if (data->nominal_mode == BLKmode)
     return true;
+  if (GET_MODE (data->entry_parm) == BLKmode)
+    return true;
 
 #ifdef BLOCK_REG_PADDING
   /* Only assign_parm_setup_block knows how to deal with register arguments