Implement InstCombine/cast.ll:test29
[oota-llvm.git] / docs / ReleaseNotes.html
index 13d41257e56144f8eae948ad649e3b15dc4ee83a..ca47bc58e1938bf7270706168aabdd99306b9afa 100644 (file)
@@ -80,16 +80,17 @@ front-end</a></div>
 
 <div class="doc_text">
 
-<p>LLVM 1.8 includes a brand new llvm-gcc, based on GCC 4.0.1.  This version
+<p>LLVM 1.7 includes a brand new llvm-gcc, based on GCC 4.0.1.  This version
 of llvm-gcc solves many serious long-standing problems with llvm-gcc, including
 all of those blocked by the <a href="http://llvm.org/PR498">llvm-gcc 4 meta 
 bug</a>.  In addition, llvm-gcc4 implements support for many new features, 
 including GCC inline assembly, generic vector support, SSE and Altivec
-intrinsics, and several new GCC attributes.  In addition, llvm-gcc4 is 
+intrinsics, and several new GCC attributes.  Finally, llvm-gcc4 is
 significantly faster than llvm-gcc3, respects -O options, its -c/-S options
-correspond to GCC's (they emit native code).</p>
+correspond to GCC's (they emit native code), supports Objective C/C++, and 
+it has debugging support well underway.</p>
 
-<p>If you can use it, llvm-gcc4 is offers significant new functionality, and we
+<p>If you can use it, llvm-gcc4 offers significant new functionality, and we
 hope that it will replace llvm-gcc3 completely in a future release.  
 Unfortunately, it does not currently support C++ exception handling at all, and
 it only works on Apple Mac OS/X machines with X86 or PowerPC processors.
@@ -123,8 +124,8 @@ SPARC V8 and SPARC V9 subtargets (controlling whether V9 features can be used),
 and targets the 32-bit SPARC ABI.</p>
 
 <p>The LLVM 1.7 release is the last release that will include the LLVM "SparcV9"
-backend, which was the very first LLVM native code generator.  In 1.8, it will
-be removed, replaced with the new SPARC backend.</p>
+backend, which was the very first LLVM native code generator.  It will
+be removed in LLVM 1.8, being replaced with the new SPARC backend.</p>
 
 </div>
 
@@ -145,7 +146,7 @@ not supported by a particular target, it will be correctly broken down and
 executed as scalar operations.</p>
 
 <p>Because llvm-gcc3 does not support GCC generic vectors or vector intrinsics,
-so llvm-gcc4 must be used.</p>
+llvm-gcc4 must be used.</p>
 </div>
 
 
@@ -171,13 +172,76 @@ are used.
 
 </div>
 
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection"><a name="optimizernew">Optimizer 
+Improvements</a></div>
+
+<div class="doc_text">
+<ul>
+<li>The Loop Unswitching pass (<tt>-loop-unswitch</tt>) has had several bugs
+    fixed, has several new features, and is enabled by default in llvmgcc3
+    now.</li>
+<li>The Loop Strength Reduction pass (<tt>-loop-reduce</tt>) is now enabled for
+    the X86 and Alpha backends.</li>
+<li>The Instruction Combining pass (<tt>-instcombine</tt>) now includes a
+    framework and implementation for simplifying code based on whether computed
+    bits are demanded or not.</li>
+<li>The Scalar Replacement of Aggregates pass (<tt>-scalarrepl</tt>) can now
+    promote simple unions to registers.</li>
+<li>The Reassociation pass (<tt>-reassociate</tt>) can now
+    factor expressions, e.g. turning "A*A+A*B" into "A*(A+B)".</li>
+<li>Several LLVM passes are <a href="http://llvm.org/PR681">significantly
+faster</a>.</li>
+</ul>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection"><a name="codgennew">Code Generator 
+Improvements</a></div>
+
+<div class="doc_text">
+<ul>
+<li>LLVM has a new prepass (before register allocation) list scheduler, which
+    supports bottom-up and top-down scheduling, pluggable priority functions and
+    pluggable hazard recognizers.  The X86 backend uses this to reduce register
+    pressure and RISC targets schedule based on operation latency.</li>
+<li>The tblgen-based target description framework introduced in LLVM 1.6 has
+    several new features, useful for targets that can fold loads and stores into
+    operations, and features that make the .td files more expressive.</li>
+<li>The instruction selector is significantly faster in 1.7 than in 1.6.</li>
+<li>The X86, Alpha and Itanium backends use new DAG-DAG instruction selectors,
+    making them easier to maintain and generate slightly better code.</li>
+<li>The X86 backend now supports generation of Scalar SSE code for scalar FP
+    expressions.  LLVM provides significantly better performance with Scalar SSE
+    instructions than it does with the Intel floating point stack 
+    instructions.</li>
+<li>The Itanium backend now has a bundling pass, which improves performance
+    by ~10% and reduces code size (previously it unconditionally inserted a stop
+    bit after every instruction).</li>
+</ul>
+</div>
 
 <!--_________________________________________________________________________-->
 <div class="doc_subsubsection"><a name="othernew">Other New Features</a></div>
 
 <div class="doc_text">
 <ul>
-<li>foo</li>
+<li>The Mac OS/X PowerPC and X86 backends now have initial support for
+    Darwin DWARF
+    debugging information, however, debug info generation has been disabled for
+    the 1.7 release in llvmgcc4.</li>
+<li>LLVM includes the new <a href="docs/CommandGuide/html/llvm-config.html">
+    llvm-config</a> utility, which makes it easier to build and link programs
+    against the LLVM libraries when not using the LLVM makefiles.</li>
+<li>LLVM now supports first class global ctor/dtor initialization lists, no
+    longer forcing targets to use "__main".</li>
+<li>LLVM supports assigning globals and functions to a particular section
+    in the result executable using the GCC section attribute.</li>
+<li><a href="ExtendingLLVM.html">Adding intrinsics to LLVM</a> is now
+     significantly easier.</li>
+<li>llvmgcc4 now fully supports C99 Variable Length Arrays, including dynamic
+    stack deallocation.</li>
+
 </ul>
 </div>
 
@@ -189,6 +253,8 @@ are used.
 
 <div class="doc_text">
 <ul>
+<li>The official LLVM URL is now <a href="http://llvm.org/">
+    http://llvm.org/</a>.</li>
 <li>The LLVM intrinsics used to be overloaded based on type: for example,
     <a href="LangRef.html#int_ctpop"><tt>llvm.ctpop</tt></a> could work with any
     integer datatype.  They are now separated into different intrinsics with
@@ -287,7 +353,7 @@ components, please contact us on the llvmdev list.</p>
 <div class="doc_text">
 
 <ul>
-  <li>The <a href="http://llvm.org/PR656">configure script sometimes fails on Solaris/Sparc</a>. A work around is documented in <a href="http://llvm.org/PR656">PR656.</a></li>
+<li>none yet</li>
 </ul>
 </div>
 
@@ -318,7 +384,7 @@ components, please contact us on the llvmdev list.</p>
 <p>
 llvm-gcc3 has many significant problems that are fixed by llvm-gcc4.  See
     those blocked on the <a href="http://llvm.org/PR498">llvm-gcc4 meta bug</a>.
-Two signicant ones include:</p>
+Two major ones include:</p>
 
 <ul>
 <li>With llvm-gcc3, 
@@ -646,7 +712,8 @@ programs.</li>
 <div class="doc_text">
 
 <ul>
-<li>None yet</li>
+<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
+    support the 64-bit SPARC ABI (-m64).</li>
 </ul>
 
 </div>