aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoey Ye <joey.ye@intel.com>2009-06-12 05:54:30 -0700
committerH.J. Lu <hjl@gcc.gnu.org>2009-06-12 05:54:30 -0700
commitf85882d8e1640453ca69be5ed13863167b26d869 (patch)
tree89cf6e9d3389a80f867d5f7c9315355646308b30 /gcc
parentfc9f468b5fbc938fb39fd1917918b37fc3448496 (diff)
downloadgcc-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/ChangeLog15
-rw-r--r--gcc/cfgexpand.c4
-rw-r--r--gcc/function.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/stackalign/pr39146.c13
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" } } */