diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2010-05-28 18:42:06 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2010-05-28 18:42:06 +0000 |
commit | e7cb8957bf8709677b85ba17fa3f9231633aaede (patch) | |
tree | 3b1fbeff58aa9dc84de7ae1c85b61eeaba0cb86d /gcc | |
parent | d10e857ebb356b77527167cc55dac1cea5e37be0 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-if-conv.c | 36 |
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); |