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,
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 int haifa_classify_insn (
const_rtx);
138extern void sel_find_rgns (
void);
139extern void sel_mark_hard_insn (
rtx);
141extern size_t dfa_state_size;
143extern void advance_state (
state_t);
145extern void setup_sched_dump (
void);
146extern void sched_init (
void);
147extern void sched_finish (
void);
149extern bool sel_insn_is_speculation_check (
rtx);
168extern signed char *ready_try;
169extern struct ready_list ready;
171extern int max_issue (
struct ready_list *,
int,
state_t,
bool,
int *);
173extern void ebb_compute_jump_reg_dependencies (
rtx,
regset);
191typedef unsigned int ds_t;
192#define BITS_PER_DEP_STATUS HOST_BITS_PER_INT
195typedef unsigned int dw_t;
197extern enum reg_note ds_to_dk (ds_t);
198extern ds_t dk_to_ds (
enum reg_note);
204struct dep_replacement
225 struct dep_replacement *
replace;
245#define UNKNOWN_DEP_COST ((int) ((unsigned int) -1 << 19))
247typedef struct _dep dep_def;
248typedef dep_def *dep_t;
250#define DEP_PRO(D) ((D)->pro)
251#define DEP_CON(D) ((D)->con)
252#define DEP_TYPE(D) ((D)->type)
253#define DEP_STATUS(D) ((D)->status)
254#define DEP_COST(D) ((D)->cost)
255#define DEP_NONREG(D) ((D)->nonreg)
256#define DEP_MULTIPLE(D) ((D)->multiple)
257#define DEP_REPLACE(D) ((D)->replace)
264extern void sd_debug_dep (dep_t);
268typedef struct _dep_node *dep_node_t;
278 struct _dep_link *next;
285 struct _dep_link **prev_nextp;
287typedef struct _dep_link *dep_link_t;
289#define DEP_LINK_NODE(N) ((N)->node)
290#define DEP_LINK_NEXT(N) ((N)->next)
291#define DEP_LINK_PREV_NEXTP(N) ((N)->prev_nextp)
297#define DEP_LINK_DEP(N) (DEP_NODE_DEP (DEP_LINK_NODE (N)))
298#define DEP_LINK_PRO(N) (DEP_PRO (DEP_LINK_DEP (N)))
299#define DEP_LINK_CON(N) (DEP_CON (DEP_LINK_DEP (N)))
300#define DEP_LINK_TYPE(N) (DEP_TYPE (DEP_LINK_DEP (N)))
301#define DEP_LINK_STATUS(N) (DEP_STATUS (DEP_LINK_DEP (N)))
312typedef struct _deps_list *deps_list_t;
314#define DEPS_LIST_FIRST(L) ((L)->first)
315#define DEPS_LIST_N_LINKS(L) ((L)->n_links)
415 struct _dep_link back;
421 struct _dep_link forw;
424#define DEP_NODE_BACK(N) (&(N)->back)
425#define DEP_NODE_DEP(N) (&(N)->dep)
426#define DEP_NODE_FORW(N) (&(N)->forw)
431enum reg_pending_barrier_mode
494 int pending_read_list_length;
497 int pending_write_list_length;
502 int pending_flush_length;
537 enum post_call_group in_post_call_group_p;
554 bool last_logue_was_epilogue;
564 struct deps_reg *reg_last;
571 enum reg_pending_barrier_mode last_reg_pending_barrier;
578typedef class deps_desc *deps_t;
585struct haifa_sched_info
589 void (*init_ready_list) (void);
594 bool (*schedule_more_p) (void);
600 ds_t (*new_ready) (
rtx_insn *, ds_t);
609 const char *(*print_insn) (
const rtx_insn *, int);
626 unsigned int queue_must_finish_empty:1;
629 int sched_max_insns_priority;
635 void (*add_remove_insn) (
rtx_insn *, int);
639 void (*begin_schedule_ready) (
rtx_insn *insn);
655 void *(*save_state) (void);
658 void (*restore_state) (
void *);
678 dw_t data_weakness_cutoff;
682 int control_weakness_cutoff;
687typedef struct spec_info_def *spec_info_t;
689extern spec_info_t spec_info;
695extern enum sched_pressure_algorithm sched_pressure;
699extern enum reg_class *sched_regno_pressure_class;
704struct _haifa_deps_insn_data
713 unsigned int has_internal_dep;
723 deps_list_t hard_back_deps;
727 deps_list_t spec_back_deps;
731 deps_list_t forw_deps;
735 deps_list_t resolved_back_deps;
740 deps_list_t resolved_forw_deps;
755 unsigned int reverse_cond : 1;
758 unsigned int cant_move : 1;
764#define INCREASE_BITS 8
768struct reg_pressure_data
771 unsigned int clobber_increase : INCREASE_BITS;
774 unsigned int set_increase : INCREASE_BITS;
777 unsigned int unused_set_increase : INCREASE_BITS;
779 int change : INCREASE_BITS;
790 struct reg_use_data *next_regno_use;
792 struct reg_use_data *next_insn_use;
805 struct reg_set_data *next_insn_set;
808enum autopref_multipass_data_status {
810 AUTOPREF_MULTIPASS_DATA_IRRELEVANT = -2,
812 AUTOPREF_MULTIPASS_DATA_UNINITIALIZED = -1,
815 AUTOPREF_MULTIPASS_DATA_NORMAL = 0,
818 AUTOPREF_MULTIPASS_DATA_DONT_DELAY = 1
822struct autopref_multipass_data_
831 enum autopref_multipass_data_status status;
833typedef struct autopref_multipass_data_ autopref_multipass_data_def;
834typedef autopref_multipass_data_def *autopref_multipass_data_t;
836struct _haifa_insn_data
875 signed char priority_status;
879 unsigned int fed_by_spec_load : 1;
880 unsigned int is_load_insn : 1;
883 unsigned int feeds_backtrack_insn : 1;
888 unsigned int shadow_p : 1;
892 unsigned int must_recompute_spec : 1;
916 struct reg_pressure_data *reg_pressure;
922 int *max_reg_pressure;
925 struct reg_use_data *reg_use_list;
928 struct reg_set_data *reg_set_list;
931 int reg_pressure_excess_cost_change;
935 int rfs_debug_orig_order;
942 autopref_multipass_data_def autopref_multipass_data[2];
945typedef struct _haifa_insn_data haifa_insn_data_def;
946typedef haifa_insn_data_def *haifa_insn_data_t;
951#define HID(INSN) (&h_i_d[INSN_UID (INSN)])
955#define INSN_PRIORITY(INSN) (HID (INSN)->priority)
956#define INSN_FUSION_PRIORITY(INSN) (HID (INSN)->fusion_priority)
957#define INSN_REG_PRESSURE(INSN) (HID (INSN)->reg_pressure)
958#define INSN_MAX_REG_PRESSURE(INSN) (HID (INSN)->max_reg_pressure)
959#define INSN_REG_USE_LIST(INSN) (HID (INSN)->reg_use_list)
960#define INSN_REG_SET_LIST(INSN) (HID (INSN)->reg_set_list)
961#define INSN_REG_PRESSURE_EXCESS_COST_CHANGE(INSN) \
962 (HID (INSN)->reg_pressure_excess_cost_change)
963#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
964#define INSN_MODEL_INDEX(INSN) (HID (INSN)->model_index)
965#define INSN_AUTOPREF_MULTIPASS_DATA(INSN) \
966 (HID (INSN)->autopref_multipass_data)
968typedef struct _haifa_deps_insn_data haifa_deps_insn_data_def;
969typedef haifa_deps_insn_data_def *haifa_deps_insn_data_t;
974#define HDID(INSN) (&h_d_i_d[INSN_LUID (INSN)])
975#define INSN_DEP_COUNT(INSN) (HDID (INSN)->dep_count)
976#define HAS_INTERNAL_DEP(INSN) (HDID (INSN)->has_internal_dep)
977#define INSN_FORW_DEPS(INSN) (HDID (INSN)->forw_deps)
978#define INSN_RESOLVED_BACK_DEPS(INSN) (HDID (INSN)->resolved_back_deps)
979#define INSN_RESOLVED_FORW_DEPS(INSN) (HDID (INSN)->resolved_forw_deps)
980#define INSN_HARD_BACK_DEPS(INSN) (HDID (INSN)->hard_back_deps)
981#define INSN_SPEC_BACK_DEPS(INSN) (HDID (INSN)->spec_back_deps)
982#define INSN_CACHED_COND(INSN) (HDID (INSN)->cond)
983#define INSN_REVERSE_COND(INSN) (HDID (INSN)->reverse_cond)
984#define INSN_COND_DEPS(INSN) (HDID (INSN)->cond_deps)
985#define CANT_MOVE(INSN) (HDID (INSN)->cant_move)
986#define CANT_MOVE_BY_LUID(LUID) (h_d_i_d[LUID].cant_move)
989#define INSN_PRIORITY(INSN) (HID (INSN)->priority)
990#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
991#define INSN_PRIORITY_KNOWN(INSN) (INSN_PRIORITY_STATUS (INSN) > 0)
992#define TODO_SPEC(INSN) (HID (INSN)->todo_spec)
993#define DONE_SPEC(INSN) (HID (INSN)->done_spec)
994#define CHECK_SPEC(INSN) (HID (INSN)->check_spec)
995#define RECOVERY_BLOCK(INSN) (HID (INSN)->recovery_block)
996#define ORIG_PAT(INSN) (HID (INSN)->orig_pat)
997#define PREDICATED_PAT(INSN) (HID (INSN)->predicated_pat)
1000#define IS_SPECULATION_CHECK_P(INSN) \
1001 (sel_sched_p () ? sel_insn_is_speculation_check (INSN) : RECOVERY_BLOCK (INSN) != NULL)
1005#define IS_SPECULATION_SIMPLE_CHECK_P(INSN) \
1006 (RECOVERY_BLOCK (INSN) == EXIT_BLOCK_PTR_FOR_FN (cfun))
1012#define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \
1013 (RECOVERY_BLOCK (INSN) != NULL \
1014 && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR_FOR_FN (cfun))
1062#define BITS_PER_DEP_WEAK ((BITS_PER_DEP_STATUS - 8) / 4)
1065#define DEP_WEAK_MASK ((1 << BITS_PER_DEP_WEAK) - 1)
1072#define MAX_DEP_WEAK (DEP_WEAK_MASK - 1)
1077#define MIN_DEP_WEAK 1
1083#define NO_DEP_WEAK (MAX_DEP_WEAK + MIN_DEP_WEAK)
1087#define UNCERTAIN_DEP_WEAK (MAX_DEP_WEAK - MAX_DEP_WEAK / 4)
1090enum SPEC_TYPES_OFFSETS {
1091 BEGIN_DATA_BITS_OFFSET = 0,
1092 BE_IN_DATA_BITS_OFFSET = BEGIN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
1093 BEGIN_CONTROL_BITS_OFFSET = BE_IN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
1094 BE_IN_CONTROL_BITS_OFFSET = BEGIN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK
1104#define BEGIN_DATA (((ds_t) DEP_WEAK_MASK) << BEGIN_DATA_BITS_OFFSET)
1110#define BE_IN_DATA (((ds_t) DEP_WEAK_MASK) << BE_IN_DATA_BITS_OFFSET)
1114#define BEGIN_CONTROL (((ds_t) DEP_WEAK_MASK) << BEGIN_CONTROL_BITS_OFFSET)
1120#define BE_IN_CONTROL (((ds_t) DEP_WEAK_MASK) << BE_IN_CONTROL_BITS_OFFSET)
1123#define BEGIN_SPEC (BEGIN_DATA | BEGIN_CONTROL)
1124#define DATA_SPEC (BEGIN_DATA | BE_IN_DATA)
1125#define CONTROL_SPEC (BEGIN_CONTROL | BE_IN_CONTROL)
1126#define SPECULATIVE (DATA_SPEC | CONTROL_SPEC)
1127#define BE_IN_SPEC (BE_IN_DATA | BE_IN_CONTROL)
1130#define FIRST_SPEC_TYPE BEGIN_DATA
1131#define LAST_SPEC_TYPE BE_IN_CONTROL
1132#define SPEC_TYPE_SHIFT BITS_PER_DEP_WEAK
1137#define DEP_TRUE (((ds_t) 1) << (BE_IN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK))
1138#define DEP_OUTPUT (DEP_TRUE << 1)
1139#define DEP_ANTI (DEP_OUTPUT << 1)
1140#define DEP_CONTROL (DEP_ANTI << 1)
1142#define DEP_TYPES (DEP_TRUE | DEP_OUTPUT | DEP_ANTI | DEP_CONTROL)
1147#define HARD_DEP (DEP_CONTROL << 1)
1158#define DEP_POSTPONED (HARD_DEP << 1)
1161#define DEP_CANCELLED (DEP_POSTPONED << 1)
1166enum DEPS_ADJUST_RESULT {
1186 DO_SPECULATION = USE_DEPS_LIST << 1,
1187 DO_BACKTRACKING = DO_SPECULATION << 1,
1188 DO_PREDICATION = DO_BACKTRACKING << 1,
1189 DONT_BREAK_DEPENDENCIES = DO_PREDICATION << 1,
1190 SCHED_RGN = DONT_BREAK_DEPENDENCIES << 1,
1191 SCHED_EBB = SCHED_RGN << 1,
1193 NEW_BBS = SCHED_EBB << 1,
1194 SEL_SCHED = NEW_BBS << 1
1197enum SPEC_SCHED_FLAGS {
1198 COUNT_SPEC_IN_CRITICAL_PATH = 1,
1199 SEL_SCHED_SPEC_DONT_CHECK_CONTROL = COUNT_SPEC_IN_CRITICAL_PATH << 1
1202#define NOTE_NOT_BB_P(NOTE) (NOTE_P (NOTE) && (NOTE_KIND (NOTE) \
1203 != NOTE_INSN_BASIC_BLOCK))
1205extern FILE *sched_dump;
1206extern int sched_verbose;
1208extern spec_info_t spec_info;
1209extern bool haifa_recovery_bb_ever_added_p;
1274 TRAP_FREE = 0, IFREE = 1, PFREE_CANDIDATE = 2,
1275 PRISKY_CANDIDATE = 3, IRISKY = 4, TRAP_RISKY = 5
1278#define WORST_CLASS(class1, class2) \
1279((class1 > class2) ? class1 : class2)
1286#define HAIFA_INLINE __inline
1289struct sched_deps_info_def
1294 void (*compute_jump_reg_dependencies) (
rtx,
regset);
1300 void (*finish_insn) (void);
1303 void (*start_lhs) (
rtx);
1306 void (*finish_lhs) (void);
1309 void (*start_rhs) (
rtx);
1312 void (*finish_rhs) (void);
1315 void (*note_reg_set) (int);
1318 void (*note_reg_clobber) (int);
1321 void (*note_reg_use) (int);
1325 void (*note_mem_dep) (
rtx mem1,
rtx mem2,
rtx_insn *insn2, ds_t ds);
1328 void (*note_dep) (
rtx_insn *, ds_t ds);
1334 unsigned int use_cselib : 1;
1338 unsigned int use_deps_list : 1;
1342 unsigned int generate_spec_deps : 1;
1345extern struct sched_deps_info_def *sched_deps_info;
1349extern rtx sched_get_reverse_condition_uncached (
const rtx_insn *);
1350extern bool sched_insns_conditions_mutex_p (
const rtx_insn *,
1352extern bool sched_insn_is_legitimate_for_speculation_p (
const rtx_insn *, ds_t);
1355extern void init_deps (
class deps_desc *,
bool);
1356extern void init_deps_reg_last (
class deps_desc *);
1357extern void free_deps (
class deps_desc *);
1358extern void init_deps_global (
void);
1359extern void finish_deps_global (
void);
1360extern void deps_analyze_insn (
class deps_desc *,
rtx_insn *);
1361extern void remove_from_deps (
class deps_desc *,
rtx_insn *);
1362extern void init_insn_reg_pressure_info (
rtx_insn *);
1365extern dw_t get_dep_weak (ds_t, ds_t);
1366extern ds_t set_dep_weak (ds_t, ds_t, dw_t);
1367extern dw_t estimate_dep_weak (
rtx,
rtx);
1368extern ds_t ds_merge (ds_t, ds_t);
1369extern ds_t ds_full_merge (ds_t, ds_t,
rtx,
rtx);
1370extern ds_t ds_max_merge (ds_t, ds_t);
1371extern dw_t ds_weak (ds_t);
1372extern ds_t ds_get_speculation_types (ds_t);
1373extern ds_t ds_get_max_dep_weak (ds_t);
1375extern void sched_deps_init (
bool);
1376extern void sched_deps_finish (
void);
1378extern void haifa_note_reg_set (
int);
1379extern void haifa_note_reg_clobber (
int);
1380extern void haifa_note_reg_use (
int);
1382extern void maybe_extend_reg_info_p (
void);
1384extern void deps_start_bb (
class deps_desc *,
rtx_insn *);
1385extern enum reg_note ds_to_dt (ds_t);
1387extern bool deps_pools_are_empty_p (
void);
1389extern void extend_dependency_caches (
int,
bool);
1391extern void debug_ds (ds_t);
1395extern void initialize_live_range_shrinkage (
void);
1396extern void finish_live_range_shrinkage (
void);
1397extern void sched_init_region_reg_pressure_info (
void);
1398extern void free_global_sched_pressure_data (
void);
1399extern int haifa_classify_insn (
const_rtx);
1404extern int insn_sched_cost (
rtx_insn *);
1405extern int dep_cost_1 (dep_t, dw_t);
1406extern int dep_cost (dep_t);
1412extern int cycle_issued_insns;
1413extern int issue_rate;
1414extern int dfa_lookahead;
1416extern int autopref_multipass_dfa_lookahead_guard (
rtx_insn *,
int);
1418extern rtx_insn *ready_element (
struct ready_list *,
int);
1419extern rtx_insn **ready_lastpos (
struct ready_list *);
1422extern void sched_extend_ready_list (
int);
1423extern void sched_finish_ready_list (
void);
1424extern void sched_change_pattern (
rtx,
rtx);
1425extern int sched_speculate_insn (
rtx_insn *, ds_t,
rtx *);
1431extern rtx_insn *get_ready_element (
int);
1432extern int number_in_ready (
void);
1437extern void schedule_ebbs_init (
void);
1438extern void schedule_ebbs_finish (
void);
1453 unsigned int dont_calc_deps : 1;
1455 unsigned int has_real_ebb : 1;
1458extern int nr_regions;
1459extern region *rgn_table;
1460extern int *rgn_bb_table;
1461extern int *block_to_bb;
1462extern int *containing_rgn;
1467#define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0)
1469#define RGN_NR_BLOCKS(rgn) (rgn_table[rgn].rgn_nr_blocks)
1470#define RGN_BLOCKS(rgn) (rgn_table[rgn].rgn_blocks)
1471#define RGN_DONT_CALC_DEPS(rgn) (rgn_table[rgn].dont_calc_deps)
1472#define RGN_HAS_REAL_EBB(rgn) (rgn_table[rgn].has_real_ebb)
1473#define BLOCK_TO_BB(block) (block_to_bb[block])
1474#define CONTAINING_RGN(block) (containing_rgn[block])
1477extern int *ebb_head;
1478#define BB_TO_BLOCK(ebb) (rgn_bb_table[ebb_head[ebb]])
1479#define EBB_FIRST_BB(ebb) BASIC_BLOCK_FOR_FN (cfun, BB_TO_BLOCK (ebb))
1480#define EBB_LAST_BB(ebb) \
1481 BASIC_BLOCK_FOR_FN (cfun, rgn_bb_table[ebb_head[ebb + 1] - 1])
1482#define INSN_BB(INSN) (BLOCK_TO_BB (BLOCK_NUM (INSN)))
1484extern int current_nr_blocks;
1485extern int current_blocks;
1486extern int target_bb;
1487extern bool sched_no_dce;
1489extern void set_modulo_params (
int,
int,
int,
int);
1492extern void discard_delay_pairs_above (
int);
1493extern void free_delay_pairs (
void);
1494extern void add_delay_dependencies (
rtx_insn *);
1495extern bool sched_is_disabled_for_current_region_p (
void);
1496extern void sched_rgn_init (
bool);
1497extern void sched_rgn_finish (
void);
1498extern void rgn_setup_region (
int);
1499extern void sched_rgn_compute_dependencies (
int);
1500extern void sched_rgn_local_init (
int);
1501extern void sched_rgn_local_finish (
void);
1502extern void sched_rgn_local_free (
void);
1503extern void extend_regions (
void);
1504extern void rgn_make_new_region_out_of_new_block (
basic_block);
1506extern void compute_priorities (
void);
1507extern void increase_insn_priority (
rtx_insn *,
int);
1508extern void debug_rgn_dependencies (
int);
1510extern void dump_rgn_dependencies_dot (FILE *);
1511extern void dump_rgn_dependencies_dot (
const char *);
1513extern void free_rgn_deps (
void);
1515extern void extend_rgns (
int *,
int *,
sbitmap,
int *);
1516extern void deps_join (
class deps_desc *,
class deps_desc *);
1518extern void rgn_setup_common_sched_info (
void);
1519extern void rgn_setup_sched_infos (
void);
1521extern void debug_regions (
void);
1522extern void debug_region (
int);
1523extern void dump_region_dot (FILE *,
int);
1524extern void dump_region_dot_file (
const char *,
int);
1526extern void haifa_sched_init (
void);
1527extern void haifa_sched_finish (
void);
1537#define SD_LIST_NONE (0)
1540#define SD_LIST_HARD_BACK (1)
1543#define SD_LIST_SPEC_BACK (2)
1546#define SD_LIST_FORW (4)
1549#define SD_LIST_RES_BACK (8)
1552#define SD_LIST_RES_FORW (16)
1554#define SD_LIST_BACK (SD_LIST_HARD_BACK | SD_LIST_SPEC_BACK)
1557typedef int sd_list_types_def;
1559extern void sd_next_list (
const_rtx, sd_list_types_def *, deps_list_t *,
bool *);
1565 sd_list_types_def types;
1581typedef struct _sd_iterator sd_iterator_def;
1593inline sd_iterator_def
1594sd_iterator_start (
rtx insn, sd_list_types_def types)
1597 static dep_link_t null_link =
NULL;
1603 i.linkp = &null_link;
1606 i.resolved_p =
false;
1613sd_iterator_cond (sd_iterator_def *it_ptr, dep_t *dep_ptr)
1617 dep_link_t
link = *it_ptr->linkp;
1621 *dep_ptr = DEP_LINK_DEP (
link);
1626 sd_list_types_def types = it_ptr->types;
1628 if (types != SD_LIST_NONE)
1633 sd_next_list (it_ptr->insn,
1634 &it_ptr->types, &list, &it_ptr->resolved_p);
1638 it_ptr->linkp = &DEPS_LIST_FIRST (list);
1651sd_iterator_next (sd_iterator_def *it_ptr)
1653 it_ptr->linkp = &DEP_LINK_NEXT (*it_ptr->linkp);
1657#define FOR_EACH_DEP(INSN, LIST_TYPES, ITER, DEP) \
1658 for ((ITER) = sd_iterator_start ((INSN), (LIST_TYPES)); \
1659 sd_iterator_cond (&(ITER), &(DEP)); \
1660 sd_iterator_next (&(ITER)))
1662#define IS_DISPATCH_ON 1
1664#define DISPATCH_VIOLATION 3
1665#define FITS_DISPATCH_WINDOW 4
1666#define DISPATCH_INIT 5
1667#define ADD_TO_DISPATCH_WINDOW 6
1669extern int sd_lists_size (
const_rtx, sd_list_types_def);
1670extern bool sd_lists_empty_p (
const_rtx, sd_list_types_def);
1671extern void sd_init_insn (
rtx_insn *);
1672extern void sd_finish_insn (
rtx_insn *);
1673extern dep_t sd_find_dep_between (
rtx,
rtx,
bool);
1674extern void sd_add_dep (dep_t,
bool);
1675extern enum DEPS_ADJUST_RESULT sd_add_or_update_dep (dep_t,
bool);
1676extern void sd_resolve_dep (sd_iterator_def);
1677extern void sd_unresolve_dep (sd_iterator_def);
1679extern void sd_delete_dep (sd_iterator_def);
1680extern void sd_debug_lists (
rtx, sd_list_types_def);
1682extern int dep_list_size (
rtx_insn *, sd_list_types_def);
1685#define FUSION_MAX_PRIORITY (INT_MAX)
1686extern bool sched_fusion;
rtx_note * bb_note(basic_block bb)
Definition cfgrtl.cc:686
struct basic_block_def * basic_block
Definition coretypes.h:355
struct rtx_def * rtx
Definition coretypes.h:57
class edge_def * edge
Definition coretypes.h:352
static rtx * implicit_sets
Definition cprop.cc:106
static type_p type(options_p *optsp, bool nested)
Definition gengtype-parse.cc:883
static struct filedep ** last
Definition genmddeps.cc:33
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
replace
Definition gdbhooks.py:658
wide_int mask(unsigned int, bool, unsigned int)
Definition wide-int.h:3992
i
Definition poly-int.h:776
rtx offset
Definition postreload.cc:691
static int tick[FIRST_PSEUDO_REGISTER]
Definition regrename.cc:100
bitmap regset
Definition regset.h:38
reg_note
Definition rtl.h:1630
Definition basic-block.h:117
Definition collect2.cc:175
Definition genautomata.cc:669
#define NULL
Definition system.h:50
#define BOOL_BITFIELD
Definition system.h:896
#define bool
Definition system.h:886
static void add_dependence(temp_expr_table *tab, int version, tree var)
Definition tree-ssa-ter.cc:319