diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-04-18 09:54:58 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-04-18 09:54:58 +0200 |
commit | 4c445590e158cf39a9ca00fa1586b25c0851bd72 (patch) | |
tree | 4808210d675a550453f4f3c95620b9cd502a1771 /gcc | |
parent | ae1e2600eb59a0df56f81402228efb0e64ab47c6 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr56984.c | 9 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 8 |
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 |