diff options
author | Razya Ladelsky <razya@il.ibm.com> | 2011-07-05 13:08:01 +0000 |
---|---|---|
committer | Razya Ladelsky <razya@gcc.gnu.org> | 2011-07-05 13:08:01 +0000 |
commit | 12037899ea37255a21d90902bb00c1183fc17fb6 (patch) | |
tree | 67135b0c880f731ab81c64aa984089f4ac3e36f2 /gcc/tree-cfg.c | |
parent | 509a31f8e558782f0cdc3c337dc957bb443a4d23 (diff) | |
download | gcc-12037899ea37255a21d90902bb00c1183fc17fb6.zip gcc-12037899ea37255a21d90902bb00c1183fc17fb6.tar.gz gcc-12037899ea37255a21d90902bb00c1183fc17fb6.tar.bz2 |
07-05-2011 Razya Ladelsky <razya@il.ibm.com>
* tree-cfg.c (gimple_duplicate_sese_tail): Remove handling of
the loop's number of iterations.
* tree-parloops.c (transform_to_exit_first_loop): Add the
handling of the loop's number of iterations before the call
to gimple_duplicate_sese_tail.
Insert the stmt caclculating the new rhs of the loop's
condition stmt to the preheader instead of iters_bb.
* testsuite/gcc.dg/autopar/pr49580.c: New test.
From-SVN: r175851
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 33 |
1 files changed, 1 insertions, 32 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 349f56e..12d8fb4 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -5411,12 +5411,10 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU int total_freq = 0, exit_freq = 0; gcov_type total_count = 0, exit_count = 0; edge exits[2], nexits[2], e; - gimple_stmt_iterator gsi,gsi1; + gimple_stmt_iterator gsi; gimple cond_stmt; edge sorig, snew; basic_block exit_bb; - basic_block iters_bb; - tree new_rhs; gimple_stmt_iterator psi; gimple phi; tree def; @@ -5497,35 +5495,6 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU gcc_assert (gimple_code (cond_stmt) == GIMPLE_COND); cond_stmt = gimple_copy (cond_stmt); - /* If the block consisting of the exit condition has the latch as - successor, then the body of the loop is executed before - the exit condition is tested. In such case, moving the - condition to the entry, causes that the loop will iterate - one less iteration (which is the wanted outcome, since we - peel out the last iteration). If the body is executed after - the condition, moving the condition to the entry requires - decrementing one iteration. */ - if (exits[1]->dest == orig_loop->latch) - new_rhs = gimple_cond_rhs (cond_stmt); - else - { - new_rhs = fold_build2 (MINUS_EXPR, TREE_TYPE (gimple_cond_rhs (cond_stmt)), - gimple_cond_rhs (cond_stmt), - build_int_cst (TREE_TYPE (gimple_cond_rhs (cond_stmt)), 1)); - - if (TREE_CODE (gimple_cond_rhs (cond_stmt)) == SSA_NAME) - { - iters_bb = gimple_bb (SSA_NAME_DEF_STMT (gimple_cond_rhs (cond_stmt))); - for (gsi1 = gsi_start_bb (iters_bb); !gsi_end_p (gsi1); gsi_next (&gsi1)) - if (gsi_stmt (gsi1) == SSA_NAME_DEF_STMT (gimple_cond_rhs (cond_stmt))) - break; - - new_rhs = force_gimple_operand_gsi (&gsi1, new_rhs, true, - NULL_TREE,false,GSI_CONTINUE_LINKING); - } - } - gimple_cond_set_rhs (cond_stmt, unshare_expr (new_rhs)); - gimple_cond_set_lhs (cond_stmt, unshare_expr (gimple_cond_lhs (cond_stmt))); gsi_insert_after (&gsi, cond_stmt, GSI_NEW_STMT); sorig = single_succ_edge (switch_bb); |