Commit 06ac89d1 by Sebastian Pop Committed by Sebastian Pop

re PR tree-optimization/27745 (ICE in execute_todo with -O2 -ftree-loop-linear)

	PR middle-end/27745
	* lambda-code.c (perfect_nestify): Don't copy statements
	in the inner loop: move them to the inner loop header.

From-SVN: r114205
parent 96e36096
2006-05-29 Sebastian Pop <pop@cri.ensmp.fr>
PR middle-end/27745
* lambda-code.c (perfect_nestify): Don't copy statements
in the inner loop: move them to the inner loop header.
2006-05-29 Diego Novillo <dnovillo@redhat.com>
PR 26237
......
......@@ -2506,50 +2506,22 @@ perfect_nestify (struct loops *loops,
if (dominated_by_p (CDI_DOMINATORS, loop->inner->header, bbs[i]))
{
for (bsi = bsi_last (bbs[i]); !bsi_end_p (bsi);)
block_stmt_iterator header_bsi
= bsi_after_labels (loop->inner->header);
for (bsi = bsi_start (bbs[i]); !bsi_end_p (bsi);)
{
use_operand_p use_p;
imm_use_iterator imm_iter;
tree imm_stmt;
tree stmt = bsi_stmt (bsi);
if (stmt == exit_condition
|| not_interesting_stmt (stmt)
|| stmt_is_bumper_for_loop (loop, stmt))
{
if (!bsi_end_p (bsi))
bsi_prev (&bsi);
bsi_next (&bsi);
continue;
}
/* Make copies of this statement to put it back next
to its uses. */
FOR_EACH_IMM_USE_STMT (imm_stmt, imm_iter,
TREE_OPERAND (stmt, 0))
{
if (!exit_phi_for_loop_p (loop->inner, imm_stmt))
{
block_stmt_iterator tobsi;
tree newname;
tree newstmt;
newstmt = unshare_expr (stmt);
tobsi = bsi_after_labels (bb_for_stmt (imm_stmt));
newname = TREE_OPERAND (newstmt, 0);
newname = SSA_NAME_VAR (newname);
newname = make_ssa_name (newname, newstmt);
TREE_OPERAND (newstmt, 0) = newname;
FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
SET_USE (use_p, newname);
bsi_insert_before (&tobsi, newstmt, BSI_SAME_STMT);
update_stmt (newstmt);
update_stmt (imm_stmt);
}
}
if (!bsi_end_p (bsi))
bsi_prev (&bsi);
bsi_move_before (&bsi, &header_bsi);
}
}
else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment