From a7b87f730fb2a5904d0f8c5d36c554cd1918bfec Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Wed, 6 Jun 2007 16:46:34 +0200 Subject: haifa-sched.c (restore_bb_notes): Clear bb field of the notes emited outside of basic block. * haifa-sched.c (restore_bb_notes): Clear bb field of the notes emited outside of basic block. * cfgbuild.c (find_bb_boundaries): Clear bb field for insns between the created blocks. * rtl.h (delete_insn_chain): Declaration changed. * cfgrtl.c (delete_insn_chain): Add option to clear bb field for non-removed insns. (rtl_delete_block, rtl_merge_blocks): Pass true to delete_insn_chain. (delete_insn_chain_and_edges, try_redirect_by_replacing_jump, rtl_tidy_fallthru_edge, cfg_layout_merge_blocks): Pass false to delete_insn_chain. (rtl_verify_flow_info_1): Verify that the insns in header and footer do not have bb field set. (rtl_verify_flow_info): Verify that insns between basic blocks do not have bb field set. * recog.c (peephole2_optimize): Add argument to delete_insn_chain call. * cfgcleanup.c (try_optimize_cfg): Ditto. From-SVN: r125492 --- gcc/cfgbuild.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'gcc/cfgbuild.c') diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c index e564e8b89e3..cb216afa2c7 100644 --- a/gcc/cfgbuild.c +++ b/gcc/cfgbuild.c @@ -630,7 +630,7 @@ find_bb_boundaries (basic_block bb) { basic_block orig_bb = bb; rtx insn = BB_HEAD (bb); - rtx end = BB_END (bb); + rtx end = BB_END (bb), x; rtx table; rtx flow_transfer_insn = NULL_RTX; edge fallthru = NULL; @@ -651,7 +651,16 @@ find_bb_boundaries (basic_block bb) { fallthru = split_block (bb, PREV_INSN (insn)); if (flow_transfer_insn) - BB_END (bb) = flow_transfer_insn; + { + BB_END (bb) = flow_transfer_insn; + + /* Clean up the bb field for the insns between the blocks. */ + for (x = NEXT_INSN (flow_transfer_insn); + x != BB_HEAD (fallthru->dest); + x = NEXT_INSN (x)) + if (!BARRIER_P (x)) + set_block_for_insn (x, NULL); + } bb = fallthru->dest; remove_edge (fallthru); @@ -666,6 +675,14 @@ find_bb_boundaries (basic_block bb) { fallthru = split_block (bb, PREV_INSN (insn)); BB_END (bb) = flow_transfer_insn; + + /* Clean up the bb field for the insns between the blocks. */ + for (x = NEXT_INSN (flow_transfer_insn); + x != BB_HEAD (fallthru->dest); + x = NEXT_INSN (x)) + if (!BARRIER_P (x)) + set_block_for_insn (x, NULL); + bb = fallthru->dest; remove_edge (fallthru); flow_transfer_insn = NULL_RTX; @@ -682,7 +699,18 @@ find_bb_boundaries (basic_block bb) return and barrier, or possibly other sequence not behaving like ordinary jump, we need to take care and move basic block boundary. */ if (flow_transfer_insn) - BB_END (bb) = flow_transfer_insn; + { + BB_END (bb) = flow_transfer_insn; + + /* Clean up the bb field for the insns that do not belong to BB. */ + x = flow_transfer_insn; + while (x != end) + { + x = NEXT_INSN (x); + if (!BARRIER_P (x)) + set_block_for_insn (x, NULL); + } + } /* We've possibly replaced the conditional jump by conditional jump followed by cleanup at fallthru edge, so the outgoing edges may -- cgit v1.2.1