diff options
author | Richard Guenther <rguenther@suse.de> | 2011-10-13 09:00:01 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-10-13 09:00:01 +0000 |
commit | 6c9fbfa72eea6d4a8689831977bfde2072fc195a (patch) | |
tree | d3f78aadaeb5c9953ec708cce0af36c10785d82e /gcc | |
parent | ee9488e6a297a3ce03c1861d1fc7f51481ae8f8d (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/vect/pr50698.cc | 27 | ||||
-rw-r--r-- | gcc/tree-data-ref.c | 3 |
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); |