aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/function.c16
2 files changed, 11 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4eda0b1..526a2b0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,10 @@
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
* tree-tailcall.c (find_tail_calls): Don't check early for
diff --git a/gcc/function.c b/gcc/function.c
index 69866f9..00c56e3 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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. */