X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespilldaemel.c;h=88cf06a3e3635eb2c3b3130f379248fb414d1d7f;hb=1376e7ac003f5d209b72056c62798cbb6d928de3;hp=e3bfdbd6fa7335dcc7a1ffa4a16b81f6dd87d79a;hpb=05401c2cdac9e8d0b444b701ed4fb7374d125fde;p=libfirm diff --git a/ir/be/bespilldaemel.c b/ir/be/bespilldaemel.c index e3bfdbd6f..88cf06a3e 100644 --- a/ir/be/bespilldaemel.c +++ b/ir/be/bespilldaemel.c @@ -50,7 +50,6 @@ #include "bearch.h" #include "be_t.h" #include "benode.h" -#include "beirg.h" #include "belive.h" DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;) @@ -140,23 +139,20 @@ static unsigned get_value_width(const ir_node *node) */ static void do_spilling(ir_nodeset_t *live_nodes, ir_node *node) { - size_t values_defined = 0; - ir_node *value; + size_t values_defined = 0; be_foreach_definition(node, cls, value, + (void)value; assert(req_->width >= 1); values_defined += req_->width; ); /* we need registers for the non-live argument values */ size_t free_regs_needed = 0; - int arity = get_irn_arity(node); - for (int i = 0; i < arity; ++i) { - ir_node *pred = get_irn_n(node, i); - if (arch_irn_consider_in_reg_alloc(cls, pred) - && !ir_nodeset_contains(live_nodes, pred)) { - free_regs_needed += get_value_width(pred); + be_foreach_use(node, cls, in_req_, use, pred_req_, + if (!ir_nodeset_contains(live_nodes, use)) { + free_regs_needed += get_value_width(use); } - } + ); /* we can reuse all reloaded values for the defined values, but we might * need even more registers */ @@ -204,6 +200,7 @@ static void do_spilling(ir_nodeset_t *live_nodes, ir_node *node) /* make sure the node is not an argument of the instruction */ bool is_use = false; + int arity = get_irn_arity(node); for (int i = 0; i < arity; ++i) { ir_node *in = get_irn_n(node, i); if (in == cand_node) { @@ -228,7 +225,6 @@ static void remove_defs(ir_node *node, ir_nodeset_t *nodeset) /* You must break out of your loop when hitting the first phi function. */ assert(!is_Phi(node)); - ir_node *value; be_foreach_definition(node, cls, value, ir_nodeset_remove(nodeset, value); );