diff options
author | Richard Biener <rguenther@suse.de> | 2019-10-24 11:23:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-10-24 11:23:54 +0000 |
commit | ee80f0c6ba50ebf0300fb0cfe1079a1321295749 (patch) | |
tree | 7ab67bddf3a4ed6d0a7d38548175fceca7b1a190 | |
parent | 3574e5df1f2a483b992b272ec57080472c24f0cb (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr92203.c | 37 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 9 |
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; |