aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-09-12 14:15:37 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-09-12 14:15:37 +0000
commit29545149bf8ca8c89a9a7d32fe7fdb8e9294759c (patch)
treede78c3ff6d003d92a966ab0d77d691cb438bed65
parentd681026df10348e1fbede89055cbd395dc66cdd8 (diff)
downloadgcc-29545149bf8ca8c89a9a7d32fe7fdb8e9294759c.zip
gcc-29545149bf8ca8c89a9a7d32fe7fdb8e9294759c.tar.gz
gcc-29545149bf8ca8c89a9a7d32fe7fdb8e9294759c.tar.bz2
re PR tree-optimization/82157 (ICE on valid code at -O2 and -O3: cannot update SSA form)
2017-09-12 Richard Biener <rguenther@suse.de> PR tree-optimization/82157 * tree-ssa-pre.c (remove_dead_inserted_code): Do not remove stmts with side-effects. * gcc.dg/torture/pr82157.c: New testcase. From-SVN: r252020
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr82157.c43
-rw-r--r--gcc/tree-ssa-pre.c2
4 files changed, 56 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7bc95e8..62e8fae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-09-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/82157
+ * tree-ssa-pre.c (remove_dead_inserted_code): Do not remove
+ stmts with side-effects.
+
2017-09-12 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5d81c58..5722639 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-09-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/82157
+ * gcc.dg/torture/pr82157.c: New testcase.
+
2017-09-12 Simon Atanasyan <simon.atanasyan@imgtec.com>
* gcc.target/mips/near-far-1.c: Add check for 'short_call'
diff --git a/gcc/testsuite/gcc.dg/torture/pr82157.c b/gcc/testsuite/gcc.dg/torture/pr82157.c
new file mode 100644
index 0000000..036b484
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr82157.c
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+
+int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
+
+int aa ()
+{
+ w = f < 0 || e >> f;
+ while (z)
+ h = i && (r && p) | ((l = p) == c % d);
+ k = v + 1 < a;
+ t = -(j < 1) * q;
+ return u;
+}
+
+int ab ()
+{
+ for (j = 0; 1; j = 5)
+ if (!s)
+ return d;
+}
+
+void ac ()
+{
+ char ad = aa ();
+ ab ();
+ if (x)
+ {
+ for (m = 0; m < 3; m = a)
+ {
+ y = a && b;
+ if (g)
+ break;
+ }
+ n = j;
+ }
+ o = j & ad;
+}
+
+int main ()
+{
+ ac ();
+ return 0;
+}
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 6f9fac5..364272d 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -4913,6 +4913,8 @@ remove_dead_inserted_code (void)
continue;
gimple *t = SSA_NAME_DEF_STMT (def);
+ if (gimple_has_side_effects (t))
+ continue;
/* Add uses to the worklist. */
ssa_op_iter iter;