do not pad return after a fall-through Jmp
[libfirm] / ir / be / beschednormal.c
index a7d5d86..00f2a9e 100644 (file)
@@ -38,7 +38,7 @@
 
 
 // XXX there is no one time init for schedulers
-//#define NORMAL_DBG
+#define NORMAL_DBG
 
 
 static int must_be_scheduled(const ir_node* const irn)
@@ -133,13 +133,15 @@ static int normal_tree_cost(ir_node* irn)
        flag_and_cost* fc    = get_irn_link(irn);
        ir_node*       block = get_nodes_block(irn);
        int            arity = get_irn_arity(irn);
-       int            cost_max  = 0;
-       int            count_max = 0;
        int            n_res;
        int            cost;
        int            n_op_res = 0;
        int            i;
 
+       if (is_Proj(irn)) {
+               return normal_tree_cost(get_Proj_pred(irn));
+       }
+
        if (fc == NULL) {
                irn_cost_pair* costs;
                int            i;
@@ -158,41 +160,24 @@ static int normal_tree_cost(ir_node* irn)
                                cost = 1;
                        } else {
                                flag_and_cost* pred_fc;
+                               ir_node*       real_pred;
 
                                cost = normal_tree_cost(pred);
                                if (be_is_Barrier(pred)) cost = 1; // XXX hack: the barrier causes all users to have a reguse of #regs
-                               pred_fc = get_irn_link(pred);
+                               real_pred = (is_Proj(pred) ? get_Proj_pred(pred) : pred);
+                               pred_fc = get_irn_link(real_pred);
                                pred_fc->no_root = 1;
 #if defined NORMAL_DBG
-                               ir_fprintf(stderr, "%+F says that %+F is no root\n", irn, pred);
+                               ir_fprintf(stderr, "%+F says that %+F is no root\n", irn, real_pred);
 #endif
                        }
 
                        costs[i].irn  = pred;
                        costs[i].cost = cost;
-
-                       if (cost > cost_max) {
-                               cost_max  = cost;
-                               count_max = 1;
-                       } else if (cost == cost_max) {
-                               ++count_max;
-                       }
                }
 
                qsort(costs, arity, sizeof(*costs), cost_cmp);
                set_irn_link(irn, fc);
-       } else {
-               irn_cost_pair* costs = fc->costs;
-               int            i;
-
-               if (arity > 0) {
-                       cost_max = costs[0].cost;
-
-                       for (i = 0; i < arity; ++i) {
-                               if (costs[i].cost < cost_max) break;
-                               ++count_max;
-                       }
-               }
        }
 
        cost = 0;