cfgcleanup.c (merge_blocks_move_successor_nojumps): Don't leave ADDR_VEC or ADDR_DIFF_VEC jump insns as part of the basic block...

* cfgcleanup.c (merge_blocks_move_successor_nojumps): Don't leave
ADDR_VEC or ADDR_DIFF_VEC jump insns as part of the basic block
once merging is complete.

From-SVN: r45730
This commit is contained in:
Richard Earnshaw 2001-09-21 15:34:54 +00:00 committed by Richard Earnshaw
parent 97a4f671ac
commit f62ce55b12
2 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,9 @@
21-09-2001 Richard Earnshaw (reanrsha@arm.com)
* cfgcleanup.c (merge_blocks_move_successor_nojumps): Don't leave
ADDR_VEC or ADDR_DIFF_VEC jump insns as part of the basic block
once merging is complete.
Fri Sep 21 11:20:12 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Fri Sep 21 11:20:12 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* integrate.c (allocate_initial_values): Eliminate unused arg warning. * integrate.c (allocate_initial_values): Eliminate unused arg warning.

View File

@ -319,8 +319,9 @@ static void
merge_blocks_move_successor_nojumps (a, b) merge_blocks_move_successor_nojumps (a, b)
basic_block a, b; basic_block a, b;
{ {
rtx barrier; rtx barrier, real_b_end;
real_b_end = b->end;
barrier = NEXT_INSN (b->end); barrier = NEXT_INSN (b->end);
/* Recognize a jump table following block B. */ /* Recognize a jump table following block B. */
@ -331,6 +332,8 @@ merge_blocks_move_successor_nojumps (a, b)
&& (GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_VEC && (GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_VEC
|| GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_DIFF_VEC)) || GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_DIFF_VEC))
{ {
/* Temporarily add the table jump insn to b, so that it will also
be moved to the correct location. */
b->end = NEXT_INSN (barrier); b->end = NEXT_INSN (barrier);
barrier = NEXT_INSN (b->end); barrier = NEXT_INSN (b->end);
} }
@ -351,6 +354,9 @@ merge_blocks_move_successor_nojumps (a, b)
/* Scramble the insn chain. */ /* Scramble the insn chain. */
reorder_insns_nobb (b->head, b->end, a->end); reorder_insns_nobb (b->head, b->end, a->end);
/* Restore the real end of b. */
b->end = real_b_end;
/* Now blocks A and B are contiguous. Merge them. */ /* Now blocks A and B are contiguous. Merge them. */
merge_blocks_nomove (a, b); merge_blocks_nomove (a, b);