- for(si = set_first(senv->spills); si; si = set_next(senv->spills)) {
- irn = si->spilled_node;
- if (is_Phi(irn) && is_mem_phi(irn, data))
- pset_insert_ptr(mem_phis, irn);
+ 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) */
+ }
+ }