X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_inline.c;h=f376c752dcc7d567c27fc1c13d9979d0292f4cef;hb=4c96713146f32c2b3fefcd9c21151487b2ca6033;hp=990a3241645339825295aa68203b9ba8caae92d2;hpb=0dd4bb60b1f0ba4f34ea40e084a6c1dec202ddaf;p=libfirm diff --git a/ir/opt/opt_inline.c b/ir/opt/opt_inline.c index 990a32416..f376c752d 100644 --- a/ir/opt/opt_inline.c +++ b/ir/opt/opt_inline.c @@ -1753,6 +1753,10 @@ void inline_functions(int inline_threshold) { call = entry->call; callee = entry->callee; + /* calculate the benifice on the original call to prevent excessive inlining */ + benefice = calc_inline_benefice(call, callee); + DB((dbg, SET_LEVEL_2, "In %+F Call %+F has benefice %d\n", current_ir_graph, callee, benefice)); + e = pmap_find(copied_graphs, callee); if (e != NULL) { /* @@ -1762,10 +1766,7 @@ void inline_functions(int inline_threshold) { callee = e->value; } - benefice = calc_inline_benefice(call, callee); - DB((dbg, SET_LEVEL_2, "In %+F Call %+F has benefice %d\n", current_ir_graph, callee, benefice)); - - if (benefice > inline_threshold || + if (benefice > -inline_threshold || (get_irg_inline_property(callee) >= irg_inline_forced)) { if (current_ir_graph == callee) { /*