X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedtrace.c;h=8c84bfb9bbe28a7cd65c229b687c1478887a7466;hb=2cb67d89aafac7737bece78b5837d3d48fb528bc;hp=0308ebf9c7343859780db41594662f84c7e802ed;hpb=b482d88d58ce6517bbb6597aa04ffa86ade5f2c9;p=libfirm diff --git a/ir/be/beschedtrace.c b/ir/be/beschedtrace.c index 0308ebf9c..8c84bfb9b 100644 --- a/ir/be/beschedtrace.c +++ b/ir/be/beschedtrace.c @@ -28,7 +28,7 @@ #include #include "iredges_t.h" - +#include "beirg.h" #include "besched.h" #include "belistsched.h" #include "benode.h" @@ -61,10 +61,7 @@ typedef struct trace_env { */ static ir_node *get_nodeset_node(const ir_nodeset_t *nodeset) { - ir_nodeset_iterator_t iter; - - ir_nodeset_iterator_init(&iter, nodeset); - return ir_nodeset_iterator_next(&iter); + return ir_nodeset_first(nodeset); } /** @@ -251,11 +248,11 @@ static sched_timestep_t latency(trace_env_t *env, ir_node *pred, int pred_cycle, if (is_Proj(curr)) return 0; +#if 0 /* predecessors Proj's must be skipped */ if (is_Proj(pred)) pred = get_Proj_pred(pred); -#if 0 if (env->selector->latency) return env->selector->latency(env->selector_env, pred, pred_cycle, curr, curr_cycle); #endif @@ -269,7 +266,6 @@ static sched_timestep_t latency(trace_env_t *env, ir_node *pred, int pred_cycle, static int get_num_successors(ir_node *irn) { int sum = 0; - const ir_edge_t *edge; if (get_irn_mode(irn) == mode_T) { /* for mode_T nodes: count the users of all Projs */ @@ -311,7 +307,6 @@ static int get_reg_difference(trace_env_t *env, ir_node *irn) if (get_irn_mode(irn) == mode_T) { /* mode_T nodes: num out regs == num Projs with mode datab */ - const ir_edge_t *edge; foreach_out_edge(irn, edge) { ir_node *proj = get_edge_src_irn(edge); if (mode_is_datab(get_irn_mode(proj))) @@ -390,8 +385,6 @@ static void descent(ir_node *root, ir_node *block, ir_node **list, trace_env_t * */ static int is_root(ir_node *root, ir_node *block) { - const ir_edge_t *edge; - foreach_out_edge(root, edge) { ir_node *succ = get_edge_src_irn(edge); @@ -414,7 +407,6 @@ static void trace_preprocess_block(trace_env_t *env, ir_node *block) ir_node *root = NULL, *preord = NULL; ir_node *curr, *irn; int cur_pos; - const ir_edge_t *edge; /* First step: Find the root set. */ foreach_out_edge(block, edge) { @@ -523,12 +515,11 @@ static trace_env_t *trace_init(ir_graph *irg) int nn = get_irg_last_idx(irg); env->curr_time = 0; - env->sched_info = NEW_ARR_F(trace_irn_t, nn); + env->sched_info = NEW_ARR_FZ(trace_irn_t, nn); env->liveness = be_get_irg_liveness(irg); FIRM_DBG_REGISTER(env->dbg, "firm.be.sched.trace"); be_assure_live_chk(irg); - memset(env->sched_info, 0, nn * sizeof(*(env->sched_info))); return env; } @@ -549,9 +540,6 @@ static void trace_free(void *data) */ static ir_node *basic_selection(ir_nodeset_t *ready_set) { - ir_node *irn = NULL; - ir_nodeset_iterator_t iter; - /* assure that branches and constants are executed last */ foreach_ir_nodeset(ready_set, irn, iter) { if (!is_cfop(irn)) { @@ -560,9 +548,7 @@ static ir_node *basic_selection(ir_nodeset_t *ready_set) } /* at last: schedule branches */ - irn = get_nodeset_node(ready_set); - - return irn; + return get_nodeset_node(ready_set); } /** @@ -572,9 +558,7 @@ static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set) { trace_env_t *env = (trace_env_t*)block_env; ir_nodeset_t mcands, ecands; - ir_nodeset_iterator_t iter; sched_timestep_t max_delay = 0; - ir_node *irn; /* calculate the max delay of all candidates */ foreach_ir_nodeset(ready_set, irn, iter) { @@ -596,6 +580,7 @@ static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set) } /* select a node */ + ir_node *irn; if (ir_nodeset_size(&mcands) == 1) { irn = get_nodeset_node(&mcands); DB((env->dbg, LEVEL_3, "\tirn = %+F, mcand = 1, max_delay = %u\n", irn, max_delay)); @@ -658,11 +643,10 @@ static void sched_muchnik(ir_graph *irg) static ir_node *heuristic_select(void *block_env, ir_nodeset_t *ns) { trace_env_t *trace_env = (trace_env_t*)block_env; - ir_node *irn, *cand = NULL; + ir_node *cand = NULL; int max_prio = INT_MIN; int cur_prio = INT_MIN; int reg_fact; - ir_nodeset_iterator_t iter; /* Note: register pressure calculation needs an overhaul, you need correct * tracking for each register class indidually and weight by each class int cur_pressure = ir_nodeset_size(lv); */