*/
static ir_node *be_spill_node(spill_env_t *senv, ir_node *to_spill) {
ir_graph *irg = get_irn_irg(to_spill);
- set *already_visited_phis = new_set(cmp_phi_spill_assoc, 10);
ir_node *res;
- bitset_t *bs = bitset_alloca(get_irg_last_idx(irg));
- if (pset_find_ptr(senv->mem_phis, to_spill))
+ if (pset_find_ptr(senv->mem_phis, to_spill)) {
+ set *already_visited_phis = new_set(cmp_phi_spill_assoc, 10);
+ bitset_t *bs = bitset_alloca(get_irg_last_idx(irg));
res = be_spill_phi(senv, to_spill, to_spill, already_visited_phis, bs);
- else
+ del_set(already_visited_phis);
+ } else {
res = be_spill_irn(senv, to_spill, to_spill);
+ }
return res;
}
void be_insert_spills_reloads(spill_env_t *senv) {
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;
return res;
}
-static int is_mem_phi(const ir_node *irn, void *data) {
+static int is_mem_phi(const ir_node *node, void *data) {
// TODO what is this for?
+
return 0;
}
}
}
+static void free_loop_out_edges(morgan_env_t *env) {
+ loop_attr_t *l_attr;
+
+ for(l_attr = set_first(env->loop_attr_set); l_attr != NULL; l_attr = set_next(env->loop_attr_set)) {
+ del_set(l_attr->out_edges);
+ }
+}
+
/**
* Construct the livethrough unused information for a block
*/
// cleanup
be_end_uses(env.uses);
be_dump(env.irg, "-spillmorgan", dump_ir_block_graph_sched);
+ free_loop_out_edges(&env);
del_set(env.loop_attr_set);
del_set(env.block_attr_set);
ir_node *node;
int non_phi_found = 0;
int cfchange_found = 0;
- // TODO ask ABI about delay branches
+ // TODO ask arch about delay branches
int delay_branches = 0;
pset *uses = pset_new_ptr_default();
node, block, get_irg_dump_name(env->irg));
env->problem_found = 1;
}
- continue;
- }
- non_phi_found = 1;
+ } else {
+ non_phi_found = 1;
+ }
// 2. Check for control flow changing nodes
if (is_cfop(node) && get_irn_opcode(node) != iro_Start) {