21#ifndef GCC_SEL_SCHED_IR_H
22#define GCC_SEL_SCHED_IR_H
35#define _LIST_NEXT(L) ((L)->next)
50#define ILIST_INSN(L) ((L)->u.insn)
51#define ILIST_NEXT(L) (_LIST_NEXT (L))
153#define EXPR_VINSN(EXPR) ((EXPR)->vinsn)
154#define EXPR_INSN_RTX(EXPR) (VINSN_INSN_RTX (EXPR_VINSN (EXPR)))
155#define EXPR_PATTERN(EXPR) (VINSN_PATTERN (EXPR_VINSN (EXPR)))
156#define EXPR_LHS(EXPR) (VINSN_LHS (EXPR_VINSN (EXPR)))
157#define EXPR_RHS(EXPR) (VINSN_RHS (EXPR_VINSN (EXPR)))
158#define EXPR_TYPE(EXPR) (VINSN_TYPE (EXPR_VINSN (EXPR)))
159#define EXPR_SEPARABLE_P(EXPR) (VINSN_SEPARABLE_P (EXPR_VINSN (EXPR)))
161#define EXPR_SPEC(EXPR) ((EXPR)->spec)
162#define EXPR_USEFULNESS(EXPR) ((EXPR)->usefulness)
163#define EXPR_PRIORITY(EXPR) ((EXPR)->priority)
164#define EXPR_PRIORITY_ADJ(EXPR) ((EXPR)->priority_adj)
165#define EXPR_SCHED_TIMES(EXPR) ((EXPR)->sched_times)
166#define EXPR_ORIG_BB_INDEX(EXPR) ((EXPR)->orig_bb_index)
167#define EXPR_ORIG_SCHED_CYCLE(EXPR) ((EXPR)->orig_sched_cycle)
168#define EXPR_SPEC_DONE_DS(EXPR) ((EXPR)->spec_done_ds)
169#define EXPR_SPEC_TO_CHECK_DS(EXPR) ((EXPR)->spec_to_check_ds)
170#define EXPR_HISTORY_OF_CHANGES(EXPR) ((EXPR)->history_of_changes)
171#define EXPR_TARGET_AVAILABLE(EXPR) ((EXPR)->target_available)
172#define EXPR_NEEDS_SPEC_CHECK_P(EXPR) ((EXPR)->needs_spec_check_p)
173#define EXPR_WAS_SUBSTITUTED(EXPR) ((EXPR)->was_substituted)
174#define EXPR_WAS_RENAMED(EXPR) ((EXPR)->was_renamed)
175#define EXPR_CANT_MOVE(EXPR) ((EXPR)->cant_move)
194#define _AV_SET_EXPR(L) (&(L)->u.expr)
195#define _AV_SET_NEXT(L) (_LIST_NEXT (L))
219#define BND_TO(B) ((B)->to)
223#define BND_PTR(B) ((B)->ptr)
224#define BND_AV(B) ((B)->av)
225#define BND_AV1(B) ((B)->av1)
226#define BND_DC(B) ((B)->dc)
230#define BLIST_BND(L) (&(L)->u.bnd)
231#define BLIST_NEXT(L) (_LIST_NEXT (L))
296#define FENCE_INSN(F) ((F)->insn)
297#define FENCE_STATE(F) ((F)->state)
298#define FENCE_BNDS(F) ((F)->bnds)
299#define FENCE_PROCESSED_P(F) ((F)->processed_p)
300#define FENCE_SCHEDULED_P(F) ((F)->scheduled_p)
301#define FENCE_ISSUED_INSNS(F) ((F)->cycle_issued_insns)
302#define FENCE_CYCLE(F) ((F)->cycle)
303#define FENCE_STARTS_CYCLE_P(F) ((F)->starts_cycle_p)
304#define FENCE_AFTER_STALL_P(F) ((F)->after_stall_p)
305#define FENCE_DC(F) ((F)->dc)
306#define FENCE_TC(F) ((F)->tc)
307#define FENCE_LAST_SCHEDULED_INSN(F) ((F)->last_scheduled_insn)
308#define FENCE_ISSUE_MORE(F) ((F)->issue_more)
309#define FENCE_EXECUTING_INSNS(F) ((F)->executing_insns)
310#define FENCE_READY_TICKS(F) ((F)->ready_ticks)
311#define FENCE_READY_TICKS_SIZE(F) ((F)->ready_ticks_size)
312#define FENCE_SCHED_NEXT(F) ((F)->sched_next)
316#define FLIST_FENCE(L) (&(L)->u.fence)
317#define FLIST_NEXT(L) (_LIST_NEXT (L))
327#define FLIST_TAIL_HEAD(L) ((L)->head)
328#define FLIST_TAIL_TAILP(L) ((L)->tailp)
441#define _FOR_EACH(TYPE, ELEM, I, L) \
442 for (_list_iter_start (&(I), &(L), false); \
443 _list_iter_cond_##TYPE (*(I).lp, &(ELEM)); \
444 _list_iter_next (&(I)))
446#define _FOR_EACH_1(TYPE, ELEM, I, LP) \
447 for (_list_iter_start (&(I), (LP), true); \
448 _list_iter_cond_##TYPE (*(I).lp, &(ELEM)); \
449 _list_iter_next (&(I)))
460#define ilist_remove(LP) (_list_remove (LP))
461#define ilist_clear(LP) (_list_clear (LP))
489#define ilist_iter_remove(IP) (_list_iter_remove (IP))
492#define FOR_EACH_INSN(INSN, I, L) _FOR_EACH (insn, (INSN), (I), (L))
493#define FOR_EACH_INSN_1(INSN, I, LP) _FOR_EACH_1 (insn, (INSN), (I), (LP))
498#define FOR_EACH_EXPR(EXPR, I, AV) _FOR_EACH (expr, (EXPR), (I), (AV))
499#define FOR_EACH_EXPR_1(EXPR, I, AV) _FOR_EACH_1 (expr, (EXPR), (I), (AV))
518#define DEF_LIST_NEXT(L) (_LIST_NEXT (L))
519#define DEF_LIST_DEF(L) (&(L)->u.def)
521#define FOR_EACH_DEF(DEF, I, DEF_LIST) _FOR_EACH (def, (DEF), (I), (DEF_LIST))
573#define IDATA_TYPE(ID) ((ID)->type)
574#define IDATA_LHS(ID) ((ID)->lhs)
575#define IDATA_RHS(ID) ((ID)->rhs)
576#define IDATA_REG_SETS(ID) ((ID)->reg_sets)
577#define IDATA_REG_USES(ID) ((ID)->reg_uses)
578#define IDATA_REG_CLOBBERS(ID) ((ID)->reg_clobbers)
618#define VINSN_INSN_RTX(VI) ((VI)->insn_rtx)
619#define VINSN_PATTERN(VI) (PATTERN (VINSN_INSN_RTX (VI)))
621#define VINSN_ID(VI) (&((VI)->id))
622#define VINSN_HASH(VI) ((VI)->hash)
623#define VINSN_HASH_RTX(VI) ((VI)->hash_rtx)
624#define VINSN_TYPE(VI) (IDATA_TYPE (VINSN_ID (VI)))
625#define VINSN_SEPARABLE_P(VI) (VINSN_TYPE (VI) == SET)
626#define VINSN_CLONABLE_P(VI) (VINSN_SEPARABLE_P (VI) || VINSN_TYPE (VI) == USE)
627#define VINSN_UNIQUE_P(VI) (!VINSN_CLONABLE_P (VI))
628#define VINSN_LHS(VI) (IDATA_LHS (VINSN_ID (VI)))
629#define VINSN_RHS(VI) (IDATA_RHS (VINSN_ID (VI)))
630#define VINSN_REG_SETS(VI) (IDATA_REG_SETS (VINSN_ID (VI)))
631#define VINSN_REG_USES(VI) (IDATA_REG_USES (VINSN_ID (VI)))
632#define VINSN_REG_CLOBBERS(VI) (IDATA_REG_CLOBBERS (VINSN_ID (VI)))
633#define VINSN_COUNT(VI) ((VI)->count)
634#define VINSN_MAY_TRAP_P(VI) ((VI)->may_trap_p)
730#define SID(INSN) (&s_i_d[INSN_LUID (INSN)])
731#define SID_BY_UID(UID) (&s_i_d[LUID_BY_UID (UID)])
735#define INSN_ASM_P(INSN) (SID (INSN)->asm_p)
736#define INSN_SCHED_NEXT(INSN) (SID (INSN)->sched_next)
737#define INSN_ANALYZED_DEPS(INSN) (SID (INSN)->analyzed_deps)
738#define INSN_FOUND_DEPS(INSN) (SID (INSN)->found_deps)
739#define INSN_DEPS_CONTEXT(INSN) (SID (INSN)->deps_context)
740#define INSN_ORIGINATORS(INSN) (SID (INSN)->originators)
741#define INSN_ORIGINATORS_BY_UID(UID) (SID_BY_UID (UID)->originators)
742#define INSN_TRANSFORMED_INSNS(INSN) (SID (INSN)->transformed_insns)
744#define INSN_EXPR(INSN) (&SID (INSN)->expr)
745#define INSN_LIVE(INSN) (SID (INSN)->live)
746#define INSN_LIVE_VALID_P(INSN) (SID (INSN)->live_valid_p)
747#define INSN_VINSN(INSN) (EXPR_VINSN (INSN_EXPR (INSN)))
748#define INSN_TYPE(INSN) (VINSN_TYPE (INSN_VINSN (INSN)))
749#define INSN_SIMPLEJUMP_P(INSN) (INSN_TYPE (INSN) == PC)
750#define INSN_LHS(INSN) (VINSN_LHS (INSN_VINSN (INSN)))
751#define INSN_RHS(INSN) (VINSN_RHS (INSN_VINSN (INSN)))
752#define INSN_REG_SETS(INSN) (VINSN_REG_SETS (INSN_VINSN (INSN)))
753#define INSN_REG_CLOBBERS(INSN) (VINSN_REG_CLOBBERS (INSN_VINSN (INSN)))
754#define INSN_REG_USES(INSN) (VINSN_REG_USES (INSN_VINSN (INSN)))
755#define INSN_SCHED_TIMES(INSN) (EXPR_SCHED_TIMES (INSN_EXPR (INSN)))
756#define INSN_SEQNO(INSN) (SID (INSN)->seqno)
757#define INSN_AFTER_STALL_P(INSN) (SID (INSN)->after_stall_p)
758#define INSN_SCHED_CYCLE(INSN) (SID (INSN)->sched_cycle)
759#define INSN_READY_CYCLE(INSN) (SID (INSN)->ready_cycle)
760#define INSN_SPEC_CHECKED_DS(INSN) (SID (INSN)->spec_checked_ds)
765#define INSN_WS_LEVEL(INSN) (SID (INSN)->ws_level)
770#define AV_SET(INSN) (get_av_set (INSN))
771#define AV_LEVEL(INSN) (get_av_level (INSN))
772#define AV_SET_VALID_P(INSN) (AV_LEVEL (INSN) == global_level)
784#define INSN_INIT_TODO_LUID (1)
787#define INSN_INIT_TODO_SSID (2)
790#define INSN_INIT_TODO_SIMPLEJUMP (4)
795#define INSN_NOP_P(INSN) (PATTERN (INSN) == nop_pattern)
801#define INSN_IN_STREAM_P(INSN) (PREV_INSN (INSN) && NEXT_INSN (INSN))
804#define IN_CURRENT_FENCE_P(INSN) (flist_lookup (fences, INSN) != NULL)
807#define MARK_LOOP_FOR_PIPELINING(LOOP) ((LOOP)->aux = (void *)(size_t)(1))
808#define LOOP_MARKED_FOR_PIPELINING_P(LOOP) ((size_t)((LOOP)->aux))
811#define LOOP_PREHEADER_BLOCKS(LOOP) ((size_t)((LOOP)->aux) == 1 \
813 : ((vec<basic_block> *) (LOOP)->aux))
814#define SET_LOOP_PREHEADER_BLOCKS(LOOP,BLOCKS) ((LOOP)->aux \
858#define SEL_GLOBAL_BB_INFO(BB) \
859 (&sel_global_bb_info[(BB)->index])
862#define BB_LV_SET(BB) (SEL_GLOBAL_BB_INFO (BB)->lv_set)
863#define BB_LV_SET_VALID_P(BB) (SEL_GLOBAL_BB_INFO (BB)->lv_set_valid_p)
887#define SEL_REGION_BB_INFO(BB) (&sel_region_bb_info[(BB)->index])
893#define BB_NOTE_LIST(BB) (SEL_REGION_BB_INFO (BB)->note_list)
895#define BB_AV_SET(BB) (SEL_REGION_BB_INFO (BB)->av_set)
896#define BB_AV_LEVEL(BB) (SEL_REGION_BB_INFO (BB)->av_level)
897#define BB_AV_SET_VALID_P(BB) (BB_AV_LEVEL (BB) == global_level)
918#define MAX_WS (param_selsched_max_lookahead)
992 class loop *inner_loop;
1005 if (bb == inner_loop->
header
1030 bool was_dest =
false;
1032 for (
i = 0; edges.iterate (
i, &
e);
i++)
1033 if (
e->dest == exit->
e->dest)
1040 edges.safe_push (exit->
e);
1091 class loop *this_loop;
1094 unsigned this_depth;
1100 pred_loop = this_loop;
1102 this_loop = pred_loop;
1110 for (
i = 0;
exits.iterate (
i, &e);
i++)
1113 &&
loop_depth (e->dest->loop_father) >= this_depth)
1117 if (next_exits.exists ())
1124 for (j = 0; next_exits.iterate (j, &ne); j++)
1125 exits.safe_push (ne);
1128 exits.ordered_remove (
i);
1144#define SUCCS_NORMAL (1)
1147#define SUCCS_BACK (2)
1150#define SUCCS_OUT (4)
1154#define SUCCS_SKIP_TO_LOOP_EXITS (8)
1157#define SUCCS_ALL (SUCCS_NORMAL | SUCCS_BACK | SUCCS_OUT)
1177 i.current_flags = 0;
1178 i.current_exit = -1;
1179 i.loop_exits.create (0);
1227 while (e_tmp && !check (e_tmp, ip));
1247 && flag_sel_sched_pipelining_outer_loops
1249 || BLOCK_TO_BB (ip->
bb->
index)
1250 < BLOCK_TO_BB (bb->
index)))
1266 if (check (ip->
e1, ip))
1321 int flags = ip->
flags;
1326 if (src_outside_rgn)
1381 bool succeeds_in_top_order = (BLOCK_TO_BB (ip->
bb->
index)
1382 < BLOCK_TO_BB (bb->
index));
1388 if (succeeds_in_top_order)
1392 || flag_sel_sched_pipelining_outer_loops);
1413#define FOR_EACH_SUCC_1(SUCC, ITER, INSN, FLAGS) \
1414 for ((ITER) = _succ_iter_start (&(SUCC), (INSN), (FLAGS)); \
1415 _succ_iter_cond (&(ITER), &(SUCC), (INSN), _eligible_successor_edge_p); \
1416 _succ_iter_next (&(ITER)))
1418#define FOR_EACH_SUCC(SUCC, ITER, INSN) \
1419 FOR_EACH_SUCC_1 (SUCC, ITER, INSN, SUCCS_NORMAL)
1422#define SUCC_ITER_EDGE(ITER) ((ITER)->e1)
#define EDGE_COUNT(ev)
Definition basic-block.h:300
#define ei_start(iter)
Definition basic-block.h:373
basic_block single_succ(const_basic_block bb)
Definition basic-block.h:345
#define EDGE_SUCC(bb, i)
Definition basic-block.h:303
#define BB_END(B)
Definition basic-block.h:255
bool ei_cond(edge_iterator ei, edge *p)
Definition basic-block.h:453
#define FALLTHRU_EDGE(bb)
Definition basic-block.h:286
#define EXIT_BLOCK_PTR_FOR_FN(FN)
Definition basic-block.h:195
void ei_next(edge_iterator *i)
Definition basic-block.h:418
bool flow_bb_inside_loop_p(const class loop *loop, const_basic_block bb)
Definition cfgloop.cc:838
class loop * loop_outer(const class loop *loop)
Definition cfgloop.h:547
unsigned loop_depth(const class loop *loop)
Definition cfgloop.h:538
class loop * loop_p
Definition cfgloop.h:98
@ LOOPS_HAVE_RECORDED_EXITS
Definition cfgloop.h:312
rtx_note * bb_note(basic_block bb)
Definition cfgrtl.cc:698
Definition sel-sched-ir.h:663
bitmap found_deps
Definition sel-sched-ir.h:684
bitmap originators
Definition sel-sched-ir.h:689
int seqno
Definition sel-sched-ir.h:673
insn_t sched_next
Definition sel-sched-ir.h:701
bool after_stall_p
Definition sel-sched-ir.h:721
bool live_valid_p
Definition sel-sched-ir.h:714
expr_def expr
Definition sel-sched-ir.h:667
bitmap analyzed_deps
Definition sel-sched-ir.h:679
int sched_cycle
Definition sel-sched-ir.h:705
class deps_desc deps_context
Definition sel-sched-ir.h:695
bool asm_p
Definition sel-sched-ir.h:716
htab_t transformed_insns
Definition sel-sched-ir.h:692
int ready_cycle
Definition sel-sched-ir.h:708
ds_t spec_checked_ds
Definition sel-sched-ir.h:711
int ws_level
Definition sel-sched-ir.h:670
regset live
Definition sel-sched-ir.h:676
basic_block latch
Definition cfgloop.h:133
struct loop_exit * exits
Definition cfgloop.h:268
basic_block header
Definition cfgloop.h:130
Definition alloc-pool.h:486
struct basic_block_def * basic_block
Definition coretypes.h:351
struct rtx_def * rtx
Definition coretypes.h:57
class edge_def * edge
Definition coretypes.h:348
struct simple_bitmap_def * sbitmap
Definition coretypes.h:54
class bitmap_head * bitmap
Definition coretypes.h:51
#define current_loops
Definition function.h:549
#define cfun
Definition function.h:485
struct state * state_t
Definition genautomata.cc:195
static struct filedep ** last
Definition genmddeps.cc:33
i
Definition poly-int.h:776
bitmap regset
Definition regset.h:38
#define INSN_P(X)
Definition rtl.h:872
basic_block BLOCK_FOR_INSN(const_rtx insn)
Definition rtl.h:1501
#define NULL_RTX
Definition rtl.h:709
rtx_insn * NEXT_INSN(const rtx_insn *insn)
Definition rtl.h:1490
#define NOTE_INSN_BASIC_BLOCK_P(INSN)
Definition rtl.h:1709
bool considered_for_pipelining_p(class loop *)
_list_t ilist_t
Definition sel-sched-ir.h:49
void av_set_iter_remove(av_set_iterator *)
bool _list_iter_cond_def(def_list_t def_list, def_t *def)
Definition sel-sched-ir.h:524
vec< sel_insn_data_def > s_i_d
int speculate_expr(expr_t, ds_t)
deps_where_t
Definition sel-sched-ir.h:825
@ DEPS_IN_LHS
Definition sel-sched-ir.h:827
@ DEPS_IN_INSN
Definition sel-sched-ir.h:826
@ DEPS_IN_NOWHERE
Definition sel-sched-ir.h:829
@ DEPS_IN_RHS
Definition sel-sched-ir.h:828
bool sel_is_loop_preheader_p(basic_block)
void exchange_data_sets(basic_block, basic_block)
void get_dest_and_mode(rtx, rtx *, machine_mode *)
void sel_redirect_edge_and_branch_force(edge, basic_block)
bool register_unavailable_p(regset, rtx)
bool in_same_ebb_p(insn_t, insn_t)
void av_set_union_and_live(av_set_t *, av_set_t *, regset, regset, insn_t)
bool _list_iter_cond_expr(av_set_t av, expr_t *exprp)
Definition sel-sched-ir.h:502
bool ilist_is_in_p(ilist_t l, insn_t insn)
Definition sel-sched-ir.h:464
vec< edge > get_all_loop_exits(basic_block bb)
Definition sel-sched-ir.h:1072
void sel_sched_region(int)
expr_def * expr_t
Definition sel-sched-ir.h:151
void change_vinsn_in_expr(expr_t, vinsn_t)
void flist_tail_init(flist_tail_t)
unsigned expr_dest_regno(expr_t)
vec< sel_region_bb_info_def > sel_region_bb_info
int tick_check_p(expr_t, deps_t, fence_t)
bool _eligible_successor_edge_p(edge e1, succ_iterator *ip)
Definition sel-sched-ir.h:1317
void _list_iter_next(_list_iterator *ip)
Definition sel-sched-ir.h:415
void av_set_code_motion_filter(av_set_t *, av_set_t)
void av_set_leave_one_nonspec(av_set_t *)
#define ILIST_NEXT(L)
Definition sel-sched-ir.h:51
#define SUCCS_SKIP_TO_LOOP_EXITS
Definition sel-sched-ir.h:1154
fence_t flist_lookup(flist_t, insn_t)
bool bookkeeping_can_be_created_if_moved_through_p(insn_t)
void _list_clear(_list_t *l)
Definition sel-sched-ir.h:386
void alloc_sched_pools(void)
bool sel_bb_empty_p(basic_block)
void setup_nop_vinsn(void)
expr_t av_set_lookup(av_set_t, vinsn_t)
struct expr_history_def_1 expr_history_def
Definition sel-sched-ir.h:81
#define SUCCS_OUT
Definition sel-sched-ir.h:1150
void sel_finish_global_bb_info(void)
vec< sel_global_bb_info_def > sel_global_bb_info
void set_target_context(tc_t)
bool tidy_control_flow(basic_block, bool)
insn_t sel_gen_insn_from_expr_after(expr_t, vinsn_t, int, insn_t)
void add_dirty_fence_to_fences(flist_tail_t, insn_t, fence_t)
class loop * current_loop_nest
regset compute_live(insn_t)
insn_t get_nop_from_pool(insn_t)
insn_t sel_gen_recovery_insn_from_rtx_after(rtx, expr_t, int, insn_t)
struct flist_tail_def * flist_tail_t
Definition sel-sched-ir.h:326
void sel_add_loop_preheaders(bb_vec_t *)
bool _succ_iter_cond(succ_iterator *ip, insn_t *succp, insn_t insn, bool check(edge, succ_iterator *))
Definition sel-sched-ir.h:1199
local_trans_type
Definition sel-sched-ir.h:56
@ TRANS_SUBSTITUTION
Definition sel-sched-ir.h:57
@ TRANS_SPECULATION
Definition sel-sched-ir.h:58
#define INSN_NOP_P(INSN)
Definition sel-sched-ir.h:795
sel_global_bb_info_def * sel_global_bb_info_t
Definition sel-sched-ir.h:848
bool enable_moveup_set_path_p
struct _fence * fence_t
Definition sel-sched-ir.h:294
sel_insn_data_def * sel_insn_data_t
Definition sel-sched-ir.h:725
bool sel_bb_head_p(insn_t)
basic_block after_recovery
object_allocator< _list_node > sched_lists_pool
void sel_extend_global_bb_info(void)
rtx_insn * insn_t
Definition sel-sched-ir.h:46
vinsn_t vinsn_copy(vinsn_t, bool)
bool sel_remove_insn(insn_t, bool, bool)
bool vinsn_separable_p(vinsn_t)
#define _LIST_NEXT(L)
Definition sel-sched-ir.h:35
void return_regset_to_pool(regset)
void av_set_union_and_clear(av_set_t *, av_set_t *, insn_t)
void _list_remove(_list_t *lp)
Definition sel-sched-ir.h:377
void sel_init_pipelining(void)
bool sel_num_cfg_preds_gt_1(insn_t)
#define _AV_SET_EXPR(L)
Definition sel-sched-ir.h:194
void move_fence_to_fences(flist_t, flist_tail_t)
bool av_set_is_in_p(av_set_t, vinsn_t)
_list_t flist_t
Definition sel-sched-ir.h:315
struct succs_info * compute_succs_info(insn_t, short)
regset get_clear_regset_from_pool(void)
void _list_iter_remove(_list_iterator *ip)
Definition sel-sched-ir.h:424
tc_t create_target_context(bool)
vec< edge > get_loop_exit_edges_unique_dests(const class loop *loop)
Definition sel-sched-ir.h:1018
void free_nop_vinsn(void)
void reset_target_context(tc_t, bool)
void * tc_t
Definition sel-sched-ir.h:26
void return_nop_to_pool(insn_t, bool)
void free_data_for_scheduled_insn(insn_t)
succ_iterator _succ_iter_start(insn_t *succp, insn_t insn, int flags)
Definition sel-sched-ir.h:1162
void flist_clear(flist_t *)
void add_clean_fence_to_fences(flist_tail_t, insn_t, fence_t)
bool vinsn_cond_branch_p(vinsn_t)
void blist_add(blist_t *, insn_t, ilist_t, deps_t)
void av_set_substract_cond_branches(av_set_t *)
regset get_regset_from_pool(void)
rtx_insn * create_copy_of_insn_rtx(rtx)
bool sel_bb_end_p(insn_t)
void _list_remove_nofree(_list_t *lp)
Definition sel-sched-ir.h:369
bool in_current_region_p(basic_block)
void recompute_vinsn_lhs_rhs(vinsn_t)
void sel_unregister_cfg_hooks(void)
void blist_remove(blist_t *)
#define DEF_LIST_DEF(L)
Definition sel-sched-ir.h:519
bool inner_loop_header_p(basic_block bb)
Definition sel-sched-ir.h:990
struct vinsn_def * vinsn_t
Definition sel-sched-ir.h:43
void sel_register_cfg_hooks(void)
av_set_t av_set_copy(av_set_t)
void ilist_add(ilist_t *lp, insn_t insn)
Definition sel-sched-ir.h:455
void free_regset_pool(void)
void merge_expr_data(expr_t, expr_t, insn_t)
av_set_t get_av_set(insn_t)
int get_seqno_by_preds(rtx_insn *)
void vinsn_attach(vinsn_t)
bool sel_insn_has_single_succ_p(insn_t, int)
basic_block sel_create_recovery_block(insn_t)
void free_data_sets(basic_block)
ds_t has_dependence_p(expr_t, insn_t, ds_t **)
sel_region_bb_info_def * sel_region_bb_info_t
Definition sel-sched-ir.h:880
insn_t sel_gen_insn_from_rtx_after(rtx, expr_t, int, insn_t)
bool lhs_of_insn_equals_to_dest_p(insn_t, rtx)
loop_p get_loop_nest_for_rgn(unsigned int)
_list_t av_set_t
Definition sel-sched-ir.h:193
struct _def * def_t
Definition sel-sched-ir.h:189
void sel_set_sched_flags(void)
bool bb_ends_ebb_p(basic_block)
void av_set_split_usefulness(av_set_t, int, int)
expr_t merge_with_other_exprs(av_set_t *, av_set_iterator *, expr_t)
void insert_in_history_vect(vec< expr_history_def > *, unsigned, enum local_trans_type, vinsn_t, vinsn_t, ds_t)
_list_iterator def_list_iterator
Definition sel-sched-ir.h:516
void sel_init_global_and_expr(bb_vec_t)
ilist_t ilist_invert(ilist_t)
void free_sched_pools(void)
void free_succs_info(struct succs_info *)
ilist_t ilist_copy(ilist_t)
void free_bb_note_pool(void)
void sel_finish_global_and_expr(void)
void merge_expr(expr_t, expr_t, insn_t)
void sel_finish_bbs(void)
expr_t av_set_element(av_set_t, int)
void purge_empty_blocks(void)
void copy_expr_onside(expr_t, expr_t)
bool _list_iter_cond_insn(ilist_t l, insn_t *ip)
Definition sel-sched-ir.h:478
void sel_clear_has_dependence(void)
bool sel_redirect_edge_and_branch(edge, basic_block)
void av_set_add(av_set_t *, expr_t)
class _sel_insn_data sel_insn_data_def
Definition sel-sched-ir.h:724
#define ILIST_INSN(L)
Definition sel-sched-ir.h:50
void def_list_add(def_list_t *, insn_t, unsigned int)
void clear_outdated_rtx_info(basic_block)
struct _bnd * bnd_t
Definition sel-sched-ir.h:218
void sel_init_bbs(bb_vec_t)
void copy_expr(expr_t, expr_t)
bool sel_bb_empty_or_nop_p(basic_block bb)
Definition sel-sched-ir.h:1046
_list_iterator av_set_iterator
Definition sel-sched-ir.h:497
void _succ_iter_next(succ_iterator *ip)
Definition sel-sched-ir.h:1304
#define SUCCS_NORMAL
Definition sel-sched-ir.h:1144
sel_insn_data_def insn_sid(insn_t)
_list_t def_list_t
Definition sel-sched-ir.h:515
_list_t blist_t
Definition sel-sched-ir.h:229
basic_block fallthru_bb_of_jump(const rtx_insn *)
bool vinsn_equal_p(vinsn_t, vinsn_t)
void sel_setup_sched_infos(void)
void vinsn_detach(vinsn_t)
rtx_insn * sel_bb_end(basic_block)
void setup_nop_and_exit_insns(void)
void sel_finish_pipelining(void)
vinsn_t create_vinsn_from_insn_rtx(rtx_insn *, bool)
void _list_iter_start(_list_iterator *ip, _list_t *lp, bool can_remove_p)
Definition sel-sched-ir.h:407
void advance_deps_context(deps_t, insn_t)
_list_iterator ilist_iterator
Definition sel-sched-ir.h:491
rtx_insn * sel_bb_head(basic_block)
void av_set_clear(av_set_t *)
int sel_vinsn_cost(vinsn_t)
void _list_iter_remove_nofree(_list_iterator *ip)
Definition sel-sched-ir.h:432
void _list_add(_list_t *lp)
Definition sel-sched-ir.h:360
#define SUCCS_BACK
Definition sel-sched-ir.h:1147
basic_block sel_split_edge(edge)
struct _list_node * _list_t
Definition sel-sched-ir.h:34
struct idata_def * idata_t
Definition sel-sched-ir.h:39
rtx_insn * create_insn_rtx_from_pattern(rtx, rtx)
bitmap blocks_to_reschedule
bitmap_head * forced_ebb_heads
void free_nop_and_exit_insns(void)
basic_block bb_next_bb(basic_block bb)
Definition sel-sched-ir.h:1426
void make_region_from_loop_preheader(vec< basic_block > *&)
rtx expr_dest_reg(expr_t)
_list_t _list_alloc(void)
Definition sel-sched-ir.h:354
int find_in_history_vect(vec< expr_history_def >, rtx, vinsn_t, bool)
struct _expr expr_def
Definition sel-sched-ir.h:150
insn_t sel_move_insn(expr_t, int, insn_t)
void mark_unavailable_targets(av_set_t, av_set_t, regset)
Definition sel-sched-ir.h:200
av_set_t av1
Definition sel-sched-ir.h:211
insn_t to
Definition sel-sched-ir.h:202
av_set_t av
Definition sel-sched-ir.h:208
ilist_t ptr
Definition sel-sched-ir.h:205
deps_t dc
Definition sel-sched-ir.h:216
Definition sel-sched-ir.h:179
insn_t orig_insn
Definition sel-sched-ir.h:180
unsigned int crossed_call_abis
Definition sel-sched-ir.h:187
Definition sel-sched-ir.h:86
bool was_renamed
Definition sel-sched-ir.h:144
int spec
Definition sel-sched-ir.h:95
bool was_substituted
Definition sel-sched-ir.h:141
ds_t spec_done_ds
Definition sel-sched-ir.h:117
int orig_bb_index
Definition sel-sched-ir.h:113
signed char target_available
Definition sel-sched-ir.h:133
vec< expr_history_def > history_of_changes
Definition sel-sched-ir.h:128
bool cant_move
Definition sel-sched-ir.h:147
ds_t spec_to_check_ds
Definition sel-sched-ir.h:121
int priority_adj
Definition sel-sched-ir.h:106
int sched_times
Definition sel-sched-ir.h:109
int usefulness
Definition sel-sched-ir.h:100
bool needs_spec_check_p
Definition sel-sched-ir.h:137
vinsn_t vinsn
Definition sel-sched-ir.h:88
int priority
Definition sel-sched-ir.h:103
int orig_sched_cycle
Definition sel-sched-ir.h:125
Definition sel-sched-ir.h:237
ilist_t bnds
Definition sel-sched-ir.h:253
int ready_ticks_size
Definition sel-sched-ir.h:271
bool after_stall_p
Definition sel-sched-ir.h:292
insn_t insn
Definition sel-sched-ir.h:239
int cycle
Definition sel-sched-ir.h:245
tc_t tc
Definition sel-sched-ir.h:261
rtx_insn * sched_next
Definition sel-sched-ir.h:280
int * ready_ticks
Definition sel-sched-ir.h:268
rtx_insn * last_scheduled_insn
Definition sel-sched-ir.h:274
deps_t dc
Definition sel-sched-ir.h:257
int issue_more
Definition sel-sched-ir.h:277
vec< rtx_insn *, va_gc > * executing_insns
Definition sel-sched-ir.h:264
bool starts_cycle_p
Definition sel-sched-ir.h:289
bool scheduled_p
Definition sel-sched-ir.h:286
state_t state
Definition sel-sched-ir.h:242
bool processed_p
Definition sel-sched-ir.h:283
int cycle_issued_insns
Definition sel-sched-ir.h:249
Definition sel-sched-ir.h:395
bool removed_p
Definition sel-sched-ir.h:403
_list_t * lp
Definition sel-sched-ir.h:397
bool can_remove_p
Definition sel-sched-ir.h:400
Definition sel-sched-ir.h:332
void * data
Definition sel-sched-ir.h:343
insn_t insn
Definition sel-sched-ir.h:338
struct _fence fence
Definition sel-sched-ir.h:341
_list_t next
Definition sel-sched-ir.h:333
rtx x
Definition sel-sched-ir.h:337
struct _def def
Definition sel-sched-ir.h:342
union _list_node::@270251122236364104100307341173245104044375370020 u
expr_def expr
Definition sel-sched-ir.h:340
struct _bnd bnd
Definition sel-sched-ir.h:339
vec< edge, va_gc > * succs
Definition basic-block.h:120
basic_block next_bb
Definition basic-block.h:133
class loop * loop_father
Definition basic-block.h:126
int index
Definition basic-block.h:147
Definition loop-invariant.cc:88
Definition basic-block.h:361
Definition sel-sched-ir.h:64
enum local_trans_type type
Definition sel-sched-ir.h:78
ds_t spec_ds
Definition sel-sched-ir.h:75
vinsn_t old_expr_vinsn
Definition sel-sched-ir.h:69
unsigned uid
Definition sel-sched-ir.h:66
vinsn_t new_expr_vinsn
Definition sel-sched-ir.h:72
Definition sel-sched-ir.h:321
flist_t head
Definition sel-sched-ir.h:322
flist_t * tailp
Definition sel-sched-ir.h:323
Definition sel-sched-ir.h:538
regset reg_uses
Definition sel-sched-ir.h:570
int type
Definition sel-sched-ir.h:549
rtx rhs
Definition sel-sched-ir.h:555
regset reg_sets
Definition sel-sched-ir.h:566
rtx lhs
Definition sel-sched-ir.h:552
regset reg_clobbers
Definition sel-sched-ir.h:568
struct loop_exit * next
Definition cfgloop.h:83
edge e
Definition cfgloop.h:79
Definition sel-sched-ir.h:835
regset lv_set
Definition sel-sched-ir.h:840
bool lv_set_valid_p
Definition sel-sched-ir.h:845
Definition sel-sched-ir.h:867
av_set_t av_set
Definition sel-sched-ir.h:874
rtx_insn * note_list
Definition sel-sched-ir.h:870
int av_level
Definition sel-sched-ir.h:877
Definition sel-sched-ir.h:925
vec< edge > loop_exits
Definition sel-sched-ir.h:951
short current_flags
Definition sel-sched-ir.h:947
bool bb_end
Definition sel-sched-ir.h:927
short flags
Definition sel-sched-ir.h:943
edge e2
Definition sel-sched-ir.h:933
basic_block bb
Definition sel-sched-ir.h:939
edge e1
Definition sel-sched-ir.h:930
int current_exit
Definition sel-sched-ir.h:950
edge_iterator ei
Definition sel-sched-ir.h:936
Definition sel-sched-ir.h:956
vec< int > probs_ok
Definition sel-sched-ir.h:965
insn_vec_t succs_ok
Definition sel-sched-ir.h:961
insn_vec_t succs_other
Definition sel-sched-ir.h:968
int all_succs_n
Definition sel-sched-ir.h:974
int succs_ok_n
Definition sel-sched-ir.h:977
short flags
Definition sel-sched-ir.h:958
int all_prob
Definition sel-sched-ir.h:971
Definition sel-sched-ir.h:594
unsigned hash
Definition sel-sched-ir.h:603
rtx_insn * insn_rtx
Definition sel-sched-ir.h:596
bool may_trap_p
Definition sel-sched-ir.h:615
int cost
Definition sel-sched-ir.h:612
unsigned hash_rtx
Definition sel-sched-ir.h:606
struct idata_def id
Definition sel-sched-ir.h:599
int count
Definition sel-sched-ir.h:609
#define NULL
Definition system.h:58
#define gcc_assert(EXPR)
Definition system.h:828
constexpr vnull vNULL
Definition vec.h:569