static void add_backarc_to_ddg (ddg_ptr, ddg_edge_ptr);
static void add_backarc_to_scc (ddg_scc_ptr, ddg_edge_ptr);
static void add_scc_to_ddg (ddg_all_sccs_ptr, ddg_scc_ptr);
-static void create_ddg_dependence (ddg_ptr, ddg_node_ptr, ddg_node_ptr, rtx);
+static void create_ddg_dependence (ddg_ptr, ddg_node_ptr, ddg_node_ptr, dep_t);
static void create_ddg_dep_no_link (ddg_ptr, ddg_node_ptr, ddg_node_ptr,
dep_type, dep_data_type, int);
static ddg_edge_ptr create_ddg_edge (ddg_node_ptr, ddg_node_ptr, dep_type,
a ddg_edge and adds it to the given DDG. */
static void
create_ddg_dependence (ddg_ptr g, ddg_node_ptr src_node,
- ddg_node_ptr dest_node, rtx link)
+ ddg_node_ptr dest_node, dep_t link)
{
ddg_edge_ptr e;
int latency, distance = 0;
gcc_assert (link);
/* Note: REG_DEP_ANTI applies to MEM ANTI_DEP as well!! */
- if (REG_NOTE_KIND (link) == REG_DEP_ANTI)
+ if (DEP_KIND (link) == REG_DEP_ANTI)
t = ANTI_DEP;
- else if (REG_NOTE_KIND (link) == REG_DEP_OUTPUT)
+ else if (DEP_KIND (link) == REG_DEP_OUTPUT)
t = OUTPUT_DEP;
- latency = insn_cost (src_node->insn, link, dest_node->insn);
+ latency = dep_cost (link);
e = create_ddg_edge (src_node, dest_node, t, dt, latency, distance);
{
ddg_edge_ptr e;
int l;
- rtx link = alloc_INSN_LIST (to->insn, NULL_RTX);
+ enum reg_note dep_kind;
+ struct _dep _dep, *dep = &_dep;
if (d_t == ANTI_DEP)
- PUT_REG_NOTE_KIND (link, REG_DEP_ANTI);
+ dep_kind = REG_DEP_ANTI;
else if (d_t == OUTPUT_DEP)
- PUT_REG_NOTE_KIND (link, REG_DEP_OUTPUT);
+ dep_kind = REG_DEP_OUTPUT;
+ else
+ {
+ gcc_assert (d_t == TRUE_DEP);
+
+ dep_kind = REG_DEP_TRUE;
+ }
- l = insn_cost (from->insn, link, to->insn);
- free_INSN_LIST_node (link);
+ init_dep (dep, from->insn, to->insn, dep_kind);
+
+ l = dep_cost (dep);
e = create_ddg_edge (from, to, d_t, d_dt, l, distance);
if (distance > 0)
add_deps_for_def (ddg_ptr g, struct df *df, struct df_ref *rd)
{
int regno = DF_REF_REGNO (rd);
- struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (df, g->bb);
+ struct df_ru_bb_info *bb_info = DF_RU_BB_INFO (df, g->bb);
struct df_link *r_use;
int use_before_def = false;
rtx def_insn = DF_REF_INSN (rd);
/* We are interested in uses of this BB. */
if (BLOCK_FOR_INSN (use->insn) == g->bb)
- add_deps_for_use (g, df,use);
+ add_deps_for_use (g, df, use);
}
}
int i;
/* Hold the dependency analysis state during dependency calculations. */
struct deps tmp_deps;
- rtx head, tail, link;
+ rtx head, tail;
+ dep_link_t link;
/* Build the dependence information, using the sched_analyze function. */
init_deps_global ();
init_deps (&tmp_deps);
/* Do the intra-block data dependence analysis for the given block. */
- get_block_head_tail (g->bb->index, &head, &tail);
+ get_ebb_head_tail (g->bb, g->bb, &head, &tail);
sched_analyze (&tmp_deps, head, tail);
/* Build intra-loop data dependencies using the scheduler dependency
if (! INSN_P (dest_node->insn))
continue;
- for (link = LOG_LINKS (dest_node->insn); link; link = XEXP (link, 1))
+ FOR_EACH_DEP_LINK (link, INSN_BACK_DEPS (dest_node->insn))
{
- ddg_node_ptr src_node = get_node_of_insn (g, XEXP (link, 0));
+ dep_t dep = DEP_LINK_DEP (link);
+ ddg_node_ptr src_node = get_node_of_insn (g, DEP_PRO (dep));
if (!src_node)
continue;
- add_forw_dep (dest_node->insn, link);
- create_ddg_dependence (g, src_node, dest_node,
- INSN_DEPEND (src_node->insn));
+ add_forw_dep (link);
+ create_ddg_dependence (g, src_node, dest_node, dep);
}
/* If this insn modifies memory, add an edge to all insns that access
{
char dep_c;
- switch (e->type) {
+ switch (e->type)
+ {
case OUTPUT_DEP :
dep_c = 'O';
break;
break;
default:
dep_c = 'T';
- }
+ }
fprintf (file, " [%d -(%c,%d,%d)-> %d] ", INSN_UID (e->src->insn),
dep_c, e->latency, e->distance, INSN_UID (e->dest->insn));