diff options
author | Joey Ye <joey.ye@intel.com> | 2009-06-12 05:54:30 -0700 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-06-12 05:54:30 -0700 |
commit | f85882d8e1640453ca69be5ed13863167b26d869 (patch) | |
tree | 89cf6e9d3389a80f867d5f7c9315355646308b30 /gcc | |
parent | fc9f468b5fbc938fb39fd1917918b37fc3448496 (diff) | |
download | gcc-f85882d8e1640453ca69be5ed13863167b26d869.zip gcc-f85882d8e1640453ca69be5ed13863167b26d869.tar.gz gcc-f85882d8e1640453ca69be5ed13863167b26d869.tar.bz2 |
re PR target/39146 (Unnecessary stack alignment)
gcc/
2009-06-12 Joey Ye <joey.ye@intel.com>
PR middle-end/39146
* cfgexpand.c (get_decl_align_unit): Update
max_used_stack_slot_alignment with align instead of
stack_alignment_needed.
* function.c (assign_stack_local_1): Update
max_used_stack_slot_alignment with alignment_in_bits instead
of stack_alignment_needed.
(locate_and_pad_parm): Don't update max_used_stack_slot_alignment
here.
gcc/testsuite/
2009-06-12 Joey Ye <joey.ye@intel.com>
H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/39146
* gcc.target/i386/stackalign/pr39146.c: New.
From-SVN: r148428
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 4 | ||||
-rw-r--r-- | gcc/function.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/stackalign/pr39146.c | 13 |
5 files changed, 37 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f8312f..de0d2ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2009-06-12 Joey Ye <joey.ye@intel.com> + + PR middle-end/39146 + * cfgexpand.c (get_decl_align_unit): Update + max_used_stack_slot_alignment with align instead of + stack_alignment_needed. + + * function.c (assign_stack_local_1): Update + max_used_stack_slot_alignment with alignment_in_bits instead + of stack_alignment_needed. + (locate_and_pad_parm): Don't update max_used_stack_slot_alignment + here. + 2009-06-12 Jakub Jelinek <jakub@redhat.com> * dwarf2out.c (last_var_location_insn): New variable. @@ -8,7 +21,7 @@ 2009-06-11 Richard Henderson <rth@redhat.com> - * alpha.c (alpha_expand_prologue): Add a REF_CFA_REGISTER + * alpha.c (alpha_expand_prologue): Add a REF_CFA_REGISTER note when storing the frame pointer in a register. (FRP): Don't redefine to nothing for epilogue. (alpha_expand_epilogue): Mark register and sp restores. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index ff2684e..3346d2c 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -564,8 +564,8 @@ get_decl_align_unit (tree decl) So here we only make sure stack_alignment_needed >= align. */ if (crtl->stack_alignment_needed < align) crtl->stack_alignment_needed = align; - if (crtl->max_used_stack_slot_alignment < crtl->stack_alignment_needed) - crtl->max_used_stack_slot_alignment = crtl->stack_alignment_needed; + if (crtl->max_used_stack_slot_alignment < align) + crtl->max_used_stack_slot_alignment = align; return align / BITS_PER_UNIT; } diff --git a/gcc/function.c b/gcc/function.c index ddf08b04..8274177 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -355,8 +355,8 @@ assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, if (crtl->stack_alignment_needed < alignment_in_bits) crtl->stack_alignment_needed = alignment_in_bits; - if (crtl->max_used_stack_slot_alignment < crtl->stack_alignment_needed) - crtl->max_used_stack_slot_alignment = crtl->stack_alignment_needed; + if (crtl->max_used_stack_slot_alignment < alignment_in_bits) + crtl->max_used_stack_slot_alignment = alignment_in_bits; /* Calculate how many bytes the start of local variables is off from stack alignment. */ @@ -3520,8 +3520,6 @@ locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs, calling function side. */ if (crtl->stack_alignment_needed < boundary) crtl->stack_alignment_needed = boundary; - if (crtl->max_used_stack_slot_alignment < crtl->stack_alignment_needed) - crtl->max_used_stack_slot_alignment = crtl->stack_alignment_needed; if (crtl->preferred_stack_boundary < boundary) crtl->preferred_stack_boundary = boundary; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f64d23f..d90eca5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-06-12 Joey Ye <joey.ye@intel.com> + H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/39146 + * gcc.target/i386/stackalign/pr39146.c: New. + 2009-06-11 H.J. Lu <hongjiu.lu@intel.com> * gcc.target/i386/crc32-1.c: New. diff --git a/gcc/testsuite/gcc.target/i386/stackalign/pr39146.c b/gcc/testsuite/gcc.target/i386/stackalign/pr39146.c new file mode 100644 index 0000000..9ae5f03 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/stackalign/pr39146.c @@ -0,0 +1,13 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -mavx" } */ + +typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__)); + + +__m256i +bar (__m256i x) +{ + return x; +} + +/* { dg-final { scan-assembler-not "and\[lq\]?\[^\\n\]*-32,\[^\\n\]*sp" } } */ |