aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Eckhardt <jle@cygnus.com>2000-03-14 21:21:18 +0000
committerJason Eckhardt <jle@gcc.gnu.org>2000-03-14 21:21:18 +0000
commit0edd203b8dcf9b32999e9c61603ae406158e260a (patch)
tree630aa681d583c59f3190fff04006a712bfab0e69 /gcc
parent24dc027c9a77539deb4e2f4cf5d6878bc2a0aef7 (diff)
downloadgcc-0edd203b8dcf9b32999e9c61603ae406158e260a.zip
gcc-0edd203b8dcf9b32999e9c61603ae406158e260a.tar.gz
gcc-0edd203b8dcf9b32999e9c61603ae406158e260a.tar.bz2
flow.c (reorder_basic_blocks): Account for barriers when writing over NEXT_INSN (last_bb->end).
* flow.c (reorder_basic_blocks): Account for barriers when writing over NEXT_INSN (last_bb->end). (verify_flow_info): Add check for missing barriers. From-SVN: r32545
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/flow.c22
2 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c139e27..8c5ac0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+
+2000-03-14 Jason Eckhardt <jle@cygnus.com>
+ * flow.c (reorder_basic_blocks): Account for barriers when writing
+ over NEXT_INSN (last_bb->end).
+ (verify_flow_info): Add check for missing barriers.
+
2000-03-14 Greg McGary <gkm@gnu.org>
* c-lex.h (enum rid): Add RID_BOUNDED & RID_UNBOUNDED.
diff --git a/gcc/flow.c b/gcc/flow.c
index 26c1a6f..fe221ca 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -5785,6 +5785,7 @@ set_block_num (insn, bb)
and NOTE_INSN_BASIC_BLOCK
- check that all insns are in the basic blocks
(except the switch handling code, barriers and notes)
+ - check that all returns are followed by barriers
In future it can be extended check a lot of other stuff as well
(reachability of basic blocks, life information, etc. etc.). */
@@ -5988,6 +5989,12 @@ verify_flow_info ()
}
}
+ if (GET_RTX_CLASS (GET_CODE (x)) == 'i'
+ && GET_CODE (x) == JUMP_INSN
+ && returnjump_p (x)
+ && ! (NEXT_INSN (x) && GET_CODE (NEXT_INSN (x)) == BARRIER))
+ fatal_insn ("Return not followed by barrier", x);
+
x = NEXT_INSN (x);
}
@@ -7758,8 +7765,19 @@ reorder_basic_blocks ()
BASIC_BLOCK (j) = tempbb;
}
}
-
- NEXT_INSN (BASIC_BLOCK (n_basic_blocks - 1)->end) = last_insn;
+
+ {
+ rtx xafter = skip_insns_between_block (BASIC_BLOCK (n_basic_blocks - 1),
+ REORDER_SKIP_AFTER);
+ if (xafter)
+ NEXT_INSN (xafter) = last_insn;
+ else
+ abort();
+ }
+
+#ifdef ENABLE_CHECKING
+ verify_flow_info ();
+#endif
for (i = 0; i < n_basic_blocks - 1; i++)
{