From ee7b8369c2babb18188722d55fc2d5476ceca115 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Wed, 20 Oct 1999 12:39:01 +0000 Subject: [PATCH] (merge_blocks_move_predecessor_nojumps): Re-order the basic block records so... (merge_blocks_move_predecessor_nojumps): Re-order the basic block records so that merge_blocks_nomove will clean up correctly. From-SVN: r30100 --- gcc/ChangeLog | 3 +++ gcc/flow.c | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9a7fd9484a2..de82cea9293 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,9 @@ Wed Oct 20 10:46:41 1999 Richard Earnshaw (rearnsha@arm.com) * jump.c (jump_optimize_1): More accurately detect casesi insns. + * flow.c (merge_blocks_move_predecessor_nojumps): Re-order the basic + block records so that merge_blocks_nomove will clean up correctly. + Tue Oct 19 23:43:50 1999 Jeffrey A Law (law@cygnus.com) * pa.md (call, call_value): Do not emit a blockage after restoring diff --git a/gcc/flow.c b/gcc/flow.c index aaa006ae104..fcefe0aaa2c 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -2006,6 +2006,7 @@ merge_blocks_move_predecessor_nojumps (a, b) basic_block a, b; { rtx start, end, insertpoint, barrier; + int index; start = a->head; end = a->end; @@ -2037,15 +2038,24 @@ merge_blocks_move_predecessor_nojumps (a, b) /* Scramble the insn chain. */ reorder_insns (start, end, insertpoint); - /* Now blocks A and B are contiguous. Merge them. */ - merge_blocks_nomove (a, b); - if (rtl_dump_file) { fprintf (rtl_dump_file, "Moved block %d before %d and merged.\n", a->index, b->index); } + /* Swap the records for the two blocks around. Although we are deleting B, + A is now where B was and we want to compact the BB array from where + A used to be. */ + BASIC_BLOCK(a->index) = b; + BASIC_BLOCK(b->index) = a; + index = a->index; + a->index = b->index; + b->index = index; + + /* Now blocks A and B are contiguous. Merge them. */ + merge_blocks_nomove (a, b); + return 1; } -- 2.30.2