From: Richard Guenther Date: Wed, 4 Jul 2007 11:44:58 +0000 (+0000) Subject: re PR tree-optimization/32482 (ICE verify_ssa failed) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b0569227f5167ff69e3d729452f9066c9c15f15a;p=platform%2Fupstream%2Fgcc.git re PR tree-optimization/32482 (ICE verify_ssa failed) 2007-07-04 Richard Guenther PR tree-optimization/32482 * tree-ssa-ifcombine.c (recognize_single_bit_test): Use the original ssa name if we didn't find a shift expression. Fix shift constant for bit zero test. * gcc.c-torture/compile/pr32482.c: New testcase. From-SVN: r126314 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0768d7..a294920 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-07-04 Richard Guenther + + PR tree-optimization/32482 + * tree-ssa-ifcombine.c (recognize_single_bit_test): Use the + original ssa name if we didn't find a shift expression. + Fix shift constant for bit zero test. + 2007-07-04 Richard Sandiford * config/sh/lib1funcs.asm (ic_invalidate): Align constant pool. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0c96acb..a0c0745 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-07-04 Richard Guenther + + PR tree-optimization/32482 + * gcc.c-torture/compile/pr32482.c: New testcase. + 2007-07-04 Richard Sandiford * gcc.c-torture/execute/ieee/compare-fp-4.x: Add an XFAIL for ARM diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32482.c b/gcc/testsuite/gcc.c-torture/compile/pr32482.c new file mode 100644 index 0000000..9f0e3bf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr32482.c @@ -0,0 +1,23 @@ +typedef struct { unsigned long bits[((((1 << 0))+32 -1)/32)]; } nodemask_t; +static inline __attribute__((always_inline)) +int bitmap_empty(const unsigned long *src, int nbits) +{ + return ! (*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )); +} +static inline __attribute__((always_inline)) +int __nodes_empty(const nodemask_t *srcp, int nbits) +{ + return bitmap_empty(srcp->bits, nbits); +} +extern nodemask_t node_online_map; +void drain_array(void); +void drain_cpu_caches(void) +{ + int node; + if (!__nodes_empty(&(node_online_map), (1 << 0))) + for (((node)) = 0; ((node)) < 1; ((node))++) + { + } + if (!__nodes_empty(&(node_online_map), (1 << 0))) + drain_array(); +} diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c index 89fd61d..9403857 100644 --- a/gcc/tree-ssa-ifcombine.c +++ b/gcc/tree-ssa-ifcombine.c @@ -167,17 +167,22 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit) && integer_onep (TREE_OPERAND (t, 1)) && TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME) { - t = TREE_OPERAND (t, 0); + tree orig_name = TREE_OPERAND (t, 0); + + /* Look through copies and conversions to eventually + find the stmt that computes the shift. */ + t = orig_name; do { t = SSA_NAME_DEF_STMT (t); if (TREE_CODE (t) != GIMPLE_MODIFY_STMT) - return false; + break; t = GIMPLE_STMT_OPERAND (t, 1); if (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR) t = TREE_OPERAND (t, 0); } while (TREE_CODE (t) == SSA_NAME); + /* If we found such, decompose it. */ if (TREE_CODE (t) == RSHIFT_EXPR) { /* op0 & (1 << op1) */ @@ -187,8 +192,8 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit) else { /* t & 1 */ - *bit = integer_one_node; - *name = t; + *bit = integer_zero_node; + *name = orig_name; } return true;