diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-29 09:31:44 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-29 09:31:44 +0000 |
commit | 63f390bf43d4c01f4fb7011eb92aef4be0b1fd40 (patch) | |
tree | 24fd9efa04c81a860a36bba92bac52734b3833f9 /gcc/bb-reorder.c | |
parent | fa444fbfe8024f321a7f9a36e18b98d1de0fe526 (diff) | |
download | gcc-63f390bf43d4c01f4fb7011eb92aef4be0b1fd40.tar.gz |
* bb-reorder.c (function_tail_eff_head): New.
(record_effective_endpoints): Set it.
(fixup_reorder_chain): Use it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45255 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/bb-reorder.c')
-rw-r--r-- | gcc/bb-reorder.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index c75ac96988c..72d3902e7fc 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -171,6 +171,9 @@ typedef struct reorder_block_def #define RBI(BB) ((reorder_block_def) (BB)->aux) +/* Holds the interesting trailing notes for the function. */ +static rtx function_tail_eff_head; + /* Local function prototypes. */ static rtx skip_insns_after_block PARAMS ((basic_block)); @@ -307,6 +310,7 @@ record_effective_endpoints () RBI (bb)->eff_end = end; next_insn = NEXT_INSN (end); } + function_tail_eff_head = next_insn; } @@ -580,8 +584,18 @@ fixup_reorder_chain () last_bb = bb; bb = RBI (bb)->next; } - NEXT_INSN (RBI (last_bb)->eff_end) = NULL_RTX; - set_last_insn (RBI (last_bb)->eff_end); + + { + rtx insn = RBI (last_bb)->eff_end; + + NEXT_INSN (insn) = function_tail_eff_head; + if (function_tail_eff_head) + PREV_INSN (function_tail_eff_head) = insn; + + while (NEXT_INSN (insn)) + insn = NEXT_INSN (insn); + set_last_insn (insn); + } /* Now add jumps and labels as needed to match the blocks new outgoing edges. */ |