> > > > 2015-02-19 Marek Polacek <pola...@redhat.com> > > > > > > > > PR ipa/65008 > > > > * ipa-inline.c (early_inliner): Recompute inline parameters. > > > > > > > > * g++.dg/ipa/pr65008.C: New test. > > > > > > > > diff --git gcc/ipa-inline.c gcc/ipa-inline.c > > > > index 025f7fc..c445f0a 100644 > > > > --- gcc/ipa-inline.c > > > > +++ gcc/ipa-inline.c > > > > @@ -2559,6 +2559,19 @@ early_inliner (function *fun) > > > > { > > > > timevar_push (TV_INTEGRATION); > > > > todo |= optimize_inline_calls (current_function_decl); > > > > + /* optimize_inline_calls call above might have introduced new > > > > + statements that don't have inline parameters computed. */ > > > > + for (edge = node->callees; edge; edge = edge->next_callee) > > > > > > Are cgraph edges up-to-date here? I'd doubt that... if so, why not > > > do this update in the inliner itself where it updates the cgraph edges? > > > > I've tried to move this hunk into tree-inliner.c, but I think that is > > not possible. E.g. inline_edge_summary is ipa-inline thing only. > > Also all my attemps to update the inline metrics somewhere in copy_bb or > > e.g. expand_call_inline failed, so I'm afraid I don't have anything > > better than the original patch ;). Honza, any opinion?
Sorry for taking time on this - I wanted to give it a quick test on Firefox that does use always inline and see how code quality compares to re-running the analysis after inlining (that is more correct thing to do). It seems tha tthere is not much of practical difference, because we do very minimal folding anyway. So patch is OK Honza > > > > Marek > > Marek