------- Comment #37 from rguenth at gcc dot gnu dot org 2010-01-28 16:50 ------- But it miscompares. Honza?!
Index: gcc/ipa-inline.c =================================================================== *** gcc/ipa-inline.c (revision 156321) --- gcc/ipa-inline.c (working copy) *************** cgraph_decide_inlining_incrementally (st *** 1510,1515 **** --- 1510,1517 ---- /* Never inline regular functions into always-inline functions during incremental inlining. */ && !node->local.disregard_inline_limits) + { + bitmap visited = BITMAP_ALLOC (NULL); for (e = node->callees; e; e = e->next_callee) { int allowed_growth = 0; *************** cgraph_decide_inlining_incrementally (st *** 1517,1522 **** --- 1519,1528 ---- || !e->inline_failed || e->callee->local.disregard_inline_limits) continue; + /* We are inlining a function to all call-sites in node + or to none. So visit each candidate only once. */ + if (!bitmap_set_bit (visited, e->callee->uid)) + continue; if (dump_file) fprintf (dump_file, "Considering inline candidate %s.\n", cgraph_node_name (e->callee)); *************** cgraph_decide_inlining_incrementally (st *** 1601,1606 **** --- 1607,1614 ---- if (cgraph_default_inline_p (e->callee, &failed_reason)) inlined |= try_inline (e, mode, depth); } + BITMAP_FREE (visited); + } node->aux = (void *)(size_t) old_mode; return inlined; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37448