aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-34.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-divf.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c2
-rw-r--r--gcc/tree-vect-data-refs.c17
7 files changed, 32 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 04e1a00..3eaf564 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2012-03-14 Richard Guenther <rguenther@suse.de>
+ 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 <rguenther@suse.de>
+
* tree.h (DECL_BIT_FIELD_REPRESENTATIVE): New define.
* stor-layout.c (start_bitfield_representative): New function.
(finish_bitfield_representative): Likewise.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 406f095..1ce4c10 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,13 @@
2012-03-14 Richard Guenther <rguenther@suse.de>
+ 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 <rguenther@suse.de>
+
PR middle-end/52080
PR middle-end/52097
PR middle-end/48124
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 2eac33e..7600edf 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 5d4fc91..f01b7b4 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 0c0cd42..fa126e4 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 9ac9bd7..6c0d49b 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 b458d62..9b66d86 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