21#ifndef GCC_SCHED_INT_H
22#define GCC_SCHED_INT_H
27enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
28 SCHED_SMS_PASS, SCHED_SEL_PASS };
31enum sched_pressure_algorithm
34 SCHED_PRESSURE_WEIGHTED,
42extern void sched_init_bbs (
void);
44extern void sched_extend_luids (
void);
45extern void sched_init_insn_luid (
rtx_insn *);
46extern void sched_init_luids (
const bb_vec_t &);
47extern void sched_finish_luids (
void);
49extern void sched_extend_target (
void);
51extern void haifa_init_h_i_d (
const bb_vec_t &);
52extern void haifa_finish_h_i_d (
void);
55struct common_sched_info_def
63 void (*fix_recovery_cfg) (int, int, int);
79 int (*luid_for_non_insn) (
rtx);
82 enum sched_pass_id_t sched_pass_id;
85extern struct common_sched_info_def *common_sched_info;
87extern const struct common_sched_info_def haifa_common_sched_info;
93 return common_sched_info->sched_pass_id == SCHED_SEL_PASS;
97extern int get_rgn_sched_max_insns_priority (
void);
100extern void sel_add_to_insn_priority (
rtx_insn *,
int);
104extern int sched_emulate_haifa_p;
109#define INSN_LUID(INSN) (sched_luids[INSN_UID (INSN)])
110#define LUID_BY_UID(UID) (sched_luids[UID])
112#define SET_INSN_LUID(INSN, LUID) \
113(sched_luids[INSN_UID (INSN)] = (LUID))
116extern int sched_max_luid;
118extern int insn_luid (
rtx);
127extern void sched_insns_init (
rtx);
128extern void sched_insns_finish (
void);
130extern void *xrecalloc (
void *,
size_t,
size_t,
size_t);
132extern void reemit_notes (
rtx_insn *);
135extern void sel_find_rgns (
void);
136extern void sel_mark_hard_insn (
rtx_insn *);
138extern size_t dfa_state_size;
140extern void advance_state (
state_t);
142extern void setup_sched_dump (
void);
143extern void sched_init (
void);
144extern void sched_finish (
void);
146extern bool sel_insn_is_speculation_check (
rtx_insn *);
165extern signed char *ready_try;
166extern struct ready_list ready;
168extern int max_issue (
struct ready_list *,
int,
state_t,
bool,
int *);
170extern void ebb_compute_jump_reg_dependencies (
rtx_insn *,
regset);
188typedef unsigned int ds_t;
189#define BITS_PER_DEP_STATUS HOST_BITS_PER_INT
192typedef unsigned int dw_t;
194extern enum reg_note ds_to_dk (ds_t);
195extern ds_t dk_to_ds (
enum reg_note);
201struct dep_replacement
222 struct dep_replacement *
replace;
242#define UNKNOWN_DEP_COST ((int) ((unsigned int) -1 << 19))
244typedef struct _dep dep_def;
245typedef dep_def *dep_t;
247#define DEP_PRO(D) ((D)->pro)
248#define DEP_CON(D) ((D)->con)
249#define DEP_TYPE(D) ((D)->type)
250#define DEP_STATUS(D) ((D)->status)
251#define DEP_COST(D) ((D)->cost)
252#define DEP_NONREG(D) ((D)->nonreg)
253#define DEP_MULTIPLE(D) ((D)->multiple)
254#define DEP_REPLACE(D) ((D)->replace)
261extern void sd_debug_dep (dep_t);
265typedef struct _dep_node *dep_node_t;
275 struct _dep_link *next;
282 struct _dep_link **prev_nextp;
284typedef struct _dep_link *dep_link_t;
286#define DEP_LINK_NODE(N) ((N)->node)
287#define DEP_LINK_NEXT(N) ((N)->next)
288#define DEP_LINK_PREV_NEXTP(N) ((N)->prev_nextp)
294#define DEP_LINK_DEP(N) (DEP_NODE_DEP (DEP_LINK_NODE (N)))
295#define DEP_LINK_PRO(N) (DEP_PRO (DEP_LINK_DEP (N)))
296#define DEP_LINK_CON(N) (DEP_CON (DEP_LINK_DEP (N)))
297#define DEP_LINK_TYPE(N) (DEP_TYPE (DEP_LINK_DEP (N)))
298#define DEP_LINK_STATUS(N) (DEP_STATUS (DEP_LINK_DEP (N)))
309typedef struct _deps_list *deps_list_t;
311#define DEPS_LIST_FIRST(L) ((L)->first)
312#define DEPS_LIST_N_LINKS(L) ((L)->n_links)
412 struct _dep_link back;
418 struct _dep_link forw;
421#define DEP_NODE_BACK(N) (&(N)->back)
422#define DEP_NODE_DEP(N) (&(N)->dep)
423#define DEP_NODE_FORW(N) (&(N)->forw)
428enum reg_pending_barrier_mode
448 rtx_insn_list *implicit_sets;
449 rtx_insn_list *control_uses;
450 rtx_insn_list *clobbers;
469 rtx_insn_list *pending_read_insns;
474 rtx_expr_list *pending_read_mems;
477 rtx_insn_list *pending_write_insns;
480 rtx_expr_list *pending_write_mems;
483 rtx_insn_list *pending_jump_insns;
491 int pending_read_list_length;
494 int pending_write_list_length;
499 int pending_flush_length;
510 rtx_insn_list *last_pending_memory_flush;
515 rtx_insn_list *last_function_call;
521 rtx_insn_list *last_function_call_may_noreturn;
527 rtx_insn_list *sched_before_next_call;
530 rtx_insn_list *sched_before_next_jump;
534 enum post_call_group in_post_call_group_p;
537 rtx_insn *last_debug_insn;
540 rtx_insn *last_args_size;
546 rtx_insn_list *last_prologue;
547 rtx_insn_list *last_epilogue;
551 bool last_logue_was_epilogue;
561 struct deps_reg *reg_last;
578 rtx_insn_list *pending_barriers;
587 enum reg_pending_barrier_mode last_reg_pending_barrier;
594typedef class deps_desc *deps_t;
601struct haifa_sched_info
605 void (*init_ready_list) (void);
608 bool (*can_schedule_ready_p) (rtx_insn *);
610 bool (*schedule_more_p) (void);
616 ds_t (*new_ready) (rtx_insn *, ds_t);
620 int (*rank) (rtx_insn *, rtx_insn *);
625 const char *(*print_insn) (
const rtx_insn *, int);
628 bool (*contributes_to_priority) (rtx_insn *, rtx_insn *);
632 bool (*insn_finishes_block_p) (rtx_insn *);
635 rtx_insn *prev_head, *next_tail;
639 rtx_insn *head, *tail;
642 unsigned int queue_must_finish_empty:1;
645 int sched_max_insns_priority;
651 void (*add_remove_insn) (rtx_insn *, int);
655 void (*begin_schedule_ready) (rtx_insn *insn);
661 void (*begin_move_insn) (rtx_insn *insn, rtx_insn *last);
671 void *(*save_state) (void);
674 void (*restore_state) (
void *);
694 dw_t data_weakness_cutoff;
698 int control_weakness_cutoff;
703typedef struct spec_info_def *spec_info_t;
705extern spec_info_t spec_info;
711extern enum sched_pressure_algorithm sched_pressure;
715extern enum reg_class *sched_regno_pressure_class;
720struct _haifa_deps_insn_data
729 unsigned int has_internal_dep;
739 deps_list_t hard_back_deps;
743 deps_list_t spec_back_deps;
747 deps_list_t forw_deps;
751 deps_list_t resolved_back_deps;
756 deps_list_t resolved_forw_deps;
767 rtx_insn_list *cond_deps;
771 unsigned int reverse_cond : 1;
774 unsigned int cant_move : 1;
780#define INCREASE_BITS 8
784struct reg_pressure_data
787 unsigned int clobber_increase : INCREASE_BITS;
790 unsigned int set_increase : INCREASE_BITS;
793 unsigned int unused_set_increase : INCREASE_BITS;
795 int change : INCREASE_BITS;
806 struct reg_use_data *next_regno_use;
808 struct reg_use_data *next_insn_use;
821 struct reg_set_data *next_insn_set;
824enum autopref_multipass_data_status {
826 AUTOPREF_MULTIPASS_DATA_IRRELEVANT = -2,
828 AUTOPREF_MULTIPASS_DATA_UNINITIALIZED = -1,
831 AUTOPREF_MULTIPASS_DATA_NORMAL = 0,
834 AUTOPREF_MULTIPASS_DATA_DONT_DELAY = 1
838struct autopref_multipass_data_
847 enum autopref_multipass_data_status status;
849typedef struct autopref_multipass_data_ autopref_multipass_data_def;
850typedef autopref_multipass_data_def *autopref_multipass_data_t;
852struct _haifa_insn_data
891 signed char priority_status;
895 unsigned int fed_by_spec_load : 1;
896 unsigned int is_load_insn : 1;
899 unsigned int feeds_backtrack_insn : 1;
904 unsigned int shadow_p : 1;
908 unsigned int must_recompute_spec : 1;
932 struct reg_pressure_data *reg_pressure;
938 int *max_reg_pressure;
941 struct reg_use_data *reg_use_list;
944 struct reg_set_data *reg_set_list;
947 int reg_pressure_excess_cost_change;
951 int rfs_debug_orig_order;
958 autopref_multipass_data_def autopref_multipass_data[2];
961typedef struct _haifa_insn_data haifa_insn_data_def;
962typedef haifa_insn_data_def *haifa_insn_data_t;
967#define HID(INSN) (&h_i_d[INSN_UID (INSN)])
971#define INSN_PRIORITY(INSN) (HID (INSN)->priority)
972#define INSN_FUSION_PRIORITY(INSN) (HID (INSN)->fusion_priority)
973#define INSN_REG_PRESSURE(INSN) (HID (INSN)->reg_pressure)
974#define INSN_MAX_REG_PRESSURE(INSN) (HID (INSN)->max_reg_pressure)
975#define INSN_REG_USE_LIST(INSN) (HID (INSN)->reg_use_list)
976#define INSN_REG_SET_LIST(INSN) (HID (INSN)->reg_set_list)
977#define INSN_REG_PRESSURE_EXCESS_COST_CHANGE(INSN) \
978 (HID (INSN)->reg_pressure_excess_cost_change)
979#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
980#define INSN_MODEL_INDEX(INSN) (HID (INSN)->model_index)
981#define INSN_AUTOPREF_MULTIPASS_DATA(INSN) \
982 (HID (INSN)->autopref_multipass_data)
984typedef struct _haifa_deps_insn_data haifa_deps_insn_data_def;
985typedef haifa_deps_insn_data_def *haifa_deps_insn_data_t;
990#define HDID(INSN) (&h_d_i_d[INSN_LUID (INSN)])
991#define INSN_DEP_COUNT(INSN) (HDID (INSN)->dep_count)
992#define HAS_INTERNAL_DEP(INSN) (HDID (INSN)->has_internal_dep)
993#define INSN_FORW_DEPS(INSN) (HDID (INSN)->forw_deps)
994#define INSN_RESOLVED_BACK_DEPS(INSN) (HDID (INSN)->resolved_back_deps)
995#define INSN_RESOLVED_FORW_DEPS(INSN) (HDID (INSN)->resolved_forw_deps)
996#define INSN_HARD_BACK_DEPS(INSN) (HDID (INSN)->hard_back_deps)
997#define INSN_SPEC_BACK_DEPS(INSN) (HDID (INSN)->spec_back_deps)
998#define INSN_CACHED_COND(INSN) (HDID (INSN)->cond)
999#define INSN_REVERSE_COND(INSN) (HDID (INSN)->reverse_cond)
1000#define INSN_COND_DEPS(INSN) (HDID (INSN)->cond_deps)
1001#define CANT_MOVE(INSN) (HDID (INSN)->cant_move)
1002#define CANT_MOVE_BY_LUID(LUID) (h_d_i_d[LUID].cant_move)
1005#define INSN_PRIORITY(INSN) (HID (INSN)->priority)
1006#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
1007#define INSN_PRIORITY_KNOWN(INSN) (INSN_PRIORITY_STATUS (INSN) > 0)
1008#define TODO_SPEC(INSN) (HID (INSN)->todo_spec)
1009#define DONE_SPEC(INSN) (HID (INSN)->done_spec)
1010#define CHECK_SPEC(INSN) (HID (INSN)->check_spec)
1011#define RECOVERY_BLOCK(INSN) (HID (INSN)->recovery_block)
1012#define ORIG_PAT(INSN) (HID (INSN)->orig_pat)
1013#define PREDICATED_PAT(INSN) (HID (INSN)->predicated_pat)
1016#define IS_SPECULATION_CHECK_P(INSN) \
1017 (sel_sched_p () ? sel_insn_is_speculation_check (INSN) : RECOVERY_BLOCK (INSN) != NULL)
1021#define IS_SPECULATION_SIMPLE_CHECK_P(INSN) \
1022 (RECOVERY_BLOCK (INSN) == EXIT_BLOCK_PTR_FOR_FN (cfun))
1028#define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \
1029 (RECOVERY_BLOCK (INSN) != NULL \
1030 && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR_FOR_FN (cfun))
1078#define BITS_PER_DEP_WEAK ((BITS_PER_DEP_STATUS - 8) / 4)
1081#define DEP_WEAK_MASK ((1 << BITS_PER_DEP_WEAK) - 1)
1088#define MAX_DEP_WEAK (DEP_WEAK_MASK - 1)
1093#define MIN_DEP_WEAK 1
1099#define NO_DEP_WEAK (MAX_DEP_WEAK + MIN_DEP_WEAK)
1103#define UNCERTAIN_DEP_WEAK (MAX_DEP_WEAK - MAX_DEP_WEAK / 4)
1106enum SPEC_TYPES_OFFSETS {
1107 BEGIN_DATA_BITS_OFFSET = 0,
1108 BE_IN_DATA_BITS_OFFSET = BEGIN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
1109 BEGIN_CONTROL_BITS_OFFSET = BE_IN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
1110 BE_IN_CONTROL_BITS_OFFSET = BEGIN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK
1120#define BEGIN_DATA (((ds_t) DEP_WEAK_MASK) << BEGIN_DATA_BITS_OFFSET)
1126#define BE_IN_DATA (((ds_t) DEP_WEAK_MASK) << BE_IN_DATA_BITS_OFFSET)
1130#define BEGIN_CONTROL (((ds_t) DEP_WEAK_MASK) << BEGIN_CONTROL_BITS_OFFSET)
1136#define BE_IN_CONTROL (((ds_t) DEP_WEAK_MASK) << BE_IN_CONTROL_BITS_OFFSET)
1139#define BEGIN_SPEC (BEGIN_DATA | BEGIN_CONTROL)
1140#define DATA_SPEC (BEGIN_DATA | BE_IN_DATA)
1141#define CONTROL_SPEC (BEGIN_CONTROL | BE_IN_CONTROL)
1142#define SPECULATIVE (DATA_SPEC | CONTROL_SPEC)
1143#define BE_IN_SPEC (BE_IN_DATA | BE_IN_CONTROL)
1146#define FIRST_SPEC_TYPE BEGIN_DATA
1147#define LAST_SPEC_TYPE BE_IN_CONTROL
1148#define SPEC_TYPE_SHIFT BITS_PER_DEP_WEAK
1153#define DEP_TRUE (((ds_t) 1) << (BE_IN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK))
1154#define DEP_OUTPUT (DEP_TRUE << 1)
1155#define DEP_ANTI (DEP_OUTPUT << 1)
1156#define DEP_CONTROL (DEP_ANTI << 1)
1158#define DEP_TYPES (DEP_TRUE | DEP_OUTPUT | DEP_ANTI | DEP_CONTROL)
1163#define HARD_DEP (DEP_CONTROL << 1)
1174#define DEP_POSTPONED (HARD_DEP << 1)
1177#define DEP_CANCELLED (DEP_POSTPONED << 1)
1182enum DEPS_ADJUST_RESULT {
1202 DO_SPECULATION = USE_DEPS_LIST << 1,
1203 DO_BACKTRACKING = DO_SPECULATION << 1,
1204 DO_PREDICATION = DO_BACKTRACKING << 1,
1205 DONT_BREAK_DEPENDENCIES = DO_PREDICATION << 1,
1206 SCHED_RGN = DONT_BREAK_DEPENDENCIES << 1,
1207 SCHED_EBB = SCHED_RGN << 1,
1209 NEW_BBS = SCHED_EBB << 1,
1210 SEL_SCHED = NEW_BBS << 1
1213enum SPEC_SCHED_FLAGS {
1214 COUNT_SPEC_IN_CRITICAL_PATH = 1,
1215 SEL_SCHED_SPEC_DONT_CHECK_CONTROL = COUNT_SPEC_IN_CRITICAL_PATH << 1
1218#define NOTE_NOT_BB_P(NOTE) (NOTE_P (NOTE) && (NOTE_KIND (NOTE) \
1219 != NOTE_INSN_BASIC_BLOCK))
1221extern FILE *sched_dump;
1222extern int sched_verbose;
1224extern spec_info_t spec_info;
1225extern bool haifa_recovery_bb_ever_added_p;
1290 TRAP_FREE = 0, IFREE = 1, PFREE_CANDIDATE = 2,
1291 PRISKY_CANDIDATE = 3, IRISKY = 4, TRAP_RISKY = 5
1294#define WORST_CLASS(class1, class2) \
1295((class1 > class2) ? class1 : class2)
1302#define HAIFA_INLINE __inline
1305struct sched_deps_info_def
1310 void (*compute_jump_reg_dependencies) (rtx_insn *,
regset);
1313 void (*start_insn) (rtx_insn *);
1316 void (*finish_insn) (void);
1319 void (*start_lhs) (
rtx);
1322 void (*finish_lhs) (void);
1325 void (*start_rhs) (
rtx);
1328 void (*finish_rhs) (void);
1331 void (*note_reg_set) (int);
1334 void (*note_reg_clobber) (int);
1337 void (*note_reg_use) (int);
1341 void (*note_mem_dep) (
rtx mem1,
rtx mem2, rtx_insn *insn2, ds_t ds);
1344 void (*note_dep) (rtx_insn *, ds_t ds);
1350 unsigned int use_cselib : 1;
1354 unsigned int use_deps_list : 1;
1358 unsigned int generate_spec_deps : 1;
1361extern struct sched_deps_info_def *sched_deps_info;
1365extern rtx sched_get_reverse_condition_uncached (
const rtx_insn *);
1366extern bool sched_insns_conditions_mutex_p (
const rtx_insn *,
1368extern bool sched_insn_is_legitimate_for_speculation_p (
const rtx_insn *, ds_t);
1371extern void init_deps (
class deps_desc *,
bool);
1372extern struct deps_reg *deps_reg_last (
class deps_desc *,
unsigned int);
1373extern void init_deps_reg_last (
class deps_desc *);
1374extern void free_deps (
class deps_desc *);
1375extern void init_deps_global (
void);
1376extern void finish_deps_global (
void);
1377extern void deps_analyze_insn (
class deps_desc *,
rtx_insn *);
1378extern void remove_from_deps (
class deps_desc *,
rtx_insn *);
1379extern void init_insn_reg_pressure_info (
rtx_insn *);
1382extern dw_t get_dep_weak (ds_t, ds_t);
1383extern ds_t set_dep_weak (ds_t, ds_t, dw_t);
1384extern dw_t estimate_dep_weak (
rtx,
rtx);
1385extern ds_t ds_merge (ds_t, ds_t);
1386extern ds_t ds_full_merge (ds_t, ds_t,
rtx,
rtx);
1387extern ds_t ds_max_merge (ds_t, ds_t);
1388extern dw_t ds_weak (ds_t);
1389extern ds_t ds_get_speculation_types (ds_t);
1390extern ds_t ds_get_max_dep_weak (ds_t);
1392extern void sched_deps_init (
bool);
1393extern void sched_deps_finish (
void);
1395extern void haifa_note_reg_set (
int);
1396extern void haifa_note_reg_clobber (
int);
1397extern void haifa_note_reg_use (
int);
1399extern void maybe_extend_reg_info_p (
void);
1401extern void deps_start_bb (
class deps_desc *,
rtx_insn *);
1402extern enum reg_note ds_to_dt (ds_t);
1404extern bool deps_pools_are_empty_p (
void);
1406extern void extend_dependency_caches (
int,
bool);
1408extern void debug_ds (ds_t);
1412extern void initialize_live_range_shrinkage (
void);
1413extern void finish_live_range_shrinkage (
void);
1414extern void sched_init_region_reg_pressure_info (
void);
1415extern void free_global_sched_pressure_data (
void);
1416extern int haifa_classify_insn (
const rtx_insn *);
1421extern int insn_sched_cost (
rtx_insn *);
1422extern int dep_cost_1 (dep_t, dw_t);
1423extern int dep_cost (dep_t);
1429extern int cycle_issued_insns;
1430extern int issue_rate;
1431extern int dfa_lookahead;
1433extern int autopref_multipass_dfa_lookahead_guard (
rtx_insn *,
int);
1435extern rtx_insn *ready_element (
struct ready_list *,
int);
1436extern rtx_insn **ready_lastpos (
struct ready_list *);
1439extern void sched_extend_ready_list (
int);
1440extern void sched_finish_ready_list (
void);
1441extern void sched_change_pattern (
rtx,
rtx);
1442extern int sched_speculate_insn (
rtx_insn *, ds_t,
rtx *);
1448extern rtx_insn *get_ready_element (
int);
1449extern int number_in_ready (
void);
1454extern void schedule_ebbs_init (
void);
1455extern void schedule_ebbs_finish (
void);
1470 unsigned int dont_calc_deps : 1;
1472 unsigned int has_real_ebb : 1;
1475extern int nr_regions;
1476extern region *rgn_table;
1477extern int *rgn_bb_table;
1478extern int *block_to_bb;
1479extern int *containing_rgn;
1484#define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0)
1486#define RGN_NR_BLOCKS(rgn) (rgn_table[rgn].rgn_nr_blocks)
1487#define RGN_BLOCKS(rgn) (rgn_table[rgn].rgn_blocks)
1488#define RGN_DONT_CALC_DEPS(rgn) (rgn_table[rgn].dont_calc_deps)
1489#define RGN_HAS_REAL_EBB(rgn) (rgn_table[rgn].has_real_ebb)
1490#define BLOCK_TO_BB(block) (block_to_bb[block])
1491#define CONTAINING_RGN(block) (containing_rgn[block])
1494extern int *ebb_head;
1495#define BB_TO_BLOCK(ebb) (rgn_bb_table[ebb_head[ebb]])
1496#define EBB_FIRST_BB(ebb) BASIC_BLOCK_FOR_FN (cfun, BB_TO_BLOCK (ebb))
1497#define EBB_LAST_BB(ebb) \
1498 BASIC_BLOCK_FOR_FN (cfun, rgn_bb_table[ebb_head[ebb + 1] - 1])
1499#define INSN_BB(INSN) (BLOCK_TO_BB (BLOCK_NUM (INSN)))
1501extern int current_nr_blocks;
1502extern int current_blocks;
1503extern int target_bb;
1504extern bool sched_no_dce;
1506extern void set_modulo_params (
int,
int,
int,
int);
1509extern void discard_delay_pairs_above (
int);
1510extern void free_delay_pairs (
void);
1511extern void add_delay_dependencies (
rtx_insn *);
1512extern bool sched_is_disabled_for_current_region_p (
void);
1513extern void sched_rgn_init (
bool);
1514extern void sched_rgn_finish (
void);
1515extern void rgn_setup_region (
int);
1516extern void sched_rgn_compute_dependencies (
int);
1517extern void sched_rgn_local_init (
int);
1518extern void sched_rgn_local_finish (
void);
1519extern void sched_rgn_local_free (
void);
1520extern void extend_regions (
void);
1521extern void rgn_make_new_region_out_of_new_block (
basic_block);
1523extern void compute_priorities (
void);
1524extern void increase_insn_priority (
rtx_insn *,
int);
1525extern void debug_rgn_dependencies (
int);
1527extern void dump_rgn_dependencies_dot (FILE *);
1528extern void dump_rgn_dependencies_dot (
const char *);
1530extern void free_rgn_deps (
void);
1532extern void extend_rgns (
int *,
int *,
sbitmap,
int *);
1533extern void deps_join (
class deps_desc *,
class deps_desc *);
1535extern void rgn_setup_common_sched_info (
void);
1536extern void rgn_setup_sched_infos (
void);
1538extern void debug_regions (
void);
1539extern void debug_region (
int);
1540extern void dump_region_dot (FILE *,
int);
1541extern void dump_region_dot_file (
const char *,
int);
1543extern void haifa_sched_init (
void);
1544extern void haifa_sched_finish (
void);
1554#define SD_LIST_NONE (0)
1557#define SD_LIST_HARD_BACK (1)
1560#define SD_LIST_SPEC_BACK (2)
1563#define SD_LIST_FORW (4)
1566#define SD_LIST_RES_BACK (8)
1569#define SD_LIST_RES_FORW (16)
1571#define SD_LIST_BACK (SD_LIST_HARD_BACK | SD_LIST_SPEC_BACK)
1574typedef int sd_list_types_def;
1576extern void sd_next_list (
const rtx_insn *, sd_list_types_def *,
1577 deps_list_t *,
bool *);
1583 sd_list_types_def types;
1599typedef struct _sd_iterator sd_iterator_def;
1611inline sd_iterator_def
1612sd_iterator_start (
rtx_insn *insn, sd_list_types_def types)
1615 static dep_link_t null_link =
NULL;
1621 i.linkp = &null_link;
1624 i.resolved_p =
false;
1631sd_iterator_cond (sd_iterator_def *it_ptr, dep_t *dep_ptr)
1635 dep_link_t
link = *it_ptr->linkp;
1639 *dep_ptr = DEP_LINK_DEP (
link);
1644 sd_list_types_def types = it_ptr->types;
1646 if (types != SD_LIST_NONE)
1651 sd_next_list (it_ptr->insn,
1652 &it_ptr->types, &list, &it_ptr->resolved_p);
1656 it_ptr->linkp = &DEPS_LIST_FIRST (list);
1669sd_iterator_next (sd_iterator_def *it_ptr)
1671 it_ptr->linkp = &DEP_LINK_NEXT (*it_ptr->linkp);
1675#define FOR_EACH_DEP(INSN, LIST_TYPES, ITER, DEP) \
1676 for ((ITER) = sd_iterator_start ((INSN), (LIST_TYPES)); \
1677 sd_iterator_cond (&(ITER), &(DEP)); \
1678 sd_iterator_next (&(ITER)))
1680#define IS_DISPATCH_ON 1
1682#define DISPATCH_VIOLATION 3
1683#define FITS_DISPATCH_WINDOW 4
1684#define DISPATCH_INIT 5
1685#define ADD_TO_DISPATCH_WINDOW 6
1687extern int sd_lists_size (
const rtx_insn *, sd_list_types_def);
1688extern bool sd_lists_empty_p (
const rtx_insn *, sd_list_types_def);
1689extern void sd_init_insn (
rtx_insn *);
1690extern void sd_finish_insn (
rtx_insn *);
1692extern void sd_add_dep (dep_t,
bool);
1693extern enum DEPS_ADJUST_RESULT sd_add_or_update_dep (dep_t,
bool);
1694extern void sd_resolve_dep (sd_iterator_def);
1695extern void sd_unresolve_dep (sd_iterator_def);
1697extern void sd_delete_dep (sd_iterator_def);
1698extern void sd_debug_lists (
rtx_insn *, sd_list_types_def);
1700extern int dep_list_size (
rtx_insn *, sd_list_types_def);
1703#define FUSION_MAX_PRIORITY (INT_MAX)
1704extern bool sched_fusion;
rtx_note * bb_note(basic_block bb)
Definition cfgrtl.cc:698
struct basic_block_def * basic_block
Definition coretypes.h:359
struct rtx_def * rtx
Definition coretypes.h:57
class edge_def * edge
Definition coretypes.h:356
struct simple_bitmap_def * sbitmap
Definition coretypes.h:54
struct state * state_t
Definition genautomata.cc:195
struct haifa_sched_info * current_sched_info
Definition haifa-sched.cc:900
HARD_REG_ELT_TYPE HARD_REG_SET
Definition hard-reg-set.h:47
const json::array_of_string_property flags
replace
Definition gdbhooks.py:717
type
Definition regenerate-attr-urls.py:207
void dump(const T &obj)
Definition dump.h:70
wide_int mask(unsigned int, bool, unsigned int)
Definition wide-int.h:3990
i
Definition poly-int.h:776
bitmap_head regset_head
Definition regset.h:35
bitmap regset
Definition regset.h:38
reg_note
Definition rtl.h:1646
#define NULL
Definition system.h:55
#define bool
Definition system.h:844