-#endif
-
-void be_insert_spills_reloads(spill_env_t *senv, pset *reload_set) {
- const arch_env_t *aenv = senv->chordal_env->birg->main_env->arch_env;
- ir_graph *irg = senv->chordal_env->irg;
- ir_node *irn;
- spill_info_t *si;
-
- /* get all special spilled phis */
- DBG((senv->dbg, LEVEL_1, "Mem-phis:\n"));
- senv->mem_phis = pset_new_ptr_default();
- irg_walk_graph(senv->chordal_env->irg, phi_walker, NULL, senv);
-
- /* Add reloads for mem_phis */
- /* BETTER: These reloads (1) should only be inserted, if they are really needed */
- DBG((senv->dbg, LEVEL_1, "Reloads for mem-phis:\n"));
- for(irn = pset_first(senv->mem_phis); irn; irn = pset_next(senv->mem_phis)) {
- const ir_edge_t *e;
- DBG((senv->dbg, LEVEL_1, " Mem-phi %+F\n", irn));
- foreach_out_edge(irn, e) {
- ir_node *user = e->src;
- if (is_Phi(user) && !pset_find_ptr(senv->mem_phis, user)) {
- ir_node *use_bl = get_nodes_block(user);
- DBG((senv->dbg, LEVEL_1, " non-mem-phi user %+F\n", user));
- be_add_reload_on_edge(senv, irn, use_bl, e->pos); /* (1) */
- }
- }
- }
-
- /* process each spilled node */
- DBG((senv->dbg, LEVEL_1, "Insert spills and reloads:\n"));
- for(si = set_first(senv->spills); si; si = set_next(senv->spills)) {
- reloader_t *rld;
- ir_mode *mode = get_irn_mode(si->spilled_node);
- pset *values = pset_new_ptr(16);
-
- /* go through all reloads for this spill */
- for(rld = si->reloaders; rld; rld = rld->next) {
- ir_node *new_val;
-
- /* the spill for this reloader */
- ir_node *spill = be_spill_node(senv, si->spilled_node);
-
-#ifdef REMAT
- if (check_remat_conditions(senv, spill, si->spilled_node, rld->reloader))
- new_val = do_remat(senv, si->spilled_node, rld->reloader);
- else
-#endif
- /* do a reload */
- new_val = be_reload(aenv, senv->cls, rld->reloader, mode, spill);
-
- DBG((senv->dbg, LEVEL_1, " %+F of %+F before %+F\n", new_val, si->spilled_node, rld->reloader));
- pset_insert_ptr(values, new_val);
- if(reload_set)
- pset_insert_ptr(reload_set, new_val);
- }
-
- /* introduce copies, rewire the uses */
- assert(pset_count(values) > 0 && "???");
- pset_insert_ptr(values, si->spilled_node);
- be_ssa_constr_set_ignore(senv->chordal_env->dom_front, values, senv->mem_phis);
-
- del_pset(values);