diff options
author | Jason Eckhardt <jle@cygnus.com> | 2000-03-14 21:21:18 +0000 |
---|---|---|
committer | Jason Eckhardt <jle@gcc.gnu.org> | 2000-03-14 21:21:18 +0000 |
commit | 0edd203b8dcf9b32999e9c61603ae406158e260a (patch) | |
tree | 630aa681d583c59f3190fff04006a712bfab0e69 /gcc | |
parent | 24dc027c9a77539deb4e2f4cf5d6878bc2a0aef7 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/flow.c | 22 |
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. @@ -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++) { |