diff options
author | H.J. Lu <hjl@gcc.gnu.org> | 2008-08-06 08:29:37 -0700 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2008-08-06 08:29:37 -0700 |
commit | e94a448f66945080611074fc7859bea46e6fc688 (patch) | |
tree | c3135360ae4b38adaeeb7da6a53d15035ce4a458 /gcc/function.c | |
parent | e088f04bdb2331f7ec6ba0faa4eb2c64982e56c3 (diff) | |
download | gcc-e94a448f66945080611074fc7859bea46e6fc688.zip gcc-e94a448f66945080611074fc7859bea46e6fc688.tar.gz gcc-e94a448f66945080611074fc7859bea46e6fc688.tar.bz2 |
re PR middle-end/37009 (No need to align stack when incoming stack is aligned)
gcc/
2008-08-06 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/37009
* cfgexpand.c (expand_stack_alignment): Check parm_stack_boundary
for incoming stack boundary.
* function.c (assign_parm_find_entry_rtl): Update
parm_stack_boundary.
* function.h (rtl_data): Add parm_stack_boundary.
* config/i386/i386.c (ix86_finalize_stack_realign_flags): Check
parm_stack_boundary for incoming stack boundary.
gcc/testsuite/
2008-08-06 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/37009
* gcc.dg/torture/stackalign/alloca-2.c: New.
* gcc.dg/torture/stackalign/alloca-3.c: Likewise.
* gcc.dg/torture/stackalign/alloca-4.c: Likewise.
* gcc.dg/torture/stackalign/vararg-3.c: Likewise.
* gcc.target/i386/incoming-1.c: Likewise.
* gcc.target/i386/incoming-2.c: Likewise.
* gcc.target/i386/incoming-3.c: Likewise.
* gcc.target/i386/incoming-4.c: Likewise.
* gcc.target/i386/incoming-5.c: Likewise.
From-SVN: r138806
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c index 6377751..7360022 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2261,6 +2261,11 @@ assign_parm_find_entry_rtl (struct assign_parm_data_all *all, entry_parm ? data->partial : 0, current_function_decl, &all->stack_args_size, &data->locate); + /* Update parm_stack_boundary if this parameter is passed in the + stack. */ + if (!in_regs && crtl->parm_stack_boundary < data->locate.boundary) + crtl->parm_stack_boundary = data->locate.boundary; + /* Adjust offsets to include the pretend args. */ pretend_bytes = all->extra_pretend_bytes - pretend_bytes; data->locate.slot_offset.constant += pretend_bytes; |