ir_graph * irg = get_irp_irg(i);
ir_node * start = get_irg_start(irg);
ir_node * end = get_irg_end(irg);
+ current_ir_graph = irg;
assert(irg && start);
/* Die speziellen Parameter der Start-Operation extra verlinken,
* auch wenn sie nicht im intraprozeduralen Graphen erreichbar
link(start, get_irg_frame(irg));
link(start, get_irg_globals(irg));
/* walk */
- irg_walk_graph(irg, clear_link, (irg_walk_func) collect_phicallproj_walker, &end);
+ irg_walk_graph(irg, clear_link, (irg_walk_func *) collect_phicallproj_walker, &end);
}
}
}
}
if (n_ret > 0) {
- int n_res = get_method_n_res(get_entity_type(get_irg_ent(irg)));
+ int n_res = get_method_n_ress(get_entity_type(get_irg_ent(irg)));
ir_node ** in = NEW_ARR_F(ir_node *, n_ret);
/* block */
for (i = n_ret - 1; i >= 0; --i) {
/* Operationen verschieben */
move_phis(post_block, pre_block);
move_nodes(post_block, pre_block, call);
- /* @@@ GL Wer setzt die Laenge des PostBlock cgfpred array auf 1? */
+ /* @@@ GL Wer setzt die Laenge des PostBlock cgfpred array auf 1?
+ GL: na, dieser Befehl... generiert neuen array. */
set_irn_in(post_block, 1, &jmp);
/* Wiederverwendete Daten initialisieren. */
data[i] = get_entity_link(callees[i]);
}
+ /*
+ * Set flag to suppress verifying placement on proper irg:
+ * optimization can return block on other irg.
+ */
+ set_interprocedural_view(1);
+
/* Die interprozeduralen Steuerflussvorgänger des post_block
* bestimmen. */
for (i = 0; i < n_callees; ++i) {
in[i] = new_Unknown();
}
}
+ set_interprocedural_view(0);
+
set_Block_cg_cfgpred_arr(post_block, n_callees, in);
/* Die interprozeduralen Steuerflussvorgänger des except_block
set_irg_current_block(current_ir_graph, pre_block);
set_irn_n(except_block, 0, new_Proj(call, mode_X, 1));
set_irg_current_block(current_ir_graph, post_block);
+
+ /*
+ * Set flag to suppress verifying placement on proper irg:
+ * optimization can return block on other irg.
+ */
+ set_interprocedural_view(1);
+
for (i = 0; i < n_callees; ++i) {
entity * callee = get_Call_callee(call, i);
if (data[i]) { /* explicit */
set_Block_cg_cfgpred_arr(except_block, n_callees, in);
}
+ set_interprocedural_view(0);
+
/* Diesen Vorgänger in den Start-Blöcken der aufgerufenen Methoden
* eintragen. */
set_irg_current_block(current_ir_graph, pre_block);