|
#define | _LIST_NEXT(L) |
|
#define | _XLIST_X(L) |
|
#define | _XLIST_NEXT(L) |
|
#define | ILIST_INSN(L) |
|
#define | ILIST_NEXT(L) |
|
#define | EXPR_VINSN(EXPR) |
|
#define | EXPR_INSN_RTX(EXPR) |
|
#define | EXPR_PATTERN(EXPR) |
|
#define | EXPR_LHS(EXPR) |
|
#define | EXPR_RHS(EXPR) |
|
#define | EXPR_TYPE(EXPR) |
|
#define | EXPR_SEPARABLE_P(EXPR) |
|
#define | EXPR_SPEC(EXPR) |
|
#define | EXPR_USEFULNESS(EXPR) |
|
#define | EXPR_PRIORITY(EXPR) |
|
#define | EXPR_PRIORITY_ADJ(EXPR) |
|
#define | EXPR_SCHED_TIMES(EXPR) |
|
#define | EXPR_ORIG_BB_INDEX(EXPR) |
|
#define | EXPR_ORIG_SCHED_CYCLE(EXPR) |
|
#define | EXPR_SPEC_DONE_DS(EXPR) |
|
#define | EXPR_SPEC_TO_CHECK_DS(EXPR) |
|
#define | EXPR_HISTORY_OF_CHANGES(EXPR) |
|
#define | EXPR_TARGET_AVAILABLE(EXPR) |
|
#define | EXPR_NEEDS_SPEC_CHECK_P(EXPR) |
|
#define | EXPR_WAS_SUBSTITUTED(EXPR) |
|
#define | EXPR_WAS_RENAMED(EXPR) |
|
#define | EXPR_CANT_MOVE(EXPR) |
|
#define | _AV_SET_EXPR(L) |
|
#define | _AV_SET_NEXT(L) |
|
#define | BND_TO(B) |
|
#define | BND_PTR(B) |
|
#define | BND_AV(B) |
|
#define | BND_AV1(B) |
|
#define | BND_DC(B) |
|
#define | BLIST_BND(L) |
|
#define | BLIST_NEXT(L) |
|
#define | FENCE_INSN(F) |
|
#define | FENCE_STATE(F) |
|
#define | FENCE_BNDS(F) |
|
#define | FENCE_PROCESSED_P(F) |
|
#define | FENCE_SCHEDULED_P(F) |
|
#define | FENCE_ISSUED_INSNS(F) |
|
#define | FENCE_CYCLE(F) |
|
#define | FENCE_STARTS_CYCLE_P(F) |
|
#define | FENCE_AFTER_STALL_P(F) |
|
#define | FENCE_DC(F) |
|
#define | FENCE_TC(F) |
|
#define | FENCE_LAST_SCHEDULED_INSN(F) |
|
#define | FENCE_ISSUE_MORE(F) |
|
#define | FENCE_EXECUTING_INSNS(F) |
|
#define | FENCE_READY_TICKS(F) |
|
#define | FENCE_READY_TICKS_SIZE(F) |
|
#define | FENCE_SCHED_NEXT(F) |
|
#define | FLIST_FENCE(L) |
|
#define | FLIST_NEXT(L) |
|
#define | FLIST_TAIL_HEAD(L) |
|
#define | FLIST_TAIL_TAILP(L) |
|
#define | _FOR_EACH(TYPE, ELEM, I, L) |
|
#define | _FOR_EACH_1(TYPE, ELEM, I, LP) |
|
#define | _xlist_remove(LP) |
|
#define | _xlist_clear(LP) |
|
#define | _xlist_iter_remove(IP) |
|
#define | _FOR_EACH_X(X, I, L) |
|
#define | _FOR_EACH_X_1(X, I, LP) |
|
#define | ilist_remove(LP) |
|
#define | ilist_clear(LP) |
|
#define | ilist_iter_remove(IP) |
|
#define | FOR_EACH_INSN(INSN, I, L) |
|
#define | FOR_EACH_INSN_1(INSN, I, LP) |
|
#define | FOR_EACH_EXPR(EXPR, I, AV) |
|
#define | FOR_EACH_EXPR_1(EXPR, I, AV) |
|
#define | DEF_LIST_NEXT(L) |
|
#define | DEF_LIST_DEF(L) |
|
#define | FOR_EACH_DEF(DEF, I, DEF_LIST) |
|
#define | IDATA_TYPE(ID) |
|
#define | IDATA_LHS(ID) |
|
#define | IDATA_RHS(ID) |
|
#define | IDATA_REG_SETS(ID) |
|
#define | IDATA_REG_USES(ID) |
|
#define | IDATA_REG_CLOBBERS(ID) |
|
#define | VINSN_INSN_RTX(VI) |
|
#define | VINSN_PATTERN(VI) |
|
#define | VINSN_ID(VI) |
|
#define | VINSN_HASH(VI) |
|
#define | VINSN_HASH_RTX(VI) |
|
#define | VINSN_TYPE(VI) |
|
#define | VINSN_SEPARABLE_P(VI) |
|
#define | VINSN_CLONABLE_P(VI) |
|
#define | VINSN_UNIQUE_P(VI) |
|
#define | VINSN_LHS(VI) |
|
#define | VINSN_RHS(VI) |
|
#define | VINSN_REG_SETS(VI) |
|
#define | VINSN_REG_USES(VI) |
|
#define | VINSN_REG_CLOBBERS(VI) |
|
#define | VINSN_COUNT(VI) |
|
#define | VINSN_MAY_TRAP_P(VI) |
|
#define | SID(INSN) |
|
#define | SID_BY_UID(UID) |
|
#define | INSN_ASM_P(INSN) |
|
#define | INSN_SCHED_NEXT(INSN) |
|
#define | INSN_ANALYZED_DEPS(INSN) |
|
#define | INSN_FOUND_DEPS(INSN) |
|
#define | INSN_DEPS_CONTEXT(INSN) |
|
#define | INSN_ORIGINATORS(INSN) |
|
#define | INSN_ORIGINATORS_BY_UID(UID) |
|
#define | INSN_TRANSFORMED_INSNS(INSN) |
|
#define | INSN_EXPR(INSN) |
|
#define | INSN_LIVE(INSN) |
|
#define | INSN_LIVE_VALID_P(INSN) |
|
#define | INSN_VINSN(INSN) |
|
#define | INSN_TYPE(INSN) |
|
#define | INSN_SIMPLEJUMP_P(INSN) |
|
#define | INSN_LHS(INSN) |
|
#define | INSN_RHS(INSN) |
|
#define | INSN_REG_SETS(INSN) |
|
#define | INSN_REG_CLOBBERS(INSN) |
|
#define | INSN_REG_USES(INSN) |
|
#define | INSN_SCHED_TIMES(INSN) |
|
#define | INSN_SEQNO(INSN) |
|
#define | INSN_AFTER_STALL_P(INSN) |
|
#define | INSN_SCHED_CYCLE(INSN) |
|
#define | INSN_READY_CYCLE(INSN) |
|
#define | INSN_SPEC_CHECKED_DS(INSN) |
|
#define | INSN_WS_LEVEL(INSN) |
|
#define | AV_SET(INSN) |
|
#define | AV_LEVEL(INSN) |
|
#define | AV_SET_VALID_P(INSN) |
|
#define | INSN_INIT_TODO_LUID (1) |
|
#define | INSN_INIT_TODO_SSID (2) |
|
#define | INSN_INIT_TODO_SIMPLEJUMP (4) |
|
#define | INSN_NOP_P(INSN) |
|
#define | INSN_IN_STREAM_P(INSN) |
|
#define | IN_CURRENT_FENCE_P(INSN) |
|
#define | MARK_LOOP_FOR_PIPELINING(LOOP) |
|
#define | LOOP_MARKED_FOR_PIPELINING_P(LOOP) |
|
#define | LOOP_PREHEADER_BLOCKS(LOOP) |
|
#define | SET_LOOP_PREHEADER_BLOCKS(LOOP, BLOCKS) |
|
#define | SEL_GLOBAL_BB_INFO(BB) |
|
#define | BB_LV_SET(BB) |
|
#define | BB_LV_SET_VALID_P(BB) |
|
#define | SEL_REGION_BB_INFO(BB) |
|
#define | BB_NOTE_LIST(BB) |
|
#define | BB_AV_SET(BB) |
|
#define | BB_AV_LEVEL(BB) |
|
#define | BB_AV_SET_VALID_P(BB) |
|
#define | MAX_WS (param_selsched_max_lookahead) |
|
#define | SUCCS_NORMAL (1) |
|
#define | SUCCS_BACK (2) |
|
#define | SUCCS_OUT (4) |
|
#define | SUCCS_SKIP_TO_LOOP_EXITS (8) |
|
#define | SUCCS_ALL (SUCCS_NORMAL | SUCCS_BACK | SUCCS_OUT) |
|
#define | FOR_EACH_SUCC_1(SUCC, ITER, INSN, FLAGS) |
|
#define | FOR_EACH_SUCC(SUCC, ITER, INSN) |
|
#define | SUCC_ITER_EDGE(ITER) |
|
|
_list_t | _list_alloc (void) |
|
void | _list_add (_list_t *lp) |
|
void | _list_remove_nofree (_list_t *lp) |
|
void | _list_remove (_list_t *lp) |
|
void | _list_clear (_list_t *l) |
|
void | _list_iter_start (_list_iterator *ip, _list_t *lp, bool can_remove_p) |
|
void | _list_iter_next (_list_iterator *ip) |
|
void | _list_iter_remove (_list_iterator *ip) |
|
void | _list_iter_remove_nofree (_list_iterator *ip) |
|
void | _xlist_add (_xlist_t *lp, rtx x) |
|
bool | _xlist_is_in_p (_xlist_t l, rtx x) |
|
bool | _list_iter_cond_x (_xlist_t l, rtx *xp) |
|
void | ilist_add (ilist_t *lp, insn_t insn) |
|
bool | ilist_is_in_p (ilist_t l, insn_t insn) |
|
bool | _list_iter_cond_insn (ilist_t l, insn_t *ip) |
|
bool | _list_iter_cond_expr (av_set_t av, expr_t *exprp) |
|
bool | _list_iter_cond_def (def_list_t def_list, def_t *def) |
|
sel_insn_data_def | insn_sid (insn_t) |
|
av_set_t | get_av_set (insn_t) |
|
int | get_av_level (insn_t) |
|
void | sel_extend_global_bb_info (void) |
|
void | sel_finish_global_bb_info (void) |
|
rtx_insn * | sel_bb_head (basic_block) |
|
rtx_insn * | sel_bb_end (basic_block) |
|
bool | sel_bb_empty_p (basic_block) |
|
bool | in_current_region_p (basic_block) |
|
bool | inner_loop_header_p (basic_block bb) |
|
vec< edge > | get_loop_exit_edges_unique_dests (const class loop *loop) |
|
bool | sel_bb_empty_or_nop_p (basic_block bb) |
|
vec< edge > | get_all_loop_exits (basic_block bb) |
|
succ_iterator | _succ_iter_start (insn_t *succp, insn_t insn, int flags) |
|
bool | _succ_iter_cond (succ_iterator *ip, insn_t *succp, insn_t insn, bool check(edge, succ_iterator *)) |
|
void | _succ_iter_next (succ_iterator *ip) |
|
bool | _eligible_successor_edge_p (edge e1, succ_iterator *ip) |
|
basic_block | bb_next_bb (basic_block bb) |
|
ilist_t | ilist_copy (ilist_t) |
|
ilist_t | ilist_invert (ilist_t) |
|
void | blist_add (blist_t *, insn_t, ilist_t, deps_t) |
|
void | blist_remove (blist_t *) |
|
void | flist_tail_init (flist_tail_t) |
|
fence_t | flist_lookup (flist_t, insn_t) |
|
void | flist_clear (flist_t *) |
|
void | def_list_add (def_list_t *, insn_t, unsigned int) |
|
tc_t | create_target_context (bool) |
|
void | set_target_context (tc_t) |
|
void | reset_target_context (tc_t, bool) |
|
void | advance_deps_context (deps_t, insn_t) |
|
void | init_fences (insn_t) |
|
void | add_clean_fence_to_fences (flist_tail_t, insn_t, fence_t) |
|
void | add_dirty_fence_to_fences (flist_tail_t, insn_t, fence_t) |
|
void | move_fence_to_fences (flist_t, flist_tail_t) |
|
regset | get_regset_from_pool (void) |
|
regset | get_clear_regset_from_pool (void) |
|
void | return_regset_to_pool (regset) |
|
void | free_regset_pool (void) |
|
insn_t | get_nop_from_pool (insn_t) |
|
void | return_nop_to_pool (insn_t, bool) |
|
void | free_nop_pool (void) |
|
bool | vinsn_separable_p (vinsn_t) |
|
bool | vinsn_cond_branch_p (vinsn_t) |
|
void | recompute_vinsn_lhs_rhs (vinsn_t) |
|
int | sel_vinsn_cost (vinsn_t) |
|
insn_t | sel_gen_insn_from_rtx_after (rtx, expr_t, int, insn_t) |
|
insn_t | sel_gen_recovery_insn_from_rtx_after (rtx, expr_t, int, insn_t) |
|
insn_t | sel_gen_insn_from_expr_after (expr_t, vinsn_t, int, insn_t) |
|
insn_t | sel_move_insn (expr_t, int, insn_t) |
|
void | vinsn_attach (vinsn_t) |
|
void | vinsn_detach (vinsn_t) |
|
vinsn_t | vinsn_copy (vinsn_t, bool) |
|
bool | vinsn_equal_p (vinsn_t, vinsn_t) |
|
void | copy_expr (expr_t, expr_t) |
|
void | copy_expr_onside (expr_t, expr_t) |
|
void | merge_expr_data (expr_t, expr_t, insn_t) |
|
void | merge_expr (expr_t, expr_t, insn_t) |
|
void | clear_expr (expr_t) |
|
unsigned | expr_dest_regno (expr_t) |
|
rtx | expr_dest_reg (expr_t) |
|
int | find_in_history_vect (vec< expr_history_def >, rtx, vinsn_t, bool) |
|
void | insert_in_history_vect (vec< expr_history_def > *, unsigned, enum local_trans_type, vinsn_t, vinsn_t, ds_t) |
|
void | mark_unavailable_targets (av_set_t, av_set_t, regset) |
|
int | speculate_expr (expr_t, ds_t) |
|
void | av_set_add (av_set_t *, expr_t) |
|
void | av_set_iter_remove (av_set_iterator *) |
|
expr_t | av_set_lookup (av_set_t, vinsn_t) |
|
expr_t | merge_with_other_exprs (av_set_t *, av_set_iterator *, expr_t) |
|
bool | av_set_is_in_p (av_set_t, vinsn_t) |
|
av_set_t | av_set_copy (av_set_t) |
|
void | av_set_union_and_clear (av_set_t *, av_set_t *, insn_t) |
|
void | av_set_union_and_live (av_set_t *, av_set_t *, regset, regset, insn_t) |
|
void | av_set_clear (av_set_t *) |
|
void | av_set_leave_one_nonspec (av_set_t *) |
|
expr_t | av_set_element (av_set_t, int) |
|
void | av_set_substract_cond_branches (av_set_t *) |
|
void | av_set_split_usefulness (av_set_t, int, int) |
|
void | av_set_code_motion_filter (av_set_t *, av_set_t) |
|
void | sel_save_haifa_priorities (void) |
|
void | sel_init_global_and_expr (bb_vec_t) |
|
void | sel_finish_global_and_expr (void) |
|
regset | compute_live (insn_t) |
|
bool | register_unavailable_p (regset, rtx) |
|
void | sel_clear_has_dependence (void) |
|
ds_t | has_dependence_p (expr_t, insn_t, ds_t **) |
|
int | tick_check_p (expr_t, deps_t, fence_t) |
|
bool | lhs_of_insn_equals_to_dest_p (insn_t, rtx) |
|
bool | insn_eligible_for_subst_p (insn_t) |
|
void | get_dest_and_mode (rtx, rtx *, machine_mode *) |
|
bool | bookkeeping_can_be_created_if_moved_through_p (insn_t) |
|
bool | sel_remove_insn (insn_t, bool, bool) |
|
bool | bb_header_p (insn_t) |
|
void | sel_init_invalid_data_sets (insn_t) |
|
bool | insn_at_boundary_p (insn_t) |
|
bool | sel_bb_head_p (insn_t) |
|
bool | sel_bb_end_p (insn_t) |
|
basic_block | fallthru_bb_of_jump (const rtx_insn *) |
|
void | sel_init_bbs (bb_vec_t) |
|
void | sel_finish_bbs (void) |
|
struct succs_info * | compute_succs_info (insn_t, short) |
|
void | free_succs_info (struct succs_info *) |
|
bool | sel_insn_has_single_succ_p (insn_t, int) |
|
bool | sel_num_cfg_preds_gt_1 (insn_t) |
|
int | get_seqno_by_preds (rtx_insn *) |
|
bool | bb_ends_ebb_p (basic_block) |
|
bool | in_same_ebb_p (insn_t, insn_t) |
|
bool | tidy_control_flow (basic_block, bool) |
|
void | free_bb_note_pool (void) |
|
void | purge_empty_blocks (void) |
|
basic_block | sel_split_edge (edge) |
|
basic_block | sel_create_recovery_block (insn_t) |
|
bool | sel_redirect_edge_and_branch (edge, basic_block) |
|
void | sel_redirect_edge_and_branch_force (edge, basic_block) |
|
void | sel_init_pipelining (void) |
|
void | sel_finish_pipelining (void) |
|
void | sel_sched_region (int) |
|
loop_p | get_loop_nest_for_rgn (unsigned int) |
|
bool | considered_for_pipelining_p (class loop *) |
|
void | make_region_from_loop_preheader (vec< basic_block > *&) |
|
void | sel_add_loop_preheaders (bb_vec_t *) |
|
bool | sel_is_loop_preheader_p (basic_block) |
|
void | clear_outdated_rtx_info (basic_block) |
|
void | free_data_sets (basic_block) |
|
void | exchange_data_sets (basic_block, basic_block) |
|
void | copy_data_sets (basic_block, basic_block) |
|
void | sel_register_cfg_hooks (void) |
|
void | sel_unregister_cfg_hooks (void) |
|
rtx_insn * | create_insn_rtx_from_pattern (rtx, rtx) |
|
vinsn_t | create_vinsn_from_insn_rtx (rtx_insn *, bool) |
|
rtx_insn * | create_copy_of_insn_rtx (rtx) |
|
void | change_vinsn_in_expr (expr_t, vinsn_t) |
|
void | init_lv_sets (void) |
|
void | free_lv_sets (void) |
|
void | setup_nop_and_exit_insns (void) |
|
void | free_nop_and_exit_insns (void) |
|
void | free_data_for_scheduled_insn (insn_t) |
|
void | setup_nop_vinsn (void) |
|
void | free_nop_vinsn (void) |
|
void | sel_set_sched_flags (void) |
|
void | sel_setup_sched_infos (void) |
|
void | alloc_sched_pools (void) |
|
void | free_sched_pools (void) |
|
Collect all loop exits recursively, skipping empty BBs between them.
E.g. if BB is a loop header which has several loop exits,
traverse all of them and if any of them turns out to be another loop header
(after skipping empty BBs), add its loop exits to the resulting vector
as well.
References current_loop_nest, EDGE_COUNT, loop::exits, gcc_assert, get_all_loop_exits(), get_loop_exit_edges_unique_dests(), i, in_current_region_p(), inner_loop_header_p(), loop_depth(), basic_block_def::loop_father, loop_outer(), NULL, sel_bb_empty_or_nop_p(), single_succ(), basic_block_def::succs, and vNULL.
Referenced by _succ_iter_cond(), and get_all_loop_exits().