aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-04-18 09:54:58 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2013-04-18 09:54:58 +0200
commit4c445590e158cf39a9ca00fa1586b25c0851bd72 (patch)
tree4808210d675a550453f4f3c95620b9cd502a1771 /gcc
parentae1e2600eb59a0df56f81402228efb0e64ab47c6 (diff)
downloadgcc-4c445590e158cf39a9ca00fa1586b25c0851bd72.zip
gcc-4c445590e158cf39a9ca00fa1586b25c0851bd72.tar.gz
gcc-4c445590e158cf39a9ca00fa1586b25c0851bd72.tar.bz2
re PR tree-optimization/56984 (ICE in tree_vrp.c)
PR tree-optimization/56984 * tree-vrp.c (register_edge_assert_for_2): For (x >> M) < N and (x >> M) >= N don't register any assertion if N << M is the minimum value. * gcc.c-torture/compile/pr56984.c: New test. From-SVN: r198051
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr56984.c9
-rw-r--r--gcc/tree-vrp.c8
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 104f317..fd7d6ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-04-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/56984
+ * tree-vrp.c (register_edge_assert_for_2): For (x >> M) < N
+ and (x >> M) >= N don't register any assertion if N << M is the
+ minimum value.
+
2013-04-18 Steven Bosscher <steven@gcc.gnu.org>
* lower-subreg.c (resolve_simple_move): If called self-recursive,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 61d7a82..64ffe8f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2013-04-18 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/56984
+ * gcc.c-torture/compile/pr56984.c: New test.
+
PR rtl-optimization/56992
* gcc.dg/pr56992.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr56984.c b/gcc/testsuite/gcc.c-torture/compile/pr56984.c
new file mode 100644
index 0000000..bd00bee
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr56984.c
@@ -0,0 +1,9 @@
+/* PR tree-optimization/56984 */
+
+int
+foo (int x)
+{
+ if ((x >> 31) < -1)
+ x++;
+ return x;
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index be1a380..5b4321a 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -4895,7 +4895,13 @@ register_edge_assert_for_2 (tree name, edge e, gimple_stmt_iterator bsi,
new_comp_code = comp_code == EQ_EXPR ? LE_EXPR : GT_EXPR;
}
else if (comp_code == LT_EXPR || comp_code == GE_EXPR)
- new_val = val2;
+ {
+ double_int minval
+ = double_int::min_value (prec, TYPE_UNSIGNED (TREE_TYPE (val)));
+ new_val = val2;
+ if (minval == tree_to_double_int (new_val))
+ new_val = NULL_TREE;
+ }
else
{
double_int maxval