-<li>Inliner reuses arrays allocas when inlining multiple callers to reduce stack usage.</li>
-<li>Instcombine is now a library, has its own IRBuilder to simplify itself.</li>
-<li>Better code size analysis in loop unswitch, inliner code split out to a new
- CodeMetrics class for reuse.</li>
-<li>Many changes to the pass ordering for improved optimization
- effectiveness.</li>
-<li>BasicAA improved to be less dependent on "type safe" pointers, it can now look
- through bitcasts more aggressively.</li>
-<li>GVN PHI Translation improvements. blog post: http://blog.llvm.org/2009/12/advanced-topics-in-redundant-load.html</li>
-<li>New SCEV AA pass: -scev-aa</li>
-<li>Target data now has notion of 'native' integer data types which optimizations can use.</li>
-<li>Opt now works conservatively if no target data is set (is this fully working?)</li>
-<li>New Analysis/InstructionSimplify.h interface for simplifying instructions that don't exist.</li>
+<li>The inliner reuses now merges arrays stack objects in different callees when
+ inlining multiple call sites into one function. This reduces the stack size
+ of the resultant function.</li>
+<li>The -basicaa alias analysis pass (which is the default) has been improved to
+ be less dependent on "type safe" pointers. It can now look through bitcasts
+ and other constructs more aggressively, allowing better load/store
+ optimization.</li>
+<li>The load elimination optimization in the GVN Pass [<a
+href="http://blog.llvm.org/2009/12/introduction-to-load-elimination-in-gvn.html">intro
+ blog post</a>] has been substantially improved to be more aggressive about
+ partial redundancy elimination and do more aggressive phi translation. Please
+ see the <a
+ href="http://blog.llvm.org/2009/12/advanced-topics-in-redundant-load.html">
+ Advanced Topics in Redundant Load Elimination with a Focus on PHI Translation
+ Blog Post</a> for more details.</li>
+<li>The module <a href="LangRef.html#datalayout">target data string</a> now
+ includes a notion of what the 'native' integer data types a for the target,
+ which allows various optimizations to use. This helps mid-level
+ optimizations avoid promoting complex sequences of operations to data types
+ that are not natively supported (e.g. converting i32 operations to i64 on
+ a 32-bit chip).</li>
+<li>The mid-level optimizer is now conservative when operating on a module with
+ no target data. Previously, it would default to SparcV9 settings, which is
+ not what most people expected.</li>