diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04e1a00e07b..3eaf5648185 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-03-14 Richard Guenther + + PR tree-optimization/52571 + * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move + flag_section_anchors check ... + (vect_can_force_dr_alignment_p): ... here. Do not re-align + DECL_COMMON variables. + 2012-03-14 Richard Guenther * tree.h (DECL_BIT_FIELD_REPRESENTATIVE): New define. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 406f0959f51..1ce4c103a12 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-03-14 Richard Guenther + + PR tree-optimization/52571 + * gcc.dg/vect/vect-2.c: Initialize arrays. + * gcc.dg/vect/no-section-anchors-vect-34.c: Likewise. + * gcc.target/i386/recip-vec-divf.c: Use -fno-common. + * gcc.target/i386/recip-vec-sqrtf.c: Likewise. + 2012-03-14 Richard Guenther PR middle-end/52080 diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-34.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-34.c index 2eac33e414b..7600edf160d 100644 --- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-34.c +++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-34.c @@ -7,7 +7,7 @@ struct { char ca[N]; -} s; +} s = {}; char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; __attribute__ ((noinline)) diff --git a/gcc/testsuite/gcc.dg/vect/vect-2.c b/gcc/testsuite/gcc.dg/vect/vect-2.c index 5d4fc914a97..f01b7b46ddc 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-2.c @@ -6,7 +6,7 @@ #define N 16 char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; -char ca[N]; +char ca[N] = {}; __attribute__ ((noinline)) int main1 () diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c index 0c0cd42ae8a..fa126e45f6f 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip -fno-common" } */ float a[4]; float b[4]; diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c index 9ac9bd76ce9..6c0d49b2214 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ +/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip -fno-common" } */ float a[4]; float b[4]; diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index b458d624d64..9b66d86d124 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -872,10 +872,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) if (!base_aligned) { - /* Do not change the alignment of global variables if - flag_section_anchors is enabled. */ - if (!vect_can_force_dr_alignment_p (base, TYPE_ALIGN (vectype)) - || (TREE_STATIC (base) && flag_section_anchors)) + if (!vect_can_force_dr_alignment_p (base, TYPE_ALIGN (vectype))) { if (vect_print_dump_info (REPORT_DETAILS)) { @@ -4546,12 +4543,22 @@ vect_can_force_dr_alignment_p (const_tree decl, unsigned int alignment) if (TREE_CODE (decl) != VAR_DECL) return false; - if (DECL_EXTERNAL (decl)) + /* We cannot change alignment of common or external symbols as another + translation unit may contain a definition with lower alignment. + The rules of common symbol linking mean that the definition + will override the common symbol. */ + if (DECL_EXTERNAL (decl) + || DECL_COMMON (decl)) return false; if (TREE_ASM_WRITTEN (decl)) return false; + /* Do not change the alignment of global variables if flag_section_anchors + is enabled. */ + if (TREE_STATIC (decl) && flag_section_anchors) + return false; + if (TREE_STATIC (decl)) return (alignment <= MAX_OFILE_ALIGNMENT); else