Commit b0569227 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/32482 (ICE verify_ssa failed)

2007-07-04  Richard Guenther  <rguenther@suse.de>

	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
parent 6162fe83
2007-07-04 Richard Guenther <rguenther@suse.de>
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 <richard@codesourcery.com> 2007-07-04 Richard Sandiford <richard@codesourcery.com>
* config/sh/lib1funcs.asm (ic_invalidate): Align constant pool. * config/sh/lib1funcs.asm (ic_invalidate): Align constant pool.
......
2007-07-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/32482
* gcc.c-torture/compile/pr32482.c: New testcase.
2007-07-04 Richard Sandiford <richard@codesourcery.com> 2007-07-04 Richard Sandiford <richard@codesourcery.com>
* gcc.c-torture/execute/ieee/compare-fp-4.x: Add an XFAIL for ARM * gcc.c-torture/execute/ieee/compare-fp-4.x: Add an XFAIL for ARM
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();
}
...@@ -167,17 +167,22 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit) ...@@ -167,17 +167,22 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit)
&& integer_onep (TREE_OPERAND (t, 1)) && integer_onep (TREE_OPERAND (t, 1))
&& TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME) && 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 { do {
t = SSA_NAME_DEF_STMT (t); t = SSA_NAME_DEF_STMT (t);
if (TREE_CODE (t) != GIMPLE_MODIFY_STMT) if (TREE_CODE (t) != GIMPLE_MODIFY_STMT)
return false; break;
t = GIMPLE_STMT_OPERAND (t, 1); t = GIMPLE_STMT_OPERAND (t, 1);
if (TREE_CODE (t) == NOP_EXPR if (TREE_CODE (t) == NOP_EXPR
|| TREE_CODE (t) == CONVERT_EXPR) || TREE_CODE (t) == CONVERT_EXPR)
t = TREE_OPERAND (t, 0); t = TREE_OPERAND (t, 0);
} while (TREE_CODE (t) == SSA_NAME); } while (TREE_CODE (t) == SSA_NAME);
/* If we found such, decompose it. */
if (TREE_CODE (t) == RSHIFT_EXPR) if (TREE_CODE (t) == RSHIFT_EXPR)
{ {
/* op0 & (1 << op1) */ /* op0 & (1 << op1) */
...@@ -187,8 +192,8 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit) ...@@ -187,8 +192,8 @@ recognize_single_bit_test (tree cond_expr, tree *name, tree *bit)
else else
{ {
/* t & 1 */ /* t & 1 */
*bit = integer_one_node; *bit = integer_zero_node;
*name = t; *name = orig_name;
} }
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment