------- 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