+<ul>
+<li><p>The biggest change in LLVM 2.3 is Multiple Return Value (MRV) support.
+ MRVs allow LLVM IR to directly represent functions that return multiple
+ values without having to pass them "by reference" in the LLVM IR. This
+ allows a front-end to generate more efficient code, as MRVs are generally
+ returned in registers if a target supports them. See the <a
+ href="LangRef.html#i_getresult">LLVM IR Reference</a> for more details.</p>
+
+ <p>MRVs are fully supported in the LLVM IR, but are not yet fully supported in
+ on all targets. However, it is generally safe to return up to 2 values from
+ a function: most targets should be able to handle at least that. MRV
+ support is a critical requirement for X86-64 ABI support, as X86-64 requires
+ the ability to return multiple registers from functions, and we use MRVs to
+ accomplish this in a direct way.</p></li>
+
+<li><p>LLVM 2.3 includes a complete reimplementation of the "<tt>llvmc</tt>"
+ tool. It is designed to overcome several problems with the original
+ <tt>llvmc</tt> and to provide a superset of the features of the
+ '<tt>gcc</tt>' driver.</p>
+
+ <p>The main features of <tt>llvmc2</tt> are:
+ <ul>
+ <li>Extended handling of command line options and smart rules for
+ dispatching them to different tools.</li>
+ <li>Flexible (and extensible) rules for defining different tools.</li>
+ <li>The different intermediate steps performed by tools are represented
+ as edges in the abstract graph.</li>
+ <li>The 'language' for driver behavior definition is tablegen and thus
+ it's relatively easy to add new features.</li>
+ <li>The definition of driver is transformed into set of C++ classes, thus
+ no runtime interpretation is needed.</li>
+ </ul>
+</li>