X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_inline.c;h=85577c63014f7a04e4dce6e38076ed92a79a5bd8;hb=b27ae245166bb695bc4e418ff416d91bc37d0f28;hp=c4633061fdd8a3474874483238000b36cbcb8bd3;hpb=15ad7ccd8dff64e1808e1d093d4a8d7cda5af33e;p=libfirm diff --git a/ir/opt/opt_inline.c b/ir/opt/opt_inline.c index c4633061f..85577c630 100644 --- a/ir/opt/opt_inline.c +++ b/ir/opt/opt_inline.c @@ -343,10 +343,8 @@ int inline_method(ir_node *call, ir_graph *called_graph) assert(get_irg_phase_state(irg) != phase_building); assert(get_irg_pinned(irg) == op_pin_state_pinned); assert(get_irg_pinned(called_graph) == op_pin_state_pinned); - set_irg_outs_inconsistent(irg); set_irg_extblk_inconsistent(irg); set_irg_doms_inconsistent(irg); - set_irg_loopinfo_inconsistent(irg); set_irg_callee_info_state(irg, irg_callee_info_inconsistent); set_irg_entity_usage_state(irg, ir_entity_usage_not_computed); edges_deactivate(irg); @@ -393,7 +391,6 @@ int inline_method(ir_node *call, ir_graph *called_graph) in[pn_Start_M] = get_Call_mem(call); in[pn_Start_X_initial_exec] = new_r_Jmp(post_bl); in[pn_Start_P_frame_base] = get_irg_frame(irg); - in[pn_Start_P_tls] = get_irg_tls(irg); in[pn_Start_T_args] = new_r_Tuple(post_bl, n_params, args_in); pre_call = new_r_Tuple(post_bl, pn_Start_max, in); post_call = call; @@ -415,7 +412,6 @@ int inline_method(ir_node *call, ir_graph *called_graph) { ir_node *start_block; ir_node *start; - ir_node *bad; ir_node *nomem; start_block = get_irg_start_block(called_graph); @@ -426,10 +422,6 @@ int inline_method(ir_node *call, ir_graph *called_graph) set_new_node(start, pre_call); mark_irn_visited(start); - bad = get_irg_bad(called_graph); - set_new_node(bad, get_irg_bad(irg)); - mark_irn_visited(bad); - nomem = get_irg_no_mem(called_graph); set_new_node(nomem, get_irg_no_mem(irg)); mark_irn_visited(nomem); @@ -538,10 +530,9 @@ int inline_method(ir_node *call, ir_graph *called_graph) } } if (n_ret > 0) { - ir_mode *mode = get_irn_mode(cf_pred[0]); - phi = new_r_Phi(post_bl, n_ret, cf_pred, mode); + phi = new_r_Phi(post_bl, n_ret, cf_pred, res_mode); } else { - phi = new_r_Bad(irg); + phi = new_r_Bad(irg, res_mode); } res_pred[j] = phi; /* Conserve Phi-list for further inlinings -- but might be optimized */ @@ -553,14 +544,11 @@ int inline_method(ir_node *call, ir_graph *called_graph) result_tuple = new_r_Tuple(post_bl, n_res, res_pred); set_Tuple_pred(call, pn_Call_T_result, result_tuple); } else { - set_Tuple_pred(call, pn_Call_T_result, new_r_Bad(irg)); + set_Tuple_pred(call, pn_Call_T_result, new_r_Bad(irg, mode_T)); } /* handle the regular call */ set_Tuple_pred(call, pn_Call_X_regular, new_r_Jmp(post_bl)); - /* For now, we cannot inline calls with value_base */ - set_Tuple_pred(call, pn_Call_P_value_res_base, new_r_Bad(irg)); - /* Finally the exception control flow. We have two possible situations: First if the Call branches to an exception handler: @@ -592,7 +580,7 @@ int inline_method(ir_node *call, ir_graph *called_graph) set_Tuple_pred(call, pn_Call_X_except, new_r_Jmp(block)); } } else { - set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg)); + set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg, mode_X)); } } else { ir_node *main_end_bl; @@ -619,7 +607,7 @@ int inline_method(ir_node *call, ir_graph *called_graph) for (i = 0; i < n_exc; ++i) end_preds[main_end_bl_arity + i] = cf_pred[i]; set_irn_in(main_end_bl, n_exc + main_end_bl_arity, end_preds); - set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg)); + set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg, mode_X)); free(end_preds); } free(res_pred); @@ -1647,6 +1635,7 @@ static void inline_into(ir_graph *irg, unsigned maxsize, set_irg_link(copy, callee_env); assure_cf_loop(copy); + memset(&wenv, 0, sizeof(wenv)); wenv.x = callee_env; wenv.ignore_callers = 1; irg_walk_graph(copy, NULL, collect_calls2, &wenv);