re PR tree-optimization/41016 (ICE in build_int_cst_wide with -O1)
authorRichard Guenther <rguenther@suse.de>
Sun, 9 Aug 2009 20:10:41 +0000 (20:10 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Sun, 9 Aug 2009 20:10:41 +0000 (20:10 +0000)
2009-08-09  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/41016
* tree-ssa-ifcombine.c (get_name_for_bit_test): Fix tuplification
bug.
(operand_precision): Remove.
(integral_operand_p): Likewise.
(recognize_single_bit_test): Adjust.

* gcc.c-torture/compile/pr41016.c: New testcase.

From-SVN: r150595

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

index c1a92de..7dd9852 100644 (file)
@@ -1,3 +1,12 @@
+2009-08-09  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/41016
+       * tree-ssa-ifcombine.c (get_name_for_bit_test): Fix tuplification
+       bug.
+       (operand_precision): Remove.
+       (integral_operand_p): Likewise.
+       (recognize_single_bit_test): Adjust.
+
 2009-08-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * c-common.c (c_fully_fold_internal): Issue a warning if a binary
index dbb473d..a61a62c 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-09  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/41016
+       * gcc.c-torture/compile/pr41016.c: New testcase.
+
 2009-08-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * gcc.dg/overflow-warn-8.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41016.c b/gcc/testsuite/gcc.c-torture/compile/pr41016.c
new file mode 100644 (file)
index 0000000..57bddb4
--- /dev/null
@@ -0,0 +1,17 @@
+typedef struct _IO_FILE FILE;
+void
+CompareRNAStructures (FILE * ofp, int start, int L, char *ss_true, char *ss)
+{
+  int i;
+  float agree = 0.;
+  float pairs = 0.;
+  float pairs_true = 0.;
+  for (i = 0; i < L; i++)
+    {
+      pairs_true += 1.;
+      agree += 1.;
+    }
+  if (((int) pairs % 2 != 0) || ((int) pairs_true % 2 != 0)
+      || ((int) agree % 2 != 0))
+    Die ("Error in CompareRNAStrutures(); odd number of paired nucleotides\n");
+}
index 8cb9c1e..1d2d85b 100644 (file)
@@ -151,7 +151,7 @@ get_name_for_bit_test (tree candidate)
     {
       gimple def_stmt = SSA_NAME_DEF_STMT (candidate);
       if (is_gimple_assign (def_stmt)
-         && gimple_assign_cast_p (def_stmt))
+         && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt)))
        {
          if (TYPE_PRECISION (TREE_TYPE (candidate))
              <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (def_stmt))))
@@ -162,21 +162,6 @@ get_name_for_bit_test (tree candidate)
   return candidate;
 }
 
-/* Helpers for recognize_single_bit_test defined mainly for source code
-   formating.  */
-
-static int
-operand_precision (tree t)
-{
-  return TYPE_PRECISION (TREE_TYPE (t));
-}
-
-static bool
-integral_operand_p (tree t)
-{
-  return INTEGRAL_TYPE_P (TREE_TYPE (t));
-}
-
 /* Recognize a single bit test pattern in GIMPLE_COND and its defining
    statements.  Store the name being tested in *NAME and the bit
    in *BIT.  The GIMPLE_COND computes *NAME & (1 << *BIT).
@@ -212,15 +197,11 @@ recognize_single_bit_test (gimple cond, tree *name, tree *bit)
       stmt = SSA_NAME_DEF_STMT (orig_name);
 
       while (is_gimple_assign (stmt)
-            && (gimple_assign_ssa_name_copy_p (stmt)
-                || (gimple_assign_cast_p (stmt)
-                    && integral_operand_p (gimple_assign_lhs (stmt))
-                    && integral_operand_p (gimple_assign_rhs1 (stmt))
-                    && (operand_precision (gimple_assign_lhs (stmt))
-                        <= operand_precision (gimple_assign_rhs1 (stmt))))))
-       {
-         stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
-       }
+            && ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
+                 && (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (stmt)))
+                     <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt)))))
+                || gimple_assign_ssa_name_copy_p (stmt)))
+       stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
 
       /* If we found such, decompose it.  */
       if (is_gimple_assign (stmt)