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
This commit is contained in:
Sebastian Pop 2006-05-29 18:01:16 +02:00 committed by Sebastian Pop
parent 96e3609633
commit 06ac89d1ca
2 changed files with 12 additions and 34 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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