aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-10-13 09:00:01 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-10-13 09:00:01 +0000
commit6c9fbfa72eea6d4a8689831977bfde2072fc195a (patch)
treed3f78aadaeb5c9953ec708cce0af36c10785d82e /gcc
parentee9488e6a297a3ce03c1861d1fc7f51481ae8f8d (diff)
downloadgcc-6c9fbfa72eea6d4a8689831977bfde2072fc195a.zip
gcc-6c9fbfa72eea6d4a8689831977bfde2072fc195a.tar.gz
gcc-6c9fbfa72eea6d4a8689831977bfde2072fc195a.tar.bz2
re PR tree-optimization/50698 (pretending to create versioning for alias when not required)
2011-10-13 Richard Guenther <rguenther@suse.de> PR tree-optimization/50698 * tree-data-ref.c (split_constant_offset_1): Also process offsets of &MEM. * g++.dg/vect/pr50698.cc: New testcase. From-SVN: r179895
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/vect/pr50698.cc27
-rw-r--r--gcc/tree-data-ref.c3
4 files changed, 38 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 017594f..01d2135 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-10-13 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/50698
+ * tree-data-ref.c (split_constant_offset_1): Also process
+ offsets of &MEM.
+
2011-10-12 David S. Miller <davem@davemloft.net>
* config/sparc/sparc.h: Do not force TARGET_VIS3 and TARGET_FMAF
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 998e06b..ea7d8d8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-13 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/50698
+ * g++.dg/vect/pr50698.cc: New testcase.
+
2011-10-12 Janis Johnson <janisjo@codesourcery.com>
* gcc.target/powerpc/warn-1.c: Skip if not powerpc_vsx_ok.
diff --git a/gcc/testsuite/g++.dg/vect/pr50698.cc b/gcc/testsuite/g++.dg/vect/pr50698.cc
new file mode 100644
index 0000000..acb1936
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr50698.cc
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// { dg-require-effective-target vect_float }
+
+float mem[4096];
+const int N=1024;
+
+struct XYZ {
+ float * mem;
+ int n;
+ float * x() { return mem;}
+ float * y() { return x()+n;}
+ float * z() { return y()+n;}
+};
+
+inline
+void sum(float * x, float * y, float * z, int n) {
+ for (int i=0;i!=n; ++i)
+ x[i]=y[i]+z[i];
+}
+
+void sumS() {
+ XYZ xyz; xyz.mem=mem; xyz.n=N;
+ sum(xyz.x(),xyz.y(),xyz.z(),xyz.n);
+}
+
+// { dg-final { scan-tree-dump-not "run-time aliasing" "vect" } }
+// { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index a4c9367..053ffea 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -589,9 +589,6 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1,
int punsignedp, pvolatilep;
op0 = TREE_OPERAND (op0, 0);
- if (!handled_component_p (op0))
- return false;
-
base = get_inner_reference (op0, &pbitsize, &pbitpos, &poffset,
&pmode, &punsignedp, &pvolatilep, false);