void be_liveness_compute_sets(be_lv_t *lv)
{
- ir_node **nodes;
int i;
int n;
obstack_init(&lv->obst);
n = get_irg_last_idx(lv->irg);
- nodes = NEW_ARR_F(ir_node *, n);
- memset(nodes, 0, sizeof(nodes[0]) * n);
+ ir_node **const nodes = NEW_ARR_FZ(ir_node*, n);
/* inserting the variables sorted by their ID is probably
* more efficient since the binary sorted set insertion
* function. */
assert(!is_Phi(node) && "liveness_transfer produces invalid results for phi nodes");
- be_foreach_definition(node, cls, value,
+ be_foreach_definition(node, cls, value, req,
ir_nodeset_remove(nodeset, value);
);
- int arity = get_irn_arity(node);
- for (int i = 0; i < arity; ++i) {
- const arch_register_req_t *in_req = arch_get_irn_register_req_in(node, i);
- if (in_req->cls != cls)
- continue;
- ir_node *op = get_irn_n(node, i);
- const arch_register_req_t *op_req = arch_get_irn_register_req(op);
- if (arch_register_req_is(op_req, ignore))
- continue;
+ be_foreach_use(node, cls, in_req, op, op_req,
ir_nodeset_insert(nodeset, op);
- }
+ );
}