From: Michael Beck Date: Sat, 5 Apr 2008 18:37:30 +0000 (+0000) Subject: after inlining, the loop-info is inconsistent X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=06e99bb8d0e54b0c8294f7fad8415c505e0d242f;hp=f8b8dc8908ab57afa2c066cadbfe42f6f960e0ab;p=libfirm after inlining, the loop-info is inconsistent [r19144] --- diff --git a/ir/opt/opt_inline.c b/ir/opt/opt_inline.c index a91615ea0..0fd832886 100644 --- a/ir/opt/opt_inline.c +++ b/ir/opt/opt_inline.c @@ -1230,15 +1230,23 @@ void inline_small_irgs(ir_graph *irg, int size) { irg_walk_graph(irg, NULL, collect_calls, &env); if (env.head != NULL) { + int did_inline = 0; + /* There are calls to inline */ collect_phiprojs(irg); for (entry = env.head; entry != NULL; entry = entry->next) { ir_graph *callee = entry->callee; if (((_obstack_memory_used(callee->obst) - (int)obstack_room(callee->obst)) < size) || (get_irg_inline_property(callee) >= irg_inline_forced)) { - inline_method(entry->call, callee); + did_inline |= inline_method(entry->call, callee); } } + if (did_inline != 0) { + /* this irg got calls inlined */ + set_irg_outs_inconsistent(irg); + set_irg_doms_inconsistent(irg); + set_irg_loopinfo_inconsistent(irg); + } } obstack_free(&env.obst, NULL); current_ir_graph = rem; @@ -1603,6 +1611,7 @@ void inline_leave_functions(int maxsize, int leavesize, int size, int ignore_run /* this irg got calls inlined */ set_irg_outs_inconsistent(irg); set_irg_doms_inconsistent(irg); + set_irg_loopinfo_inconsistent(irg); optimize_graph_df(irg); optimize_cf(irg); @@ -1984,6 +1993,7 @@ void inline_functions(int inline_threshold) { /* this irg got calls inlined */ set_irg_outs_inconsistent(irg); set_irg_doms_inconsistent(irg); + set_irg_loopinfo_inconsistent(irg); if (env->local_vars) scalar_replacement_opt(irg);