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
/* 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);