re PR middle-end/15228 (useless copies of floating point operands)
authorRichard Henderson <rth@redhat.com>
Wed, 9 Jun 2004 23:52:13 +0000 (16:52 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 9 Jun 2004 23:52:13 +0000 (16:52 -0700)
        PR middle-end/15228
        * function.c (assign_parms): Always set_mem_align with the computed
        FUNCTION_ARG_BOUNDARY.  Don't clear stack_parm if !STRICT_ALIGNMENT.

From-SVN: r82867

gcc/ChangeLog
gcc/function.c

index 4eda0b17d6e30839710599078f1cc81f532eb61f..526a2b0dc2ad07ce57bb861d10f6cd78673c6b38 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-09  Richard Henderson  <rth@redhat.com>
+        PR middle-end/15228
+        * function.c (assign_parms): Always set_mem_align with the computed
+        FUNCTION_ARG_BOUNDARY.  Don't clear stack_parm if !STRICT_ALIGNMENT.
+
 2004-06-09  Richard Henderson  <rth@redhat.com>
 
        PR opt/15108
index 69866f9812da987b21af4b8085782b8b810369f2..00c56e322af369f773a701c0f374c1382d25ff8e 100644 (file)
@@ -4621,10 +4621,8 @@ assign_parms (tree fndecl)
                                                  offset_rtx));
 
        set_mem_attributes (stack_parm, parm, 1);
-       if (entry_parm && MEM_ATTRS (stack_parm)->align < PARM_BOUNDARY)
-         set_mem_align (stack_parm, PARM_BOUNDARY);
-
-       /* Set also REG_ATTRS if parameter was passed in a register.  */
+       set_mem_align (stack_parm, 
+                      FUNCTION_ARG_BOUNDARY (promoted_mode, passed_type));
        if (entry_parm)
          set_reg_attrs_for_parm (entry_parm, stack_parm);
       }
@@ -4692,13 +4690,9 @@ assign_parms (tree fndecl)
       /* If we can't trust the parm stack slot to be aligned enough
         for its ultimate type, don't use that slot after entry.
         We'll make another stack slot, if we need one.  */
-      {
-       unsigned int thisparm_boundary
-         = FUNCTION_ARG_BOUNDARY (promoted_mode, passed_type);
-
-       if (GET_MODE_ALIGNMENT (nominal_mode) > thisparm_boundary)
-         stack_parm = 0;
-      }
+      if (STRICT_ALIGNMENT && stack_parm
+         && GET_MODE_ALIGNMENT (nominal_mode) > MEM_ALIGN (stack_parm))
+       stack_parm = 0;
 
       /* If parm was passed in memory, and we need to convert it on entry,
         don't store it back in that same slot.  */