From: Jakub Jelinek Date: Thu, 18 Apr 2013 07:54:58 +0000 (+0200) Subject: re PR tree-optimization/56984 (ICE in tree_vrp.c) X-Git-Tag: releases/gcc-4.9.0~6386 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c445590e158cf39a9ca00fa1586b25c0851bd72;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 104f3170c74f..fd7d6efc8fa3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-04-18 Jakub Jelinek + + 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 * lower-subreg.c (resolve_simple_move): If called self-recursive, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 61d7a8245b1f..64ffe8f4a7e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2013-04-18 Jakub Jelinek + 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 000000000000..bd00bee88eec --- /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 be1a3808cf59..5b4321a3a27d 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