On Wed, Oct 7, 2009 at 2:33 PM, Jan Hubicka <hubi...@ucw.cz> wrote: >> Anyway, as regards *which* specific functions are not inlined, I would >> say all the functions which break the ABI test as newly exported symbols >> should be checked, like the above, 'std::ios_base::getloc() const'. I'm >> attaching below a complete list, from my libstdc++.log, but I would >> guess should be easy to reproduce with a GCC tree post your last changes... > > Hi, > from quick glance at the symbols it seems that the functions are not > that small they would be considered code size win after inlining, so it > might be that inliner just no longer inline them into cold sections > callers. > > There is one change concerning COMDAT I made in my patch. Inliner when > doing size estimates knows that inlining all calls might make out of > line function unnecesary. This logic was working for COMDAT functions > too (they do disappear from current unit) while after the patch COMDAT > functions are assumed to stay in the unit size after inlining. I did > this because this logic has an effect that all COMDAT functions that are > called just once in current compilation unit will get inlined (since > producing inline copy while removing offline copy always reduce size) > regardless their size that might lead to uncontrolled program size > growth. > > I will see if it reproduces on my setup and if it disappears after this > logic is reverted to original behaviour. > Lets also see how C++ benchmarks will change in behaviour today.
Btw, that new comdat behavior is very well reasonable. In whole-program mode it should be the old one though. Richard.