From: Richard Earnshaw Date: Fri, 21 Sep 2001 15:34:54 +0000 (+0000) Subject: cfgcleanup.c (merge_blocks_move_successor_nojumps): Don't leave ADDR_VEC or ADDR_DIFF... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f62ce55b12b8148b86f6f103179e9e9f3f1054dd;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0ce893ef98..3c902822eda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 * integrate.c (allocate_initial_values): Eliminate unused arg warning. diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index a3ddcac872e..c52d255d53b 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -319,8 +319,9 @@ static void merge_blocks_move_successor_nojumps (a, b) basic_block a, b; { - rtx barrier; + rtx barrier, real_b_end; + real_b_end = b->end; barrier = NEXT_INSN (b->end); /* 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_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); barrier = NEXT_INSN (b->end); } @@ -351,6 +354,9 @@ merge_blocks_move_successor_nojumps (a, b) /* Scramble the insn chain. */ 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. */ merge_blocks_nomove (a, b);