diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-28 11:01:06 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-28 11:01:06 +0000 |
commit | aa2e903e1d7f30c546b4e77f0aa71dff6c95754f (patch) | |
tree | 86f6b5a39694bf5e0465d3c350bf3f154664fd26 | |
parent | 80e6a1edf9f81362dd40b062ebf81ae7592d19d9 (diff) | |
download | gcc-aa2e903e1d7f30c546b4e77f0aa71dff6c95754f.zip gcc-aa2e903e1d7f30c546b4e77f0aa71dff6c95754f.tar.gz gcc-aa2e903e1d7f30c546b4e77f0aa71dff6c95754f.tar.bz2 |
re PR tree-optimization/79351 (Invalid tree PRE optimization around compound literal)
2018-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/79351
* tree-ssa-sccvn.c (vn_reference_lookup_3): For assignments from
empty CONSTRUCTORs ensure the store is at a constant position.
* gcc.dg/torture/pr79351.c: New testcase.
From-SVN: r266551
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr79351.c | 26 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 1 |
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93b35e8..d112388 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-11-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/79351 + * tree-ssa-sccvn.c (vn_reference_lookup_3): For assignments from + empty CONSTRUCTORs ensure the store is at a constant position. + +2018-11-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/88229 * tree-ssa.c (non_rewritable_mem_ref_base): Check DECL_SIZE_UNIT is an INTEGER_CST before accessing it so. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5d3b2d1..b56d3dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-28 Richard Biener <rguenther@suse.de> + + PR tree-optimization/79351 + * gcc.dg/torture/pr79351.c: New testcase. + 2018-11-28 Jakub Jelinek <jakub@redhat.com> PR target/88189 @@ -13,7 +18,7 @@ PR c++/88215 * c-c++-common/ubsan/pr88215.c: New test. -2018-10-19 Richard Biener <rguenther@suse.de> +2018-11-28 Richard Biener <rguenther@suse.de> PR tree-optimization/88182 * g++.dg/gomp/pr88182.C: Move from libgomp and use -fopenmp-simd. diff --git a/gcc/testsuite/gcc.dg/torture/pr79351.c b/gcc/testsuite/gcc.dg/torture/pr79351.c new file mode 100644 index 0000000..0e145eb --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr79351.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ + +static struct state { + int k; + int dummy; +} states[256]; + +__attribute((noipa)) +static void +ismatch(int n) +{ + for (int j=0; j<n; j++) { + states[j] = (struct state){0}; + for (int i = 0; i <= j; i++) { + states[i].k++; + } + } +} + +int +main() +{ + ismatch(2); + if (states[0].k != 2) + __builtin_abort(); +} diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index e0ff405..b0b9d52 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2115,6 +2115,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_, base2 = get_ref_base_and_extent (gimple_assign_lhs (def_stmt), &offset2, &size2, &maxsize2, &reverse); if (known_size_p (maxsize2) + && known_eq (maxsize2, size2) && operand_equal_p (base, base2, 0) && known_subrange_p (offset, maxsize, offset2, size2)) { |