X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeschedtrace.c;h=1e38a7accd2e018e172d32eda2c472d74420227c;hb=b36dd117b8e841f1a3c78588036aed050ffd94e4;hp=3c1865c6d809ade72e11e8cb3f4e3d24efa28a86;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/be/beschedtrace.c b/ir/be/beschedtrace.c index 3c1865c6d..1e38a7acc 100644 --- a/ir/be/beschedtrace.c +++ b/ir/be/beschedtrace.c @@ -1,20 +1,6 @@ /* - * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. - * * This file is part of libFirm. - * - * This file may be distributed and/or modified under the terms of the - * GNU General Public License version 2 as published by the Free Software - * Foundation and appearing in the file LICENSE.GPL included in the - * packaging of this file. - * - * Licensees holding valid libFirm Professional Edition licenses may use - * this file in accordance with the libFirm Commercial License. - * Agreement provided with the Software. - * - * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE. + * Copyright (C) 2012 University of Karlsruhe. */ /** @@ -28,7 +14,7 @@ #include #include "iredges_t.h" - +#include "beirg.h" #include "besched.h" #include "belistsched.h" #include "benode.h" @@ -61,10 +47,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); } /** @@ -229,10 +212,6 @@ static sched_timestep_t exectime(trace_env_t *env, ir_node *n) (void) env; if (be_is_Keep(n) || is_Proj(n)) return 0; -#if 0 - if (env->selector->exectime) - return env->selector->exectime(env->selector_env, n); -#endif return 1; } @@ -251,15 +230,6 @@ static sched_timestep_t latency(trace_env_t *env, ir_node *pred, int pred_cycle, if (is_Proj(curr)) return 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 - return 1; } @@ -269,7 +239,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 +280,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 +358,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 +380,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 +488,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->liveness = be_liveness(irg); + 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_liveness_assure_chk(env->liveness); - memset(env->sched_info, 0, nn * sizeof(*(env->sched_info))); + be_assure_live_chk(irg); return env; } @@ -540,7 +504,6 @@ static trace_env_t *trace_init(ir_graph *irg) static void trace_free(void *data) { trace_env_t *env = (trace_env_t*)data; - be_liveness_free(env->liveness); DEL_ARR_F(env->sched_info); free(env); } @@ -550,9 +513,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)) { @@ -561,9 +521,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); } /** @@ -573,9 +531,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) { @@ -597,6 +553,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)); @@ -659,11 +616,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); */