}
void be_insert_spills_reloads(spill_env_t *senv, pset *reload_set) {
- ir_graph *irg = senv->chordal_env->irg;
+ 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;
struct obstack ob;
ir_node *spill = be_spill_node(senv, si->spilled_node);
/* the reload */
- ir_node *bl = is_Block(rld->reloader) ? rld->reloader : get_nodes_block(rld->reloader);
- ir_node *reload = be_new_Reload(senv->cls, irg, bl, mode, spill);
+ ir_node *reload = be_reload(aenv, senv->cls, rld->reloader, mode, spill);
DBG((senv->dbg, LEVEL_1, " %+F of %+F before %+F\n", reload, si->spilled_node, rld->reloader));
if(reload_set)
pset_insert_ptr(reload_set, reload);
- /* remember the reaload */
+ /* remember the reload */
obstack_ptr_grow(&ob, reload);
- sched_add_before(rld->reloader, reload);
n_reloads++;
}
/* this is a new spill context */
ss = obstack_alloc(&ssenv->ob, sizeof(*ss));
ss->members = pset_new_ptr(8);
- ss->largest_mode = get_irn_mode(get_irn_n(spill, 0));
+ ss->largest_mode = get_irn_mode(get_irn_n(spill, be_pos_Spill_val));
ss->size = get_mode_size_bytes(ss->largest_mode);
ss->align = ss->size; /* TODO Assumed for now */
pmap_insert(ssenv->slots, ctx, ss);
ir_node *irn;
/* values with the same spill_ctx must go into the same spill slot */
ss = entry->value;
- assert(ss->size == (unsigned)get_mode_size_bytes(get_irn_mode(get_irn_n(spill, 0))) && "Different sizes for the same spill slot are not allowed yet.");
+ assert(ss->size == (unsigned)get_mode_size_bytes(get_irn_mode(get_irn_n(spill, be_pos_Spill_val))) && "Different sizes for the same spill slot are not allowed yet.");
for (irn = pset_first(ss->members); irn; irn = pset_next(ss->members)) {
/* use values_interfere here, because it uses the dominance check,
which does work for values in memory */
/* Clean up */
pmap_foreach(ssenv.slots, pme)
- del_pset(((spill_slot_t *)pme->value)->members);
+ del_pset(((spill_slot_t *)pme->value)->members);
pmap_destroy(ssenv.slots);
- pmap_destroy(ssenv.types);
+ pmap_destroy(ssenv.types);
obstack_free(&ssenv.ob, NULL);
+
+ be_copy_entities_to_reloads(cenv->irg);
}