diff options
author | Richard Henderson <rth@redhat.com> | 2001-08-29 02:31:44 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-08-29 02:31:44 -0700 |
commit | a7b01a4bf1537bc20459fbc2467c95bef9147c83 (patch) | |
tree | 24fd9efa04c81a860a36bba92bac52734b3833f9 /gcc | |
parent | c43f84d7ced26730f6ca327e9007846aaa715783 (diff) | |
download | gcc-a7b01a4bf1537bc20459fbc2467c95bef9147c83.zip gcc-a7b01a4bf1537bc20459fbc2467c95bef9147c83.tar.gz gcc-a7b01a4bf1537bc20459fbc2467c95bef9147c83.tar.bz2 |
bb-reorder.c (function_tail_eff_head): New.
* bb-reorder.c (function_tail_eff_head): New.
(record_effective_endpoints): Set it.
(fixup_reorder_chain): Use it.
From-SVN: r45255
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/bb-reorder.c | 18 |
2 files changed, 22 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ea82eb5..657f68a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-08-29 Richard Henderson <rth@redhat.com> + + * bb-reorder.c (function_tail_eff_head): New. + (record_effective_endpoints): Set it. + (fixup_reorder_chain): Use it. + 2001-08-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * dwarf2asm.c (dw2_asm_output_nstring): Fix typo in previous change. diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index c75ac96..72d3902 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. */ |