re PR tree-optimization/48734 (ICE in eliminate_redundant_comparison, at tree-ssa...
authorJakub Jelinek <jakub@redhat.com>
Tue, 26 Apr 2011 13:33:49 +0000 (15:33 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Apr 2011 13:33:49 +0000 (15:33 +0200)
PR tree-optimization/48734
* tree-ssa-reassoc.c (eliminate_redundant_comparison): Give up
if return value from maybe_fold_*_comparsions isn't something
the code is prepared to handle.

* gcc.c-torture/compile/pr48734.c: New test.

From-SVN: r172967

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr48734.c [new file with mode: 0644]
gcc/tree-ssa-reassoc.c

index 4d2bd987d29ec15be237aa1ea5d21325b7868661..0bf1088b0bbadc26a470ba62dab24c6b52df96bf 100644 (file)
@@ -1,3 +1,10 @@
+2011-04-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/48734
+       * tree-ssa-reassoc.c (eliminate_redundant_comparison): Give up
+       if return value from maybe_fold_*_comparsions isn't something
+       the code is prepared to handle.
+
 2011-04-26  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/predicates.md (ext_QIreg_operand): Remove extra
index 878490ae58fd83e29aee2f6b3438f20dd9cbb974..c07caacb2c156fce4deba7043fb1f6190effed9d 100644 (file)
@@ -1,5 +1,8 @@
 2011-04-26  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/48734
+       * gcc.c-torture/compile/pr48734.c: New test.
+
        PR testsuite/48753
        * gcc.dg/tree-prof/val-prof-2.c: Adjust for 32-bit HWI.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48734.c b/gcc/testsuite/gcc.c-torture/compile/pr48734.c
new file mode 100644 (file)
index 0000000..b20ea80
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR tree-optimization/48734 */
+
+unsigned int
+foo (int x, unsigned int y, unsigned int z)
+{
+  z &= (x == -__INT_MAX__ - 1 ? x : -x) > y;
+  z &= (x == -__INT_MAX__ - 1 ? x : -x) > y;
+  z &= (x == -__INT_MAX__ - 1 ? x : -x) > y;
+  z &= (x == -__INT_MAX__ - 1 ? x : -x) > y;
+  return z;
+}
index 904fef804475e102b4c8453676d955f529838148..987ec650778993165f147557697ae75d41588fea 100644 (file)
@@ -1,5 +1,6 @@
 /* Reassociation for trees.
-   Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011
+   Free Software Foundation, Inc.
    Contributed by Daniel Berlin <dan@dberlin.org>
 
 This file is part of GCC.
@@ -1279,6 +1280,20 @@ eliminate_redundant_comparison (enum tree_code opcode,
       if (!useless_type_conversion_p (TREE_TYPE (curr->op), TREE_TYPE (t)))
        t = fold_convert (TREE_TYPE (curr->op), t);
 
+      if (TREE_CODE (t) != INTEGER_CST
+         && !operand_equal_p (t, curr->op, 0))
+       {
+         enum tree_code subcode;
+         tree newop1, newop2;
+         if (!COMPARISON_CLASS_P (t))
+           continue;
+         extract_ops_from_tree (t, &subcode, &newop1, &newop2);
+         STRIP_USELESS_TYPE_CONVERSION (newop1);
+         STRIP_USELESS_TYPE_CONVERSION (newop2);
+         if (!is_gimple_val (newop1) || !is_gimple_val (newop2))
+           continue;
+       }
+
       if (dump_file && (dump_flags & TDF_DETAILS))
        {
          fprintf (dump_file, "Equivalence: ");