aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-if-conv.c
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2010-05-28 18:42:06 +0000
committerSebastian Pop <sebastian.pop@amd.com>2010-05-28 18:42:06 +0000
commitb51d9dd0238cbfc613227b38e51d4f5eb9f5b6d0 (patch)
tree3b1fbeff58aa9dc84de7ae1c85b61eeaba0cb86d /gcc/tree-if-conv.c
parent7a133f959ef5f9a9e21c87e6a664acce899b465c (diff)
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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@159991 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r--gcc/tree-if-conv.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index c338ecbe6f0..2729bf3cf15 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);