aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-03-18 10:29:43 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-03-18 10:29:43 +0000
commit31348d52c09909e89c7f1a99c72e1d0def60277d (patch)
treef21a962e1c2d439f50cf583d38c7881af0f9a39f /gcc
parentfcac74a177b6c86bf70320aae7145f3b79e54739 (diff)
downloadgcc-31348d52c09909e89c7f1a99c72e1d0def60277d.zip
gcc-31348d52c09909e89c7f1a99c72e1d0def60277d.tar.gz
gcc-31348d52c09909e89c7f1a99c72e1d0def60277d.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgexpand.c9
-rw-r--r--gcc/gimple.h17
3 files changed, 14 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4d9203f..796eab7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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.c (get_references_in_stmt): Use a stack
vector pre-allocated in the callers.
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 5acc42d..7242b21 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1886,9 +1886,14 @@ expand_gimple_cond (basic_block bb, gimple stmt)
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
+ 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);
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 1bbd7d7..475d2ea 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -2750,23 +2750,6 @@ gimple_cond_false_p (const_gimple gs)
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