On 03/22/2015 08:26 PM, Jan Hubicka wrote: > Hi, > this is my honest attempt to explain how command line options works with LTO > in current compiler and how to deal with these sanely. > > It is bit of mess, but an improvement over past releases. We finished the > transition to per-function attributes. In GCC 6 I plan to add per-variable > counterpart. I wonder if we want to have something in the texinfo too? > > Honza > > Index: changes.html > =================================================================== > RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/changes.html,v > retrieving revision 1.90 > diff -u -r1.90 changes.html > --- changes.html 23 Mar 2015 02:00:12 -0000 1.90 > +++ changes.html 23 Mar 2015 02:22:51 -0000 > @@ -78,6 +78,25 @@ > Streaming extra information needed to merge types adds about 2-6% of > memory size and object size increase. This can be controlled by > <code>-flto-odr-type-merging</code>.</li> > + <li><p>Command line optimization and target options are now streamed on > + per-function basis and honored by the link-time optimizer. > + This change makes the link-time optimization more tranpsarent > + replacement of the per-file optimization. > + It is now possible to build projects that require different > optimization > + settings for different translation units (such as > + <code>-ffast-math</code>, <code>-mavx</code>, or > <code>-finline</code>). > + Contrary to the earlier GCC releases, the optimization and target > + options passed to the command line invoking linker are ignored.</p> > + <p>Note that this apply only to those command > + line options that can be passed to <code>optimize</code> and > + <code>target</code> attributes. Command line options affecting global > + code generation (such as <code>-fpic</code>), warnings > + (such as <code>-Wodr</code>), optimization affecting way static > variables > + are optimized (such as <code>-fcommon</code>), debug output (such as > + <code>-g</code>) and <code>--param</code> parameters can be applied > only > + to the whole link-time optimization unit. > + It these cases it is recommended to consistently use the same setting > + both at compile-time and link-time.</p> > <li>GCC bootstrap now uses slim LTO object files.</li> > <li>Memory usage and link times were improved. Tree merging was sped > up, > memory usage of GIMPLE declarations and types was reduced, and, >
How about this for a copy-edited version of the new text? <li><p>Command-line optimization and target options are now streamed on a per-function basis and honored by the link-time optimizer. This change makes the link-time optimization a more transparent replacement of per-file optimizations. It is now possible to build projects that require different optimization settings for different translation units (such as <code>-ffast-math</code>, <code>-mavx</code>, or <code>-finline</code>). Contrary to the earlier GCC releases, the optimization and target options passed on the link command line are ignored.</p> <p>Note that this applies only to those command-line options that can be passed to <code>optimize</code> and <code>target</code> attributes. Command-line options affecting global code generation (such as <code>-fpic</code>), warnings (such as <code>-Wodr</code>), optimizations affecting the way static variables are optimized (such as <code>-fcommon</code>), debug output (such as <code>-g</code>), and <code>--param</code> parameters can be applied only to the whole link-time optimization unit. In these cases, it is recommended to consistently use the same options at both compile time and link time.</p></li> -Sandra