diff options
-rw-r--r-- | docs/ReleaseNotes.html | 135 |
1 files changed, 78 insertions, 57 deletions
diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index c6b946504f..0a750081e6 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -29,10 +29,10 @@ </div> <!-- -<h1 style="color:red">These are in-progress notes for the upcoming LLVM 2.7 +<h1 style="color:red">These are in-progress notes for the upcoming LLVM 2.8 release.<br> You may prefer the -<a href="http://llvm.org/releases/2.6/docs/ReleaseNotes.html">LLVM 2.6 +<a href="http://llvm.org/releases/2.6/docs/ReleaseNotes.html">LLVM 2.7 Release Notes</a>.</h1>--> <!-- *********************************************************************** --> @@ -383,7 +383,7 @@ organization changes have happened: </p> <ul> -<li>LLVM has a new <a href="http://llvm.org/Logo.html">official Logo</a>!</li> +<li>LLVM has a new <a href="http://llvm.org/Logo.html">official logo</a>!</li> <li>Ted Kremenek and Doug Gregor have stepped forward as <a href="http://llvm.org/docs/DeveloperPolicy.html#owners">Code Owners</a> of the @@ -396,7 +396,7 @@ organization changes have happened: <li>The LLVM web pages are now checked into the SVN server, in the "www", "www-pubs" and "www-releases" SVN modules. Previously they were hidden in a - largely inaccessible old CVS server.</p> + largely inaccessible old CVS server.</li> <li><a href="http://llvm.org">llvm.org</a> is now hosted on a new (and much faster) server. It is still graciously hosted at the University of Illinois @@ -414,11 +414,11 @@ organization changes have happened: <p>LLVM 2.7 includes several major new capabilities:</p> <ul> -<li>This release includes initial support for the <a +<li>2.7 includes initial support for the <a href="http://en.wikipedia.org/wiki/MicroBlaze">MicroBlaze</a> target. MicroBlaze is a soft processor core designed for Xilinx FPGAs.</li> -<li>LLVM 2.7 includes a new LLVM IR "extensible metadata" feature. This feature +<li>2.7 includes a new LLVM IR "extensible metadata" feature. This feature supports many different use cases, including allowing front-end authors to encode source level information into LLVM IR, which is consumed by later language-specific passes. This is a great way to do high-level optimizations @@ -426,26 +426,26 @@ organization changes have happened: href="http://blog.llvm.org/2010/04/extensible-metadata-in-llvm-ir.html"> Extensible Metadata Blog Post</a> for more information.</li> -<li>LLVM 2.7 encodes <a href="SourceLevelDebugging.html">debug information</a> +<li>2.7 encodes <a href="SourceLevelDebugging.html">debug information</a> in a completely new way, built on extensible metadata. The new implementation is much more memory efficient and paves the way for improvements to optimized code debugging experience.</li> -<li>LLVM 2.7 now directly supports taking the address of a label and doing an +<li>2.7 now directly supports taking the address of a label and doing an indirect branch through a pointer. This is particularly useful for interpreter loops, and is used to implement the GCC "address of label" extension. For more information, see the <a href="http://blog.llvm.org/2010/01/address-of-label-and-indirect-branches.html"> Address of Label and Indirect Branches in LLVM IR Blog Post</a>. -<li>LLVM 2.7 is the first release to start supporting APIs for assembling and +<li>2.7 is the first release to start supporting APIs for assembling and disassembling target machine code. These APIs are useful for a variety of low level clients, and are surfaced in the new "enhanced disassembly" API. For more information see the <a href="http://blog.llvm.org/2010/01/x86-disassembler.html">The X86 Disassembler Blog Post</a> for more information.</li> -<li>LLVM 2.7 includes major parts of the work required by the new MC Project, +<li>2.7 includes major parts of the work required by the new MC Project, which aims to rework our handling of low-level machine code. A few targets have been refactored to support it, and work is underway to support a native assembler in LLVM. This work is not complete in LLVM 2.7, but you has made @@ -468,17 +468,17 @@ Address of Label and Indirect Branches in LLVM IR Blog Post</a>. expose new optimization opportunities:</p> <ul> -<li>LLVM IR now supports a 16-bit "half float" data type through two new <a - href="LangRef.html#int_fp16">intrinsics</a> and APFloat support.</li> -<li>LLVM IR supports two <a href="LangRef.html#fnattrs">new function +<li>LLVM IR now supports a 16-bit "half float" data type through <a + href="LangRef.html#int_fp16">two new intrinsics</a> and APFloat support.</li> +<li>LLVM IR supports two new <a href="LangRef.html#fnattrs">function attributes</a>: inlinehint and alignstack(n). The former is a hint to the - optimizer that a function was declared 'inline' and thus it might be useful - to increase the chances the the inliner actually inline it. The later + optimizer that a function was declared 'inline' and thus the inliner should + weight it higher when considering inlining it. The later indicates to the code generator that the function diverges from the platform ABI on stack alignment.</li> <li>The new <a href="LangRef.html#int_objectsize">llvm.objectsize</a> intrinsic allows the optimizer to infer the sizes of memory objects in some cases. - This intrinsic is used to implement the GCC __builtin_object_size + This intrinsic is used to implement the GCC <tt>__builtin_object_size</tt> extension.</li> <li>LLVM 2.7 has pre-alpha support for <a href="http://llvm.org/docs/LangRef.html#t_union">unions in LLVM IR</a>. @@ -501,47 +501,50 @@ release includes a few major enhancements and additions to the optimizers:</p> <ul> -<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> <li>Jump threading is now much more aggressive at simplifying correlated - conditionals and threading blocks with otherwise complex logic. CondProp pass - removed (functionality merged into jump threading).</li> -<li>New SSAUpdater and MachineSSAUpdater classes for unstructured ssa updating, - changed jump threading, GVN, etc to use it which simplified them and speed - them up.</li> - - -<li> -The Optimal Edge Profiling implementation in 2.6 was more a proof of -concept. The current implementation (the one that will go into 2.7) is -now stable and (as far as my tests go) bug free. - -The profiling with instrumentation via "opt" and analysis via the tool -"llvm-prof" should Work As Expected (TM). - -Two things are missing: - -*) Still missing is the modification of all -std-compile-opt passes to -update the profiling information according to the changes made to the -CFG, I'm planning to do this after my master thesis is finished. This -will enable all passes to use the ProfileInfo if available and base -decisions on that information. - -*) GCC has the options "-pg", "-fprofile-arcs" and "--coverage" that -insert profiling code and "-fprofile-use" to use them the next time -during compilation. I guess this options should also work properly in -llvm-gcc and clang?</li> + conditionals and threading blocks with otherwise complex logic. It has + subsumed the old "Conditional Propagation" pass, and -condprop has been + removed from LLVM 2.7.</li> +<li>The -instcombine pass has been refactored from being one huge file to being + a library of its own. Internally, it uses a customized IRBuilder to clean + it up and simplify it.</li> + +<li>The optimal edge profiling pass is reliable and much more complete than in + 2.6. It can be used with the llvm-prof tool but isn't wired up to the + llvm-gcc and clang command line options yet.</li> + +<li>A new experimental alias analysis implementation, -scev-aa, has been added. + It uses LLVM's Scalar Evolution implementation to do symbolic analysis of + pointer offset expressions to disambiguate pointers. It can catch a few + cases that basicaa cannot, particularly in complex loop nests.</li> + +<li>As usual, there are countless minor optimization improvements and bug fixes, + and the default pass ordering has been tweaked for improved optimization + effectiveness.</li> </ul> @@ -670,7 +673,25 @@ href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html"> </p> <ul> -<li>The llvm/Support/Regex.h header exposes a platform independent regular +<li>The optimizer uses the new CodeMetrics class to measure the size of code. + Various passes that use thing (like the inliner, loop unswitcher, etc) all + use this to make more accurate estimates of the code size impact of various + optimizations.</li> +<li>A new <a href="http://llvm.org/doxygen/InstructionSimplify_8h-source.html"> + llvm/Analysis/InstructionSimplify.h</a> interface available for doing + symbolic simplification of instructions (e.g. <tt>a+0</tt> -> <tt>a</tt>) + without requiring the instruction to exist. This centralizes a lot of + ad-hoc symbolic manipulation code scattered in various passes.</li> +<li>The optimizer now uses a new <a + href="http://llvm.org/doxygen/SSAUpdater_8h-source.html">SSAUpdater</a> + class which efficiently supports + doing unstructured SSA update operations. This centralized a bunch of code + scattered through various passes (e.g. jump threading, lcssa, loop rotate, + etc) for doing this sort of thing. The code generator has an similar + <a href="http://llvm.org/doxygen/MachineSSAUpdater_8h-source.html"> + MachineSSAUpdater</a> class.</li> +<li>The <a href="http://llvm.org/doxygen/Regex_8h-source.html"> + llvm/Support/Regex.h</a> header exposes a platform independent regular expression API. Building on this, the <a href="TestingGuide.html#FileCheck">FileCheck</a> utility now supports regular exressions.</li> |