aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>1999-10-20 12:39:01 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>1999-10-20 12:39:01 +0000
commitee7b8369c2babb18188722d55fc2d5476ceca115 (patch)
tree6152adf70398cd3ab6b4380c422bc304208173a0 /gcc
parentdc9e9f3f8891dad8aad9bf346a68bedeae82c03f (diff)
downloadgcc-ee7b8369c2babb18188722d55fc2d5476ceca115.zip
gcc-ee7b8369c2babb18188722d55fc2d5476ceca115.tar.gz
gcc-ee7b8369c2babb18188722d55fc2d5476ceca115.tar.bz2
(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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/flow.c16
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9a7fd94..de82cea 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 aaa006a..fcefe0a 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;
}