Hi, this patch adds some info on changes in IPA and LTO. Not sure if I missed something important. Martin, perhaps you could add some example on new devirutalization stuff? Suggestions for less lame explanations are welcome :)
Honza Index: changes.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.7/changes.html,v retrieving revision 1.28 diff -c -3 -r1.28 changes.html *** changes.html 12 Sep 2011 07:46:05 -0000 1.28 --- changes.html 21 Sep 2011 09:51:12 -0000 *************** *** 58,63 **** --- 58,122 ---- was added to allow users to control the cutoff between doing switch statements as a series of if statements and using a jump table. </li> + <li>Link-time optimization improvements: + <ul> + <li>Improved scalability and reduced memory usage. Link time optimization + of Firefox now require 3GB of RAM on 64bit system, while over 8GB was needed + previously. Linking time has been improved, too. The serial stage of linking + Firefox binary has been sped up approximately by factor of 10.</li> + <li>Reduced size of object files and temporary storage used during linktime.</li> + <li>Streaming performance has been improved.</li> + <li>Number of bug fixes, especially in symbol table handling and merging.</li> + </ul> + <li>Interprocedural optimization improvements: + <li>Inliner heuristic can now take into account fact that after inlining + code will be optimized out because of known values (or properties) of function parameters. + For example: + <pre> + void foo(int a) + { + if (a>10) + ... huge code ... + } + void bar (void) + { + foo (0); + } + </pre> + The call of <code>foo</code> will be inlined into <code>bar</code> even when + optimizing for code size. Constructs based on <code>__builtin_constant_p</code> + are now understood by inliner and code size estimates are evaulated a lot + more realistically.</li> + <li>Representation of C++ virtual thunks and aliases has been + re-engineered. The aliases no longer pose optimization barriers and calls to an + alias can be inlined and otherwise optimized.</li> + <li>Inter-procedural constant propagation pass has been rewritten. It now performs + generic function specialization. For example when compiling the following: + <pre> + void foo(bool flag) + { + if (flag) + ... do something ... + else + ... do something else ... + } + void bar (void) + { + foo (false); + foo (true); + foo (false); + foo (true); + foo (false); + foo (true); + } + </pre> + GCC will now produce two copies of <code>foo</code>. One with <code>flag</code> being + <code>true</code>, while other with <code>flag</code> being + <code>false</code>. This leads to preformance improvements previusly + possibly only by inlining all calls. Cloning cause a lot less code size + growth. + <ul> + </ul> </ul> <h2>New Languages and Language specific improvements</h2>