give Bad nodes a mode
[libfirm] / ir / be / beschedregpress.c
index a1bfeed..42e0abe 100644 (file)
@@ -188,21 +188,19 @@ static void *reg_pressure_block_init(void *graph_env, ir_node *bl)
        * Collect usage statistics.
        */
        sched_foreach(bl, irn) {
-               if (to_appear_in_schedule(irn)) {
-                       int i, n;
+               int i, n;
+               if (is_Proj(irn)
+                               || (arch_irn_get_flags(irn) & arch_irn_flags_not_scheduled))
+                       continue;
 
-                       for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
-                               //ir_node *op = get_irn_n(irn, i);
-                               if (to_appear_in_schedule(irn)) {
-                                       usage_stats_t *us = get_or_set_usage_stats(env, irn);
+               for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
+                       usage_stats_t *us = get_or_set_usage_stats(env, irn);
 #if 0 /* Liveness is not computed here! */
-                                       if (is_live_end(bl, op))
-                                               us->uses_in_block = 99999;
-                                       else
+                       if (is_live_end(bl, op))
+                               us->uses_in_block = 99999;
+                       else
 #endif
-                                               us->uses_in_block++;
-                               }
-                       }
+                               us->uses_in_block++;
                }
        }
 
@@ -247,8 +245,11 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn)
        for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
                ir_node *op = get_irn_n(irn, i);
 
-               if (to_appear_in_schedule(op))
-                       sum += compute_max_hops(env, op);
+               if (is_Proj(op)
+                   || (arch_irn_get_flags(op) & arch_irn_flags_not_scheduled))
+                       continue;
+
+               sum += compute_max_hops(env, op);
        }
 
        sum += get_result_hops_sum(env, irn);
@@ -256,14 +257,12 @@ static inline int reg_pr_costs(reg_pressure_selector_env_t *env, ir_node *irn)
        return sum;
 }
 
-static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set,
-                                    ir_nodeset_t *live_set)
+static ir_node *reg_pressure_select(void *block_env, ir_nodeset_t *ready_set)
 {
        ir_nodeset_iterator_t iter;
        reg_pressure_selector_env_t *env = (reg_pressure_selector_env_t*)block_env;
        ir_node *irn, *res     = NULL;
        int curr_cost          = INT_MAX;
-       (void) live_set;
 
        assert(ir_nodeset_size(ready_set) > 0);
 
@@ -312,7 +311,7 @@ static void sched_reg_pressure(ir_graph *irg)
        be_list_sched_graph(irg, &reg_pressure_selector);
 }
 
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_regpress);
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched_regpress)
 void be_init_sched_regpress(void)
 {
        be_register_scheduler("regpress", sched_reg_pressure);