+ /* all ordinary nodes must be spilled */
+ DBG((raenv->dbg, LEVEL_2, " spilling %+F\n", irn));
+ spill = be_spill(raenv->aenv, irn);
+
+ /* remember the spill */
+ pset_insert_ptr(spills, spill);
+ }
+
+ assert(spill && "There must be at least one non-phi-node");
+
+ mode = get_irn_mode(get_irn_n(spill, be_pos_Spill_val));
+
+ /* insert reloads and wire them arbitrary*/
+ pset_foreach(vi->values, irn) {
+ foreach_out_edge_safe(irn, edge, ne) {
+ ir_node *reload, *src = edge->src;
+ if (is_Phi(src) || be_is_Spill(src))
+ continue;
+
+ /* all real uses must be reloaded */
+ DBG((raenv->dbg, LEVEL_2, " reloading before %+F\n", src));
+ reload = be_reload(raenv->aenv, raenv->cls, edge->src, mode, spill);
+ set_irn_n(edge->src, edge->pos, reload);
+
+ /* remember the reload */
+ pset_insert_ptr(reloads, reload);
+ }
+ }
+
+ /* correct the reload->spill pointers... */
+ be_ssa_constr_set_ignore(dom_front, lv, spills, NULL);
+
+
+ /****** correct the variable <--> values mapping: ******
+ *
+ * - if we had a phi class it gets split into several new variables
+ * - all reloads are new variables
+ */
+ n_spills = pset_count(spills);
+ n_reloads = pset_count(reloads);
+
+ /* first make room for new pointers in the cls_var array */
+ new_size = raenv->n_cls_vars + n_reloads + ((n_spills>1) ? n_spills : 0);
+ raenv->cls_vars = realloc(raenv->cls_vars, (new_size) * sizeof(*raenv->cls_vars));
+ assert(raenv->cls_vars && "Out of mem!?");
+
+ /* if we had a real phi-class, we must... */
+ if (pset_count(spills) > 1) {
+ /* ...remove the old variable corresponding to the phi class */
+ vi->var_nr = SET_REMOVED;
+
+ /* ...add new vars for each non-phi-member */
+ pset_foreach(spills, irn) {
+ ir_node *spilled = get_irn_n(irn, be_pos_Spill_val);
+ raenv->cls_vars[raenv->n_cls_vars++] = be_var_add_value(raenv->vars, get_irn_node_nr(spilled), spilled);
+ }
+ }
+
+ /* add new variables for all reloads */
+ pset_foreach(reloads, irn) {
+ assert(get_irn_node_nr(irn) != 1089);
+ raenv->cls_vars[raenv->n_cls_vars++] = be_var_add_value(raenv->vars, get_irn_node_nr(irn), irn);
+ }
+
+ del_pset(spills);
+ del_pset(reloads);