On Wed, 20 Jan 2016, Jan Hubicka wrote: > this is updated patch. I tried to explain better the situation WRT > incremental linking.
Thank you, Jan. I had a couple of editorial changes on top of this, which I finally managed to commit. (See the patch below.) And one question: "declaration linking" is used in the description of Link-time optimization improvements, alas that string does not appear anywhere in either the source tree or documentation? On Wed, 3 Feb 2016, Jonathan Wakely wrote: > s/of C++ methods/in C++ member functions/ This one got changed only partially in the patch applied last year, and I have adjusted this now to read "in C++ member functions" as opposed to "of C++ member functions". Gerald Index: changes.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-6/changes.html,v retrieving revision 1.95 diff -u -r1.95 changes.html --- changes.html 25 Feb 2017 17:46:38 -0000 1.95 +++ changes.html 27 Feb 2017 22:29:33 -0000 @@ -59,12 +59,12 @@ on higher-level C++ programs. Programs doing invalid type punning of pointer types may now need <code>-fno-strict-aliasing</code> to work correctly.</li> - <li>Alias analysis now correctly supports <code>weakref</code> and - <code>alias</code> attributes. This makes it possible to access + <li>Alias analysis now correctly supports the <code>weakref</code> and + <code>alias</code> attributes. This allows accessing both a variable and its alias in one translation unit which is common with link-time optimization.</li> <li>Value range propagation now assumes that the <code>this</code> pointer - of C++ member functions is non-null. This eliminates + in C++ member functions is non-null. This eliminates common null pointer checks but also breaks some non-conforming code-bases (such as Qt-5, Chromium, KDevelop). As a temporary work-around @@ -74,7 +74,8 @@ <ul> <li><code>warning</code> and <code>error</code> attributes are now correctly preserved by declaration linking and thus - <code>-D_FORTIFY_SOURCE=2</code> is now supported with <code>-flto</code>.</li> + <code>-D_FORTIFY_SOURCE=2</code> is now supported with + <code>-flto</code>.</li> <li><p>Type merging was fixed to handle C and Fortran interoperability rules as defined by the Fortran 2008 language standard.</p> <p> @@ -83,10 +84,10 @@ <code>char</code> is scalar. <code>INTEGER(KIND=C_SIGNED_CHAR)</code> should be used instead. In general, this inter-operability cannot be implemented, for - example, on targets where function passing conventions of arrays - differs from scalars.</p></li> - <li>More type information is now preserved at link time reducing - the loss of accuracy of the type based alias analysis compared + example on targets where the argument passing convention for + arrays differs from scalars.</p></li> + <li>More type information is now preserved at link time, reducing + the loss of accuracy of the type-based alias analysis compared to builds without link-time optimization.</li> <li>Invalid type punning on global variables and declarations is now reported with <code>-Wodr-type-mismatch</code>.</li> @@ -96,30 +97,35 @@ was significantly improved by decreasing the size of streamed data when partitioning programs. The size of streamed IL while compiling Firefox 46.0 was reduced by 66%.</li> - <li><p>The linker plugin was extended to pass information about type of - binary produced to GCC back end (that can be also manually controlled - by <code>-flinker-output</code>). This makes it possible to + <li><p>The linker plugin was extended to pass information about the + type of binary produced to the GCC back end. (That can also be + controlled manually by <code>-flinker-output</code>.) + This makes it possible to properly configure the code generator and support incremental - linking. Incremental linking of LTO objects by <code>gcc -r</code> is - now supported on plugin-enabled setups.</p> + linking. Incremental linking of LTO objects by <code>gcc -r</code> + is now supported for plugin-enabled setups.</p> <p>There are two ways to perform incremental linking:</p> <ol> <li>Linking by <code>ld -r</code> will result in an object file with all sections from individual object files mechanically merged. - This delays the actual link time optimization to final linking step - and thus permits whole program optimization. Linking final binary + This delays the actual link-time optimization to the final + linking step and thus permits whole program optimization. + Linking the final binary with such object files is however slower.</li> - <li>Linking by <code>gcc -r</code> will lead to link time optimization - and produce final binary into the object file. Linking such object - file is fast but avoids any benefits from whole program optimization.</li> + <li>Linking by <code>gcc -r</code> will lead to link-time + optimization and emit the final binary into the object file. + Linking such an object file is fast but avoids any benefits + from whole program optimization.</li> </ol> - GCC 7 will support incremental link-time optimization with <code>gcc -r</code>.</li> + GCC 7 will support incremental link-time optimization with + <code>gcc -r</code>.</li> </ul></li> <li>Inter-procedural optimization improvements: <ul> <li>Basic jump threading is now performed before profile construction - and inline analysis, resulting in more realistic size and time estimates - that drive the heuristics of the of inliner and function cloning passes.</li> + and inline analysis, resulting in more realistic size and time + estimates that drive the heuristics of the inliner and function + cloning passes.</li> <li>Function cloning now more aggressively eliminates unused function parameters.</li> </ul></li>