aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-12-10 13:56:51 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-12-10 13:56:51 +0000
commitdee75828b49690e14b12b949d07826774a023cfd (patch)
tree4855c8f6d1c205d85e4e598d58c84ed0cbcaf23b /gcc
parent4a902ec80fd0be5d102dc0cc781a651b3e59b91c (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr88427.c20
-rw-r--r--gcc/vr-values.c10
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));