On Tue, 2014-08-12 at 15:22 -0600, Jeff Law wrote: > On 08/06/14 11:19, David Malcolm wrote: > > gcc/ > > * sel-sched-ir.h (BB_NOTE_LIST): struct sel_region_bb_info_def's > > "note_list" field will eventually be an rtx_insn *. To help with > > transition, for now, convert from an access macro into a pair of > > functions: BB_NOTE_LIST, returning an rtx_insn *, and... > > (SET_BB_NOTE_LIST): New function, for use where BB_NOTE_LIST is > > used as an lvalue. > > > > * sel-sched.c (create_block_for_bookkeeping): Update lvalue usage > > of BB_NOTE_LIST to SET_BB_NOTE_LIST. > > > > * sel-sched-ir.c (init_bb): Likewise. > > (sel_restore_notes): Likewise. > > (move_bb_info): Likewise. > > (BB_NOTE_LIST): New function, adding a checked cast to rtx_insn *. > > (SET_BB_NOTE_LIST): New function. > > > > / > > * rtx-classes-status.txt: Add SET_BB_NOTE_LIST. > OK. Thanks.
Fixed up the as_a_nullable to safe_as_a, and committed to trunk as r214167, having verified bootstrap®rtest on x86_64-unknown-linux-gnu (Fedora 20) albeit in combination with patches 9-29 [1], and verified that it builds standalone with 9 targets. Am attaching what I committed. FWIW these functions becomes a macro again in patch #170. Dave [1] as per https://gcc.gnu.org/ml/gcc-patches/2014-08/msg01420.html
Index: ChangeLog =================================================================== --- ChangeLog (revision 214166) +++ ChangeLog (revision 214167) @@ -1,5 +1,9 @@ 2014-08-19 David Malcolm <dmalc...@redhat.com> + * rtx-classes-status.txt (TODO): Add SET_BB_NOTE_LIST. + +2014-08-19 David Malcolm <dmalc...@redhat.com> + * rtx-classes-status.txt (TODO): Add SET_VINSN_INSN_RTX. 2014-08-19 David Malcolm <dmalc...@redhat.com> Index: rtx-classes-status.txt =================================================================== --- rtx-classes-status.txt (revision 214166) +++ rtx-classes-status.txt (revision 214167) @@ -16,6 +16,7 @@ ================================= * DF_REF_INSN * SET_BB_HEAD, SET_BB_END, SET_BB_HEADER, SET_BB_FOOTER +* SET_BB_NOTE_LIST * SET_DEP_PRO, SET_DEP_CON * SET_NEXT_INSN, SET_PREV_INSN * SET_VINSN_INSN_RTX Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (revision 214166) +++ gcc/ChangeLog (revision 214167) @@ -1,5 +1,23 @@ 2014-08-19 David Malcolm <dmalc...@redhat.com> + * sel-sched-ir.h (BB_NOTE_LIST): struct sel_region_bb_info_def's + "note_list" field will eventually be an rtx_insn *. To help with + transition, for now, convert from an access macro into a pair of + functions: BB_NOTE_LIST, returning an rtx_insn *, and... + (SET_BB_NOTE_LIST): New function, for use where BB_NOTE_LIST is + used as an lvalue. + + * sel-sched.c (create_block_for_bookkeeping): Update lvalue usage + of BB_NOTE_LIST to SET_BB_NOTE_LIST. + + * sel-sched-ir.c (init_bb): Likewise. + (sel_restore_notes): Likewise. + (move_bb_info): Likewise. + (BB_NOTE_LIST): New function, adding a checked cast to rtx_insn *. + (SET_BB_NOTE_LIST): New function. + +2014-08-19 David Malcolm <dmalc...@redhat.com> + * sel-sched-ir.h (VINSN_INSN_RTX): struct vinsn_def's "insn_rtx" field will eventually be an rtx_insn *. To help with transition, for now, convert from an access macro into a pair of functions: Index: gcc/sel-sched.c =================================================================== --- gcc/sel-sched.c (revision 214166) +++ gcc/sel-sched.c (revision 214167) @@ -4585,8 +4585,8 @@ /* Move note_list from the upper bb. */ gcc_assert (BB_NOTE_LIST (new_bb) == NULL_RTX); - BB_NOTE_LIST (new_bb) = BB_NOTE_LIST (bb); - BB_NOTE_LIST (bb) = NULL_RTX; + SET_BB_NOTE_LIST (new_bb) = BB_NOTE_LIST (bb); + SET_BB_NOTE_LIST (bb) = NULL_RTX; gcc_assert (e2->dest == bb); Index: gcc/sel-sched-ir.c =================================================================== --- gcc/sel-sched-ir.c (revision 214166) +++ gcc/sel-sched-ir.c (revision 214167) @@ -4620,7 +4620,7 @@ init_bb (basic_block bb) { remove_notes (bb_note (bb), BB_END (bb)); - BB_NOTE_LIST (bb) = note_list; + SET_BB_NOTE_LIST (bb) = note_list; } void @@ -4655,7 +4655,7 @@ { note_list = BB_NOTE_LIST (first); restore_other_notes (NULL, first); - BB_NOTE_LIST (first) = NULL_RTX; + SET_BB_NOTE_LIST (first) = NULL_RTX; FOR_BB_INSNS (first, insn) if (NONDEBUG_INSN_P (insn)) @@ -5263,8 +5263,8 @@ { if (in_current_region_p (merge_bb)) concat_note_lists (BB_NOTE_LIST (empty_bb), - &BB_NOTE_LIST (merge_bb)); - BB_NOTE_LIST (empty_bb) = NULL_RTX; + &SET_BB_NOTE_LIST (merge_bb)); + SET_BB_NOTE_LIST (empty_bb) = NULL_RTX; } @@ -6452,4 +6452,15 @@ return vi->insn_rtx; } +rtx_insn *BB_NOTE_LIST (basic_block bb) +{ + rtx note_list = SEL_REGION_BB_INFO (bb)->note_list; + return safe_as_a <rtx_insn *> (note_list); +} + +rtx& SET_BB_NOTE_LIST (basic_block bb) +{ + return SEL_REGION_BB_INFO (bb)->note_list; +} + #endif Index: gcc/sel-sched-ir.h =================================================================== --- gcc/sel-sched-ir.h (revision 214166) +++ gcc/sel-sched-ir.h (revision 214167) @@ -920,7 +920,8 @@ A note_list is a list of various notes that was scattered across BB before scheduling, and will be appended at the beginning of BB after scheduling is finished. */ -#define BB_NOTE_LIST(BB) (SEL_REGION_BB_INFO (BB)->note_list) +extern rtx_insn *BB_NOTE_LIST (basic_block); +extern rtx& SET_BB_NOTE_LIST (basic_block); #define BB_AV_SET(BB) (SEL_REGION_BB_INFO (BB)->av_set) #define BB_AV_LEVEL(BB) (SEL_REGION_BB_INFO (BB)->av_level)