gcc/ * basic-block.h (struct rtl_bb_info): Strengthen field "footer_" from rtx to rtx_insn *. (BB_FOOTER): Replace function with access macro. (SET_BB_FOOTER): Delete.
* cfgcleanup.c (try_optimize_cfg): Replace uses of SET_BB_FOOTER with BB_FOOTER. * cfgrtl.c (try_redirect_by_replacing_jump): Likewise. (emit_barrier_after_bb): Likewise. (record_effective_endpoints): Likewise. (relink_block_chain): Likewise. (fixup_fallthru_exit_predecessor): Likewise. (cfg_layout_duplicate_bb): Likewise. (cfg_layout_split_block): Likewise. (cfg_layout_delete_block): Likewise. (cfg_layout_merge_blocks): Likewise. (BB_FOOTER): Delete function. (SET_BB_FOOTER): Delete function. * combine.c (update_cfg_for_uncondjump): Replace uses of SET_BB_FOOTER with BB_FOOTER. / * rtx-classes-status.txt: Remove SET_BB_FOOTER. --- gcc/basic-block.h | 5 ++--- gcc/cfgcleanup.c | 6 +++--- gcc/cfgrtl.c | 43 ++++++++++++++----------------------------- gcc/combine.c | 2 +- rtx-classes-status.txt | 2 +- 5 files changed, 21 insertions(+), 37 deletions(-) diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 18d3871..0f55a8b 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -127,7 +127,7 @@ struct GTY(()) rtl_bb_info { /* In CFGlayout mode points to insn notes/jumptables to be placed just before and after the block. */ rtx header_; - rtx footer_; + rtx_insn *footer_; }; struct GTY(()) gimple_bb_info { @@ -381,8 +381,7 @@ extern rtx& SET_BB_END (basic_block bb); extern rtx_insn *BB_HEADER (const_basic_block bb); extern rtx& SET_BB_HEADER (basic_block bb); -extern rtx_insn *BB_FOOTER (const_basic_block bb); -extern rtx& SET_BB_FOOTER (basic_block bb); +#define BB_FOOTER(B) (B)->il.x.rtl->footer_ /* Special block numbers [markers] for entry and exit. Neither of them is supposed to hold actual statements. */ diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 0edb7b5..6930c03 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -2676,13 +2676,13 @@ try_optimize_cfg (int mode) { if (BB_FOOTER (b)) { - SET_BB_FOOTER (e->src) = BB_FOOTER (b); - SET_BB_FOOTER (b) = NULL; + BB_FOOTER (e->src) = BB_FOOTER (b); + BB_FOOTER (b) = NULL; } else { start_sequence (); - SET_BB_FOOTER (e->src) = emit_barrier (); + BB_FOOTER (e->src) = emit_barrier (); end_sequence (); } } diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 612eca7..1525a75 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1064,7 +1064,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout) if (PREV_INSN (insn)) SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); else - SET_BB_FOOTER (src) = NEXT_INSN (insn); + BB_FOOTER (src) = NEXT_INSN (insn); if (NEXT_INSN (insn)) SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); } @@ -1452,7 +1452,7 @@ emit_barrier_after_bb (basic_block bb) gcc_assert (current_ir_type () == IR_RTL_CFGRTL || current_ir_type () == IR_RTL_CFGLAYOUT); if (current_ir_type () == IR_RTL_CFGLAYOUT) - SET_BB_FOOTER (bb) = unlink_insn_chain (barrier, barrier); + BB_FOOTER (bb) = unlink_insn_chain (barrier, barrier); } /* Like force_nonfallthru below, but additionally performs redirection @@ -3463,7 +3463,7 @@ record_effective_endpoints (void) PREV_INSN (BB_HEAD (bb))); end = skip_insns_after_block (bb); if (NEXT_INSN (BB_END (bb)) && BB_END (bb) != end) - SET_BB_FOOTER (bb) = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end); + BB_FOOTER (bb) = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end); next_insn = NEXT_INSN (BB_END (bb)); } @@ -3623,7 +3623,7 @@ relink_block_chain (bool stay_in_cfglayout_mode) { bb->aux = NULL; if (!stay_in_cfglayout_mode) - SET_BB_HEADER (bb) = SET_BB_FOOTER (bb) = NULL; + SET_BB_HEADER (bb) = BB_FOOTER (bb) = NULL; } /* Maybe reset the original copy tables, they are not valid anymore @@ -3991,8 +3991,8 @@ fixup_fallthru_exit_predecessor (void) bb = split_block (bb, NULL)->dest; bb->aux = c->aux; c->aux = bb; - SET_BB_FOOTER (bb) = BB_FOOTER (c); - SET_BB_FOOTER (c) = NULL; + BB_FOOTER (bb) = BB_FOOTER (c); + BB_FOOTER (c) = NULL; } while (c->aux != bb) @@ -4206,7 +4206,7 @@ cfg_layout_duplicate_bb (basic_block bb) insn = NEXT_INSN (insn); insn = duplicate_insn_chain (BB_FOOTER (bb), insn); if (insn) - SET_BB_FOOTER (new_bb) = unlink_insn_chain (insn, get_last_insn ()); + BB_FOOTER (new_bb) = unlink_insn_chain (insn, get_last_insn ()); } return new_bb; @@ -4314,8 +4314,8 @@ cfg_layout_split_block (basic_block bb, void *insnp) rtx insn = (rtx) insnp; basic_block new_bb = rtl_split_block (bb, insn); - SET_BB_FOOTER (new_bb) = BB_FOOTER (bb); - SET_BB_FOOTER (bb) = NULL; + BB_FOOTER (new_bb) = BB_FOOTER (bb); + BB_FOOTER (bb) = NULL; return new_bb; } @@ -4446,7 +4446,7 @@ cfg_layout_delete_block (basic_block bb) if (PREV_INSN (insn)) SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); else - SET_BB_FOOTER (bb) = NEXT_INSN (insn); + BB_FOOTER (bb) = NEXT_INSN (insn); if (NEXT_INSN (insn)) SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); } @@ -4581,7 +4581,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) if (BB_FOOTER (b)) { if (!BB_FOOTER (a)) - SET_BB_FOOTER (a) = SET_BB_FOOTER (b); + BB_FOOTER (a) = BB_FOOTER (b); else { rtx_insn *last = BB_FOOTER (a); @@ -4591,7 +4591,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) SET_NEXT_INSN (last) = BB_FOOTER (b); SET_PREV_INSN (BB_FOOTER (b)) = last; } - SET_BB_FOOTER (b) = NULL; + BB_FOOTER (b) = NULL; } /* Move things from b->header before a->footer. @@ -4600,7 +4600,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) if (BB_HEADER (b)) { if (! BB_FOOTER (a)) - SET_BB_FOOTER (a) = BB_HEADER (b); + BB_FOOTER (a) = BB_HEADER (b); else { rtx_insn *last = BB_HEADER (b); @@ -4609,7 +4609,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) last = NEXT_INSN (last); SET_NEXT_INSN (last) = BB_FOOTER (a); SET_PREV_INSN (BB_FOOTER (a)) = last; - SET_BB_FOOTER (a) = BB_HEADER (b); + BB_FOOTER (a) = BB_HEADER (b); } SET_BB_HEADER (b) = NULL; } @@ -5153,19 +5153,4 @@ rtx& SET_BB_HEADER (basic_block bb) return bb->il.x.rtl->header_; } -/* BB_FOOTER as an rvalue. */ - -rtx_insn *BB_FOOTER (const_basic_block bb) -{ - rtx insn = bb->il.x.rtl->footer_; - return as_a_nullable <rtx_insn *> (insn); -} - -/* BB_FOOTER as an lvalue. */ - -rtx& SET_BB_FOOTER (basic_block bb) -{ - return bb->il.x.rtl->footer_; -} - #include "gt-cfgrtl.h" diff --git a/gcc/combine.c b/gcc/combine.c index 9a922a7..4a73e0b 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -2396,7 +2396,7 @@ update_cfg_for_uncondjump (rtx_insn *insn) if (PREV_INSN (insn)) SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); else - SET_BB_FOOTER (bb) = NEXT_INSN (insn); + BB_FOOTER (bb) = NEXT_INSN (insn); if (NEXT_INSN (insn)) SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); } diff --git a/rtx-classes-status.txt b/rtx-classes-status.txt index 90d6efd..d26dd89 100644 --- a/rtx-classes-status.txt +++ b/rtx-classes-status.txt @@ -11,7 +11,7 @@ Phase 6: use extra rtx_def subclasses: TODO TODO: "Scaffolding" to be removed ================================= * DF_REF_INSN -* SET_BB_HEAD, SET_BB_END, SET_BB_HEADER, SET_BB_FOOTER +* SET_BB_HEAD, SET_BB_END, SET_BB_HEADER * SET_BB_NOTE_LIST * SET_BND_TO * SET_DEP_PRO, SET_DEP_CON -- 1.8.5.3