aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-24 11:23:54 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-24 11:23:54 +0000
commitee80f0c6ba50ebf0300fb0cfe1079a1321295749 (patch)
tree7ab67bddf3a4ed6d0a7d38548175fceca7b1a190
parent3574e5df1f2a483b992b272ec57080472c24f0cb (diff)
downloadgcc-ee80f0c6ba50ebf0300fb0cfe1079a1321295749.zip
gcc-ee80f0c6ba50ebf0300fb0cfe1079a1321295749.tar.gz
gcc-ee80f0c6ba50ebf0300fb0cfe1079a1321295749.tar.bz2
re PR tree-optimization/92203 (ICE in eliminate_stmt, at tree-ssa-sccvn.c:5492)
2019-10-24 Richard Biener <rguenther@suse.de> PR tree-optimization/92203 * treee-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt): Skip eliminating conversion stmts inserted by insertion. * gcc.dg/torture/pr92203.c: New testcase. From-SVN: r277374
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr92203.c37
-rw-r--r--gcc/tree-ssa-sccvn.c9
4 files changed, 55 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e0c4c17..4873330 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-10-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/92203
+ * treee-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt):
+ Skip eliminating conversion stmts inserted by insertion.
+
2019-10-24 Ilya Leoshkevich <iii@linux.ibm.com>
* config/s390/s390.c (s390_get_thread_pointer): Use
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1497563..5a1cd91 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2019-10-24 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/92203
+ * gcc.dg/torture/pr92203.c: New testcase.
+
+2019-10-24 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/65930
* gcc.dg/vect/vect-reduc-2short.c: Fix typo.
diff --git a/gcc/testsuite/gcc.dg/torture/pr92203.c b/gcc/testsuite/gcc.dg/torture/pr92203.c
new file mode 100644
index 0000000..c752969
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr92203.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wno-div-by-zero" } */
+
+unsigned long int rr;
+
+void
+cw (int z9)
+{
+ int m5;
+ unsigned long int vz = 0;
+ long int *na;
+
+ if (z9 == 0)
+ rr = 0;
+ else
+ {
+ na = (long int *) &m5;
+ for (*na = 0; *na < 1; ++*na)
+ {
+ na = (long int *) &vz;
+ rr /= 0;
+ }
+ }
+
+ m5 = rr / 5;
+ ++vz;
+ if (vz != 0)
+ while (z9 < 1)
+ {
+ if (m5 >= 0)
+ rr += m5;
+
+ na = (long int *) &rr;
+ if (*na >= 0)
+ rr = 0;
+ }
+}
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 57331ab..3872168 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -5459,8 +5459,13 @@ eliminate_dom_walker::eliminate_stmt (basic_block b, gimple_stmt_iterator *gsi)
/* If this is an assignment from our leader (which
happens in the case the value-number is a constant)
- then there is nothing to do. */
- if (gimple_assign_single_p (stmt)
+ then there is nothing to do. Likewise if we run into
+ inserted code that needed a conversion because of
+ our type-agnostic value-numbering of loads. */
+ if ((gimple_assign_single_p (stmt)
+ || (is_gimple_assign (stmt)
+ && (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
+ || gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR)))
&& sprime == gimple_assign_rhs1 (stmt))
return;