X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Fircgcons.c;h=bd442c5a5de18a2a2e534c13e275e2c94d2a5597;hb=bd59bd3997db8f1c56f1fe14f0a033b3c77fa684;hp=af162c27cfd8c9a502db6114ffe97777c0ff644f;hpb=5c27107154d63252e27639ebb34e98022f9b3358;p=libfirm diff --git a/ir/ir/ircgcons.c b/ir/ir/ircgcons.c index af162c27c..bd442c5a5 100644 --- a/ir/ir/ircgcons.c +++ b/ir/ir/ircgcons.c @@ -132,7 +132,7 @@ static void collect_phicallproj(void) { 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); } } @@ -252,7 +252,7 @@ static void prepare_irg_end(ir_graph * irg, irg_data_t * data) { } } 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) { @@ -525,7 +525,8 @@ static void construct_call(ir_node * call) { /* 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. */ @@ -535,6 +536,12 @@ static void construct_call(ir_node * call) { 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) { @@ -549,6 +556,8 @@ static void construct_call(ir_node * call) { 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 @@ -560,6 +569,13 @@ static void construct_call(ir_node * call) { 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 */ @@ -576,6 +592,8 @@ static void construct_call(ir_node * call) { 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);