diff options
author | Martin Jambor <mjambor@suse.cz> | 2019-03-10 17:20:06 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2019-03-10 17:20:06 +0100 |
commit | b496651b7d281bd1bf22688f4de0cbb78c1bf8e5 (patch) | |
tree | 8a9e5b2bc72dddda093b0e99bf113af636f6c757 /gcc/testsuite | |
parent | 7f862706a22c2ce0b94390c5b6ecd3cb15a135d9 (diff) | |
download | gcc-b496651b7d281bd1bf22688f4de0cbb78c1bf8e5.zip gcc-b496651b7d281bd1bf22688f4de0cbb78c1bf8e5.tar.gz gcc-b496651b7d281bd1bf22688f4de0cbb78c1bf8e5.tar.bz2 |
Make SRA less strict with memcpy performing MEM_REFs
2019-03-10 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/85762
PR tree-optimization/87008
PR tree-optimization/85459
* tree-sra.c (contains_vce_or_bfcref_p): New parameter, set the bool
it points to if there is a type changing MEM_REF. Adjust all callers.
(build_accesses_from_assign): Disable total scalarization if
contains_vce_or_bfcref_p returns true through the new parameter, for
both rhs and lhs.
testsuite/
* g++.dg/tree-ssa/pr87008.C: New test.
* gcc.dg/guality/pr54970.c: Xfail tests querying a[0] everywhere.
From-SVN: r269556
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr87008.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/guality/pr54970.c | 6 |
3 files changed, 28 insertions, 3 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9dfdfe3..b6d6f67 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-03-10 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/85762 + PR tree-optimization/87008 + PR tree-optimization/85459 + * g++.dg/tree-ssa/pr87008.C: New test. + * gcc.dg/guality/pr54970.c: Xfail tests querying a[0] everywhere. + 2019-03-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/66089 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr87008.C b/gcc/testsuite/g++.dg/tree-ssa/pr87008.C new file mode 100644 index 0000000..eef521f --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr87008.C @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +extern void dontcallthis(); + +struct A { long a, b; }; +struct B : A {}; +template<class T>void cp(T&a,T const&b){a=b;} +long f(B x){ + B y; cp<A>(y,x); + B z; cp<A>(z,x); + if (y.a - z.a) + dontcallthis (); + return 0; +} + +/* { dg-final { scan-tree-dump-not "dontcallthis" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/guality/pr54970.c b/gcc/testsuite/gcc.dg/guality/pr54970.c index 5d32af0..2e0bc57 100644 --- a/gcc/testsuite/gcc.dg/guality/pr54970.c +++ b/gcc/testsuite/gcc.dg/guality/pr54970.c @@ -8,17 +8,17 @@ int main () { - int a[] = { 1, 2, 3 }; /* { dg-final { gdb-test .+4 "a\[0\]" "1" } } */ + int a[] = { 1, 2, 3 }; /* { dg-final { gdb-test .+4 "a\[0\]" "1" { xfail { *-*-* } } } } */ int *p = a + 2; /* { dg-final { gdb-test .+3 "a\[1\]" "2" } } */ int *q = a + 1; /* { dg-final { gdb-test .+2 "a\[2\]" "3" } } */ /* { dg-final { gdb-test .+1 "*p" "3" } } */ asm volatile (NOP); /* { dg-final { gdb-test . "*q" "2" } } */ - *p += 10; /* { dg-final { gdb-test .+4 "a\[0\]" "1" } } */ + *p += 10; /* { dg-final { gdb-test .+4 "a\[0\]" "1" { xfail { *-*-* } } } } */ /* { dg-final { gdb-test .+3 "a\[1\]" "2" } } */ /* { dg-final { gdb-test .+2 "a\[2\]" "13" } } */ /* { dg-final { gdb-test .+1 "*p" "13" } } */ asm volatile (NOP); /* { dg-final { gdb-test . "*q" "2" } } */ - *q += 10; /* { dg-final { gdb-test .+4 "a\[0\]" "1" } } */ + *q += 10; /* { dg-final { gdb-test .+4 "a\[0\]" "1" { xfail { *-*-* } } } } */ /* { dg-final { gdb-test .+3 "a\[1\]" "12" } } */ /* { dg-final { gdb-test .+2 "a\[2\]" "13" } } */ /* { dg-final { gdb-test .+1 "*p" "13" } } */ |