diff options
author | Richard Biener <rguenther@suse.de> | 2018-12-10 13:56:51 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-12-10 13:56:51 +0000 |
commit | dee75828b49690e14b12b949d07826774a023cfd (patch) | |
tree | 4855c8f6d1c205d85e4e598d58c84ed0cbcaf23b /gcc | |
parent | 4a902ec80fd0be5d102dc0cc781a651b3e59b91c (diff) | |
download | gcc-dee75828b49690e14b12b949d07826774a023cfd.zip gcc-dee75828b49690e14b12b949d07826774a023cfd.tar.gz gcc-dee75828b49690e14b12b949d07826774a023cfd.tar.bz2 |
re PR tree-optimization/88427 (ICE: tree check: expected integer_cst, have plus_expr in get_len, at tree.h:5617)
2018-12-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/88427
* vr-values.c (vr_values::extract_range_from_phi_node):
Handle symbolic ranges conservatively when trying to drop
to Inf +- 1.
* gcc.dg/pr88427.c: New testcase.
From-SVN: r266955
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr88427.c | 20 | ||||
-rw-r--r-- | gcc/vr-values.c | 10 |
4 files changed, 38 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 600cb47..e91b1f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-12-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/88427 + * vr-values.c (vr_values::extract_range_from_phi_node): + Handle symbolic ranges conservatively when trying to drop + to Inf +- 1. + 2018-12-10 Martin Jambor <mjambor@suse.cz> PR ipa/88214 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fa7bb7b..2d5b366 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-12-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/88427 + * gcc.dg/pr88427.c: New testcase. + 2018-12-10 Jakub Jelinek <jakub@redhat.com> PR ipa/87955 diff --git a/gcc/testsuite/gcc.dg/pr88427.c b/gcc/testsuite/gcc.dg/pr88427.c new file mode 100644 index 0000000..60b179c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr88427.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-dce -fno-tree-fre -Wno-div-by-zero" } */ + +void +uj (int eq, int s4) +{ + short int tm = 0; + + for (;;) + if (eq == s4) + { + tm += !!s4; + if (tm == s4) + { + eq += tm; + for (;;) + eq /= 0; + } + } +} diff --git a/gcc/vr-values.c b/gcc/vr-values.c index 075ea84..cbc759a 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -2891,8 +2891,9 @@ vr_values::extract_range_from_phi_node (gphi *phi, value_range *vr_result) if (cmp_min < 0) new_min = lhs_vr->min (); else if (cmp_min > 0 - && tree_int_cst_lt (vrp_val_min (vr_result->type ()), - vr_result->min ())) + && (TREE_CODE (vr_result->min ()) != INTEGER_CST + || tree_int_cst_lt (vrp_val_min (vr_result->type ()), + vr_result->min ()))) new_min = int_const_binop (PLUS_EXPR, vrp_val_min (vr_result->type ()), build_int_cst (vr_result->type (), 1)); @@ -2901,8 +2902,9 @@ vr_values::extract_range_from_phi_node (gphi *phi, value_range *vr_result) if (cmp_max > 0) new_max = lhs_vr->max (); else if (cmp_max < 0 - && tree_int_cst_lt (vr_result->max (), - vrp_val_max (vr_result->type ()))) + && (TREE_CODE (vr_result->max ()) != INTEGER_CST + || tree_int_cst_lt (vr_result->max (), + vrp_val_max (vr_result->type ())))) new_max = int_const_binop (MINUS_EXPR, vrp_val_max (vr_result->type ()), build_int_cst (vr_result->type (), 1)); |