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>

Reply via email to