Commit 31348d52 by Richard Biener Committed by Richard Biener

re PR middle-end/56483 (LTO issue with expanding GIMPLE_COND)

2013-03-18  Richard Biener  <rguenther@suse.de>

	PR middle-end/56483
	* cfgexpand.c (expand_gimple_cond): Inline gimple_cond_single_var_p
	and implement properly.
	* gimple.h (gimple_cond_single_var_p): Remove.

From-SVN: r196776
parent fcac74a1
2013-03-18 Richard Biener <rguenther@suse.de> 2013-03-18 Richard Biener <rguenther@suse.de>
PR middle-end/56483
* cfgexpand.c (expand_gimple_cond): Inline gimple_cond_single_var_p
and implement properly.
* gimple.h (gimple_cond_single_var_p): Remove.
2013-03-18 Richard Biener <rguenther@suse.de>
* tree-data-ref.h (find_data_references_in_loop): Declare. * tree-data-ref.h (find_data_references_in_loop): Declare.
* tree-data-ref.c (get_references_in_stmt): Use a stack * tree-data-ref.c (get_references_in_stmt): Use a stack
vector pre-allocated in the callers. vector pre-allocated in the callers.
......
...@@ -1886,9 +1886,14 @@ expand_gimple_cond (basic_block bb, gimple stmt) ...@@ -1886,9 +1886,14 @@ expand_gimple_cond (basic_block bb, gimple stmt)
be cleaned up by combine. But some pattern matchers like if-conversion be cleaned up by combine. But some pattern matchers like if-conversion
work better when there's only one compare, so make up for this work better when there's only one compare, so make up for this
here as special exception if TER would have made the same change. */ here as special exception if TER would have made the same change. */
if (gimple_cond_single_var_p (stmt) if (SA.values
&& SA.values
&& TREE_CODE (op0) == SSA_NAME && TREE_CODE (op0) == SSA_NAME
&& TREE_CODE (TREE_TYPE (op0)) == BOOLEAN_TYPE
&& TREE_CODE (op1) == INTEGER_CST
&& ((gimple_cond_code (stmt) == NE_EXPR
&& integer_zerop (op1))
|| (gimple_cond_code (stmt) == EQ_EXPR
&& integer_onep (op1)))
&& bitmap_bit_p (SA.values, SSA_NAME_VERSION (op0))) && bitmap_bit_p (SA.values, SSA_NAME_VERSION (op0)))
{ {
gimple second = SSA_NAME_DEF_STMT (op0); gimple second = SSA_NAME_DEF_STMT (op0);
......
...@@ -2750,23 +2750,6 @@ gimple_cond_false_p (const_gimple gs) ...@@ -2750,23 +2750,6 @@ gimple_cond_false_p (const_gimple gs)
return false; return false;
} }
/* Check if conditional statement GS is of the form 'if (var != 0)' or
'if (var == 1)' */
static inline bool
gimple_cond_single_var_p (gimple gs)
{
if (gimple_cond_code (gs) == NE_EXPR
&& gimple_cond_rhs (gs) == boolean_false_node)
return true;
if (gimple_cond_code (gs) == EQ_EXPR
&& gimple_cond_rhs (gs) == boolean_true_node)
return true;
return false;
}
/* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS. */ /* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS. */
static inline void static inline void
......
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