Commit 874b5b14 by Richard Henderson Committed by Richard Henderson

ifcvt.c (dead_or_predicable): Handling merging when other_bb and new_dest are the same.

        * ifcvt.c (dead_or_predicable): Handling merging when other_bb
        and new_dest are the same.

From-SVN: r49366
parent 89cf7be5
2002-01-30 Richard Henderson <rth@redhat.com>
* ifcvt.c (dead_or_predicable): Handling merging when other_bb
and new_dest are the same.
2002-01-30 Richard Henderson <rth@redhat.com>
PR opt/5076
* rtl.h (NOTE_INSN_LOOP_END_TOP_COND): New.
* rtl.c (note_insn_name): Update.
......
......@@ -2629,21 +2629,25 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
change group management. */
old_dest = JUMP_LABEL (jump);
if (other_bb != new_dest)
{
new_label = block_label (new_dest);
if (reversep
? ! invert_jump_1 (jump, new_label)
: ! redirect_jump_1 (jump, new_label))
goto cancel;
}
if (! apply_change_group ())
return FALSE;
if (other_bb != new_dest)
{
if (old_dest)
LABEL_NUSES (old_dest) -= 1;
if (new_label)
LABEL_NUSES (new_label) += 1;
JUMP_LABEL (jump) = new_label;
if (reversep)
invert_br_probabilities (jump);
......@@ -2655,10 +2659,12 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
BRANCH_EDGE (test_bb)->count = FALLTHRU_EDGE (test_bb)->count;
FALLTHRU_EDGE (test_bb)->count = count;
probability = BRANCH_EDGE (test_bb)->probability;
BRANCH_EDGE (test_bb)->probability = FALLTHRU_EDGE (test_bb)->probability;
BRANCH_EDGE (test_bb)->probability
= FALLTHRU_EDGE (test_bb)->probability;
FALLTHRU_EDGE (test_bb)->probability = probability;
update_br_prob_note (test_bb);
}
}
/* Move the insns out of MERGE_BB to before the branch. */
if (head != NULL)
......@@ -2671,6 +2677,16 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
reorder_insns (head, end, PREV_INSN (earliest));
}
/* Remove the jump and edge if we can. */
if (other_bb == new_dest)
{
delete_insn (jump);
remove_edge (BRANCH_EDGE (test_bb));
/* ??? Can't merge blocks here, as then_bb is still in use.
At minimum, the merge will get done just before bb-reorder. */
}
return TRUE;
cancel:
......
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