aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-11-28 11:01:06 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-11-28 11:01:06 +0000
commitaa2e903e1d7f30c546b4e77f0aa71dff6c95754f (patch)
tree86f6b5a39694bf5e0465d3c350bf3f154664fd26
parent80e6a1edf9f81362dd40b062ebf81ae7592d19d9 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr79351.c26
-rw-r--r--gcc/tree-ssa-sccvn.c1
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))
{