- do_spilling(env, &live_nodes, node, block);
+ /* calculate how many of the phis need to be spilled */
+ regpressure = ir_nodeset_size(&live_nodes) + n_phi_values_spilled;
+ phi_spills_needed = regpressure - n_regs;
+ DBG((dbg, LEVEL_3, "Regpressure before phis: %d phispills: %d\n",
+ regpressure, phi_spills_needed));
+
+ /* spill as many phis as needed */
+ /* TODO: we should really estimate costs of the phi spill as well...
+ * and preferably spill phis with lower costs... */
+ sched_foreach(block, node) {
+ if (!is_Phi(node))
+ break;
+ if (phi_spills_needed <= 0)
+ break;
+
+ if (bitset_is_set(spilled_nodes, get_irn_idx(node))) {
+ be_spill_phi(spill_env, node);
+ --phi_spills_needed;
+ }
+ }
+ assert(phi_spills_needed <= 0);