Commit c205d0b3 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/52571 (vectorizer changes alignment of common symbols)

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.

	* 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.

From-SVN: r185380
parent 26c71b93
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.
......
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
......
......@@ -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))
......
......@@ -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 ()
......
/* { 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];
......
/* { 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];
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment