* [PATCH] Fix PR56483
@ 2013-03-18 10:29 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2013-03-18 10:29 UTC (permalink / raw)
To: gcc-patches
This fixes PR56483 by properly testing for boolean values
during expansion of conditionals.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
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.
Index: gcc/cfgexpand.c
===================================================================
*** gcc/cfgexpand.c (revision 196309)
--- gcc/cfgexpand.c (working copy)
*************** expand_gimple_cond (basic_block bb, gimp
*** 1886,1894 ****
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
here as special exception if TER would have made the same change. */
! if (gimple_cond_single_var_p (stmt)
! && SA.values
&& TREE_CODE (op0) == SSA_NAME
&& bitmap_bit_p (SA.values, SSA_NAME_VERSION (op0)))
{
gimple second = SSA_NAME_DEF_STMT (op0);
--- 1886,1899 ----
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
here as special exception if TER would have made the same change. */
! if (SA.values
&& 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)))
{
gimple second = SSA_NAME_DEF_STMT (op0);
Index: gcc/gimple.h
===================================================================
*** gcc/gimple.h (revision 196309)
--- gcc/gimple.h (working copy)
*************** gimple_cond_false_p (const_gimple gs)
*** 2747,2769 ****
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. */
static inline void
--- 2747,2752 ----
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2013-03-18 10:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-18 10:29 [PATCH] Fix PR56483 Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).