From a64509053cfe1cab05710a393c1a26c63f15ef7f Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 9 Aug 2009 20:10:41 +0000 Subject: [PATCH] re PR tree-optimization/41016 (ICE in build_int_cst_wide with -O1) 2009-08-09 Richard Guenther 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 | 9 ++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr41016.c | 17 +++++++++++++++ gcc/tree-ssa-ifcombine.c | 31 ++++++--------------------- 4 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr41016.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1a92de..7dd9852 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2009-08-09 Richard Guenther + + 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 * c-common.c (c_fully_fold_internal): Issue a warning if a binary diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dbb473d..a61a62c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-08-09 Richard Guenther + + PR tree-optimization/41016 + * gcc.c-torture/compile/pr41016.c: New testcase. + 2009-08-09 Richard Sandiford * 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 index 0000000..57bddb4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr41016.c @@ -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"); +} diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c index 8cb9c1e..1d2d85b 100644 --- a/gcc/tree-ssa-ifcombine.c +++ b/gcc/tree-ssa-ifcombine.c @@ -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) -- 2.7.4