]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/56984 (ICE in tree_vrp.c)
authorJakub Jelinek <jakub@redhat.com>
Thu, 18 Apr 2013 07:54:58 +0000 (09:54 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 18 Apr 2013 07:54:58 +0000 (09:54 +0200)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr56984.c [new file with mode: 0644]
gcc/tree-vrp.c

index 104f3170c74fd2ee040a0718b9b91fa5cd2c3d2e..fd7d6efc8fa3d7eabfc9fe72289408eba9fe6bd6 100644 (file)
@@ -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,
index 61d7a8245b1f0b4112ac455d3ae6a9d338a8464f..64ffe8f4a7e569a2eb52d6d34fe7d1d9645f36b3 100644 (file)
@@ -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 (file)
index 0000000..bd00bee
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR tree-optimization/56984 */
+
+int
+foo (int x)
+{
+  if ((x >> 31) < -1)
+    x++;
+  return x;
+}
index be1a3808cf59b74483297d042c8304b06d2c97cd..5b4321a3a27d3286c2a445122f5bf1d2d46997c7 100644 (file)
@@ -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