int spills_needed;
size_t cand_idx;
ir_node *n;
+ ir_node *value;
- /* mode_T nodes define several values at once. Count them */
- if (get_irn_mode(node) == mode_T) {
- const ir_edge_t *edge;
-
- foreach_out_edge(node, edge) {
- const ir_node *proj = get_edge_src_irn(edge);
-
- if (arch_irn_consider_in_reg_alloc(cls, proj)) {
- ++values_defined;
- }
- }
- } else if (arch_irn_consider_in_reg_alloc(cls, node)) {
+ be_foreach_definition(node, cls, value,
++values_defined;
- }
+ );
/* we need registers for the non-live argument values */
arity = get_irn_arity(node);
*/
static void remove_defs(ir_node *node, ir_nodeset_t *nodeset)
{
+ ir_node *value;
/* You should better break out of your loop when hitting the first phi
* function. */
assert(!is_Phi(node) && "liveness_transfer produces invalid results for phi nodes");
- if (get_irn_mode(node) == mode_T) {
- const ir_edge_t *edge;
-
- foreach_out_edge(node, edge) {
- const ir_node *proj = get_edge_src_irn(edge);
-
- if (arch_irn_consider_in_reg_alloc(cls, proj)) {
- ir_nodeset_remove(nodeset, proj);
- }
- }
- }
-
- if (arch_irn_consider_in_reg_alloc(cls, node)) {
- ir_nodeset_remove(nodeset, node);
- }
+ be_foreach_definition(node, cls, value,
+ ir_nodeset_remove(nodeset, value);
+ );
}
static void add_uses(ir_node *node, ir_nodeset_t *nodeset)
ir_nodeset_destroy(&live_nodes);
}
-static void be_spill_daemel(be_irg_t *birg, const arch_register_class_t *new_cls)
+static void be_spill_daemel(ir_graph *irg, const arch_register_class_t *new_cls)
{
- ir_graph *irg = be_get_birg_irg(birg);
- n_regs = new_cls->n_regs - be_put_ignore_regs(birg, new_cls, NULL);
+ n_regs = new_cls->n_regs - be_put_ignore_regs(irg, new_cls, NULL);
if (n_regs == 0)
return;
- be_liveness_assure_sets(be_assure_liveness(birg));
+ be_liveness_assure_sets(be_assure_liveness(irg));
- spill_env = be_new_spill_env(birg);
+ spill_env = be_new_spill_env(irg);
cls = new_cls;
- lv = be_get_birg_liveness(birg);
+ lv = be_get_irg_liveness(irg);
spilled_nodes = bitset_malloc(get_irg_last_idx(irg));
DBG((dbg, LEVEL_1, "*** RegClass %s\n", cls->name));