bessaconstr: Factorise common code.
[libfirm] / ir / be / bespillbelady.c
index 4b3f9b7..6b249f5 100644 (file)
@@ -482,11 +482,6 @@ static loc_t to_take_or_not_to_take(ir_node* first, ir_node *node,
        loc.node    = node;
        loc.spilled = false;
 
-       if (!arch_irn_consider_in_reg_alloc(cls, node)) {
-               loc.time = USES_INFINITY;
-               return loc;
-       }
-
        /* We have to keep nonspillable nodes in the workingset */
        if (arch_get_irn_flags(skip_Proj_const(node)) & arch_irn_flags_dont_spill) {
                loc.time = 0;
@@ -803,7 +798,6 @@ static void process_block(ir_node *block)
        new_vals = new_workset();
 
        sched_foreach(block, irn) {
-               int i, arity;
                assert(workset_get_length(ws) <= n_regs);
 
                /* Phis are no real instr (see insert_starters()) */
@@ -817,20 +811,16 @@ static void process_block(ir_node *block)
 
                /* allocate all values _used_ by this instruction */
                workset_clear(new_vals);
-               for (i = 0, arity = get_irn_arity(irn); i < arity; ++i) {
-                       ir_node *in = get_irn_n(irn, i);
-                       if (!arch_irn_consider_in_reg_alloc(cls, in))
-                               continue;
-
+               be_foreach_use(irn, cls, in_req_, in, in_req,
                        /* (note that "spilled" is irrelevant here) */
                        workset_insert(new_vals, in, false);
-               }
+               );
                displace(new_vals, 1);
 
                /* allocate all values _defined_ by this instruction */
                workset_clear(new_vals);
-               be_foreach_definition(irn, cls, value,
-                       assert(req_->width == 1);
+               be_foreach_definition(irn, cls, value, req,
+                       assert(req->width == 1);
                        workset_insert(new_vals, value, false);
                );
                displace(new_vals, 0);