Fixed a bug concerning recursion.
[libfirm] / ir / be / beschedtrace.c
index a90b508..35af5a2 100644 (file)
@@ -391,6 +391,8 @@ static void trace_preprocess_block(trace_env_t *env, ir_node *block) {
        foreach_out_edge(block, edge) {
                ir_node *succ = get_edge_src_irn(edge);
 
+               if (is_Anchor(succ))
+                       continue;
                if (is_root(succ, block)) {
                        mark_root_node(env, succ);
                        set_irn_link(succ, root);
@@ -492,6 +494,7 @@ static trace_env_t *trace_init(const arch_env_t *arch_env, ir_graph *irg) {
        env->liveness   = be_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)));
 
        return env;
@@ -538,6 +541,7 @@ static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set, ir_node
        ir_nodeset_iterator_t iter;
        sched_timestep_t max_delay = 0;
        ir_node *irn;
+       (void) live_set;
 
        /* calculate the max delay of all candidates */
        foreach_ir_nodeset(ready_set, irn, iter) {
@@ -651,7 +655,7 @@ static ir_node *heuristic_select(void *block_env, ir_nodeset_t *ns, ir_nodeset_t
                        int sign  = rdiff < 0;
                        int chg   = (rdiff < 0 ? -rdiff : rdiff) << PRIO_CHG_PRESS;
 
-                       //reg_fact = chg << cur_pressure;
+                       /* reg_fact = chg << cur_pressure; */
                        reg_fact = chg * cur_pressure;
                        if (reg_fact < chg)
                                reg_fact = INT_MAX - 2;