re PR target/15941 (new fails gcc.dg/compat/struct-by-value-11 and gcc.dg/compat/struct-by-value-1)
PR target/15941 * function.c (assign_parms): If not padding upward or intentionally forcing upward padding, take offset_rtx into account when determining the alignment for stack_parm. From-SVN: r83396
This commit is contained in:
parent
8426c25e7c
commit
ebca59c355
@ -1,3 +1,10 @@
|
||||
2004-06-19 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR target/15941
|
||||
* function.c (assign_parms): If not padding upward or intentionally
|
||||
forcing upward padding, take offset_rtx into account when determining
|
||||
the alignment for stack_parm.
|
||||
|
||||
2004-06-19 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR target/15550
|
||||
|
@ -4603,6 +4603,7 @@ assign_parms (tree fndecl)
|
||||
|
||||
{
|
||||
rtx offset_rtx;
|
||||
unsigned int align, boundary;
|
||||
|
||||
/* If we're passing this arg using a reg, make its stack home
|
||||
the aligned stack slot. */
|
||||
@ -4620,8 +4621,24 @@ assign_parms (tree fndecl)
|
||||
offset_rtx));
|
||||
|
||||
set_mem_attributes (stack_parm, parm, 1);
|
||||
set_mem_align (stack_parm,
|
||||
FUNCTION_ARG_BOUNDARY (promoted_mode, passed_type));
|
||||
|
||||
boundary = FUNCTION_ARG_BOUNDARY (promoted_mode, passed_type);
|
||||
align = 0;
|
||||
|
||||
/* If we're padding upward, we know that the alignment of the slot
|
||||
is FUNCTION_ARG_BOUNDARY. If we're using slot_offset, we're
|
||||
intentionally forcing upward padding. Otherwise we have to come
|
||||
up with a guess at the alignment based on OFFSET_RTX. */
|
||||
if (locate.where_pad == upward || entry_parm)
|
||||
align = boundary;
|
||||
else if (GET_CODE (offset_rtx) == CONST_INT)
|
||||
{
|
||||
align = INTVAL (offset_rtx) * BITS_PER_UNIT | boundary;
|
||||
align = align & -align;
|
||||
}
|
||||
if (align > 0)
|
||||
set_mem_align (stack_parm, align);
|
||||
|
||||
if (entry_parm)
|
||||
set_reg_attrs_for_parm (entry_parm, stack_parm);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user