aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2010-05-28 18:42:06 +0000
committerSebastian Pop <spop@gcc.gnu.org>2010-05-28 18:42:06 +0000
commite7cb8957bf8709677b85ba17fa3f9231633aaede (patch)
tree3b1fbeff58aa9dc84de7ae1c85b61eeaba0cb86d /gcc
parentd10e857ebb356b77527167cc55dac1cea5e37be0 (diff)
downloadgcc-e7cb8957bf8709677b85ba17fa3f9231633aaede.zip
gcc-e7cb8957bf8709677b85ba17fa3f9231633aaede.tar.gz
gcc-e7cb8957bf8709677b85ba17fa3f9231633aaede.tar.bz2
Don't generate COND_EXPRs for degenerate_phi_result.
2010-05-28 Sebastian Pop <sebastian.pop@amd.com> * tree-if-conv.c (replace_phi_with_cond_gimple_assign_stmt): Don't generate COND_EXPRs for degenerate_phi_result. From-SVN: r159991
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-if-conv.c36
2 files changed, 26 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd8239e..d2d4f2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2010-05-28 Sebastian Pop <sebastian.pop@amd.com>
+ * tree-if-conv.c (replace_phi_with_cond_gimple_assign_stmt): Don't
+ generate COND_EXPRs for degenerate_phi_result.
+
+2010-05-28 Sebastian Pop <sebastian.pop@amd.com>
+
PR middle-end/44293
* tree-if-conv.c (if_convertible_loop_p): Check the
if-convertibility of phi nodes in non predicated BBs.
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index c338ecb..2729bf3 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -864,31 +864,37 @@ replace_phi_with_cond_gimple_assign_stmt (gimple phi, tree cond,
gimple new_stmt;
basic_block bb;
tree rhs;
- tree arg_0, arg_1;
+ tree arg;
gcc_assert (gimple_code (phi) == GIMPLE_PHI
&& gimple_phi_num_args (phi) == 2);
bb = gimple_bb (phi);
- /* Use condition that is not TRUTH_NOT_EXPR in conditional modify expr. */
- if (EDGE_PRED (bb, 1)->src == true_bb)
- {
- arg_0 = gimple_phi_arg_def (phi, 1);
- arg_1 = gimple_phi_arg_def (phi, 0);
- }
+ arg = degenerate_phi_result (phi);
+ if (arg)
+ rhs = arg;
else
{
- arg_0 = gimple_phi_arg_def (phi, 0);
- arg_1 = gimple_phi_arg_def (phi, 1);
- }
+ tree arg_0, arg_1;
+ /* Use condition that is not TRUTH_NOT_EXPR in conditional modify expr. */
+ if (EDGE_PRED (bb, 1)->src == true_bb)
+ {
+ arg_0 = gimple_phi_arg_def (phi, 1);
+ arg_1 = gimple_phi_arg_def (phi, 0);
+ }
+ else
+ {
+ arg_0 = gimple_phi_arg_def (phi, 0);
+ arg_1 = gimple_phi_arg_def (phi, 1);
+ }
- /* Build new RHS using selected condition and arguments. */
- rhs = build3 (COND_EXPR, TREE_TYPE (PHI_RESULT (phi)),
- unshare_expr (cond), unshare_expr (arg_0),
- unshare_expr (arg_1));
+ /* Build new RHS using selected condition and arguments. */
+ rhs = build3 (COND_EXPR, TREE_TYPE (PHI_RESULT (phi)),
+ unshare_expr (cond), arg_0, arg_1);
+ }
- new_stmt = gimple_build_assign (unshare_expr (PHI_RESULT (phi)), rhs);
+ new_stmt = gimple_build_assign (PHI_RESULT (phi), rhs);
SSA_NAME_DEF_STMT (gimple_phi_result (phi)) = new_stmt;
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
update_stmt (new_stmt);