diff options
author | Chris Lattner <sabre@nondot.org> | 2008-10-11 18:18:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-10-11 18:18:28 +0000 |
commit | 857fb1309f6bcd5e8d050f047d0ac93be9d1a0d7 (patch) | |
tree | 769bf1c0a6c7940bfb10989e91c31046be0bbd89 | |
parent | ce91ec285d89867f2048f93f31da198a227bba7a (diff) |
Strip out 2.3 info, make space for 2.4 info. I'd appreciate it if
various component owners could look through and update their areas
in the known-problems section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57376 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/ReleaseNotes.html | 314 |
1 files changed, 40 insertions, 274 deletions
diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 56dd66a21a..b152d98744 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -1,15 +1,14 @@ - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="llvm.css" type="text/css"> - <title>LLVM 2.3 Release Notes</title> + <title>LLVM 2.4 Release Notes</title> </head> <body> -<div class="doc_title">LLVM 2.3 Release Notes</div> +<div class="doc_title">LLVM 2.4 Release Notes</div> <ol> <li><a href="#intro">Introduction</a></li> @@ -36,7 +35,7 @@ <div class="doc_text"> <p>This document contains the release notes for the LLVM compiler -infrastructure, release 2.3. Here we describe the status of LLVM, including +infrastructure, release 2.4. Here we describe the status of LLVM, including major improvements from the previous release and any known problems. All LLVM releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM releases web site</a>.</p> @@ -62,12 +61,12 @@ current one. To see the release notes for a specific releases, please see the <div class="doc_text"> -<p>This is the fourteenth public release of the LLVM Compiler Infrastructure. -It includes a large number of features and refinements from LLVM 2.2.</p> +<p>This is the fifteenth public release of the LLVM Compiler Infrastructure. +It includes a large number of features and refinements from LLVM 2.3.</p> </div> -<!-- Unfinished features in 2.3: +<!-- Unfinished features in 2.4: Machine LICM Machine Sinking LegalizeDAGTypes @@ -75,47 +74,17 @@ It includes a large number of features and refinements from LLVM 2.2.</p> <!--=========================================================================--> <div class="doc_subsection"> -<a name="changes">Major Changes in LLVM 2.3</a> +<a name="changes">Major Changes in LLVM 2.4</a> </div> <div class="doc_text"> -<p>LLVM 2.3 no longer supports llvm-gcc 4.0, it has been replaced with - llvm-gcc 4.2.</p> - -<p>LLVM 2.3 no longer includes the <tt>llvm-upgrade</tt> tool. It was useful - for upgrading LLVM 1.9 files to LLVM 2.x syntax, but you can always use a - previous LLVM release to do this. One nice impact of this is that the LLVM - regression test suite no longer depends on llvm-upgrade, which makes it run - faster.</p> - -<p>The <tt>llvm2cpp</tt> tool has been folded into llc, use - <tt>llc -march=cpp</tt> instead of <tt>llvm2cpp</tt>.</p> +<p>....</p> <p>LLVM API Changes:</p> <ul> -<li>Several core LLVM IR classes have migrated to use the - '<tt>FOOCLASS::Create(...)</tt>' pattern instead of '<tt>new - FOOCLASS(...)</tt>' (e.g. where FOOCLASS=<tt>BasicBlock</tt>). We hope to - standardize on <tt>FOOCLASS::Create</tt> for all IR classes in the future, - but not all of them have been moved over yet.</li> -<li>LLVM 2.3 renames the LLVMBuilder and LLVMFoldingBuilder classes to - <a href="http://llvm.org/doxygen/classllvm_1_1IRBuilder.html">IRBuilder</a>. - </li> -<li>MRegisterInfo was renamed to - <a href="http://llvm.org/doxygen/classllvm_1_1TargetRegisterInfo.html"> - TargetRegisterInfo</a>.</li> -<li>The MappedFile class is gone, please use - <a href="http://llvm.org/doxygen/classllvm_1_1MemoryBuffer.html"> - MemoryBuffer</a> instead.</li> -<li>The '<tt>-enable-eh</tt>' flag to llc has been removed. Now code should - encode whether it is safe to omit unwind information for a function by - tagging the Function object with the '<tt>nounwind</tt>' attribute.</li> -<li>The ConstantFP::get method that uses APFloat now takes one argument - instead of two. The type argument has been removed, and the type is - now inferred from the size of the given APFloat value.</li> - +<li>....</li> </ul> </div> @@ -126,12 +95,12 @@ It includes a large number of features and refinements from LLVM 2.2.</p> <div class="doc_text"> <p> -The core LLVM 2.3 distribution currently consists of code from the core LLVM +The core LLVM 2.4 distribution currently consists of code from the core LLVM repository (which roughly contains the LLVM optimizer, code generators and supporting tools) and the llvm-gcc repository. In addition to this code, the LLVM Project includes other sub-projects that are in development. The two which -are the most actively developed are the new <a href="#vmkit">vmkit Project</a> -and the <a href="#clang">Clang Project</a>. +are the most actively developed are the <a href="#clang">Clang Project</a> and +<a href="#vmkit">vmkit Project</a>. </p> </div> @@ -142,28 +111,11 @@ and the <a href="#clang">Clang Project</a>. <div class="doc_text"> <p> -The "vmkit" project is a new addition to the LLVM family. It is an -implementation of a JVM and a CLI Virtual Machines (Microsoft .NET is an +The <a href="http://vmkit.llvm.org/">"vmkit" project</a> is an implementation of +a JVM and a CLI Virtual Machines (Microsoft .NET is an implementation of the CLI) using the Just-In-Time compiler of LLVM.</p> -<p>The JVM, called JnJVM, executes real-world applications such as Apache -projects (e.g. Felix and Tomcat) and the SpecJVM98 benchmark. It uses the GNU -Classpath project for the base classes. The CLI implementation, called N3, is -its in early stages but can execute simple applications and the "pnetmark" -benchmark. It uses the pnetlib project as its core library.</p> - -<p>The 'vmkit' VMs compare in performance with industrial and top open-source -VMs on scientific applications. Besides the JIT, the VMs use many features of -the LLVM framework, including the standard set of optimizations, atomic -operations, custom function provider and memory manager for JITed methods, and -specific virtual machine optimizations. vmkit is not an official part of LLVM -2.3 release. It is publicly available under the LLVM license and can be -downloaded from: -</p> - -<div class="doc_code"> -<pre>svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit</pre> -</div> +<p>...</p> </div> @@ -182,12 +134,12 @@ generation support is far enough along to build many C applications. While not yet production quality, it is progressing very nicely. In addition, C++ front-end work has started to make significant progress.</p> -<p>At this point, Clang is most useful if you are interested in source-to-source -transformations (such as refactoring) and other source-level tools for C and -Objective-C. Clang now also includes tools for turning C code into pretty HTML, -and includes a new <a href="http://clang.llvm.org/StaticAnalysis.html">static -analysis tool</a> in development. This tool focuses on automatically finding -bugs in C and Objective-C code.</p> +<p>Codegen progress/state +</p> + +<p> +<a href="http://clang.llvm.org/StaticAnalysis.html">static analysis tool</a> +</p> </div> @@ -200,7 +152,7 @@ bugs in C and Objective-C code.</p> <div class="doc_text"> -<p>LLVM 2.3 includes a huge number of bug fixes, performance tweaks and minor +<p>LLVM 2.4 includes a huge number of bug fixes, performance tweaks and minor improvements. Some of the major improvements and new features are listed in this section. </p> @@ -213,52 +165,18 @@ this section. <div class="doc_text"> -<p>LLVM 2.3 includes several major new capabilities:</p> +<p>LLVM 2.4 includes several major new capabilities:</p> <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> +<li> + <p>MRVs got generalized to FCAs.</p> + </li> -<li><p>LLVM 2.3 includes a completely rewritten interface for <a - href="LinkTimeOptimization.html">Link Time Optimization</a>. This interface - is written in C, which allows for easier integration with C code bases, and - incorporates improvements we learned about from the first incarnation of the - interface.</p></li> +<li><p>fast isel, -O0 compile times</p></li> + +<li><p>Attrs changes?</p></li> -<li><p>The <a href="tutorial/LangImpl1.html">Kaleidoscope tutorial</a> now - includes a "port" of the tutorial that <a - href="tutorial/OCamlLangImpl1.html">uses the Ocaml bindings</a> to implement - the Kaleidoscope language.</p></li> +<li><p>...</p></li> </ul> @@ -272,19 +190,12 @@ this section. <div class="doc_text"> -<p>LLVM 2.3 fully supports the llvm-gcc 4.2 front-end, and includes support +<p>LLVM 2.4 fully supports the llvm-gcc 4.2 front-end, and includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.</p> <p> <ul> -<li>llvm-gcc 4.2 includes numerous fixes to better support the Objective-C -front-end. Objective-C now works very well on Mac OS/X.</li> - -<li>Fortran <tt>EQUIVALENCE</tt>s are now supported by the gfortran -front-end.</li> - -<li>llvm-gcc 4.2 includes many other fixes which improve conformance with the -relevant parts of the GCC testsuite.</li> +<li>...</li> </ul> @@ -301,17 +212,7 @@ relevant parts of the GCC testsuite.</li> </p> <ul> -<li>LLVM IR now directly represents "common" linkage, instead of representing it -as a form of weak linkage.</li> - -<li>LLVM IR now has support for atomic operations, and this functionality can be -accessed through the llvm-gcc "<tt>__sync_synchronize</tt>", -"<tt>__sync_val_compare_and_swap</tt>", and related builtins. Support for -atomics are available in the Alpha, X86, X86-64, and PowerPC backends.</li> - -<li>The C and Ocaml bindings have extended to cover pass managers, several -transformation passes, iteration over the LLVM IR, target data, and parameter -attribute lists.</li> +<li>...</li> </ul> </div> @@ -324,64 +225,11 @@ attribute lists.</li> <div class="doc_text"> <p>In addition to a huge array of bug fixes and minor performance tweaks, the -LLVM 2.3 optimizers support a few major enhancements:</p> +LLVM 2.4 optimizers support a few major enhancements:</p> <ul> -<li><p>Loop index set splitting on by default. -This transformation hoists conditions from loop bodies and reduces a loop's -iteration space to improve performance. For example,</p> - -<div class="doc_code"> -<pre> -for (i = LB; i < UB; ++i) - if (i <= NV) - LOOP_BODY -</pre> -</div> - -<p>is transformed into:</p> - -<p><div class="doc_code"> -<pre> -NUB = min(NV+1, UB) -for (i = LB; i < NUB; ++i) - LOOP_BODY -</pre> -</div> -</p> -</li> - -<li>LLVM now includes a new <tt>memcpy</tt> optimization pass which removes -dead <tt>memcpy</tt> calls, unneeded copies of aggregates, and performs -return slot optimization. The LLVM optimizer now notices long sequences of -consecutive stores and merges them into <tt>memcpy</tt>'s where profitable.</li> - -<li>Alignment detection for vector memory references and for <tt>memcpy</tt> and -<tt>memset</tt> is now more aggressive.</li> - -<li>The Aggressive Dead Code Elimination (ADCE) optimization has been rewritten -to make it both faster and safer in the presence of code containing infinite -loops. Some of its prior functionality has been factored out into the loop -deletion pass, which <em>is</em> safe for infinite loops. The new ADCE pass is -no longer based on control dependence, making it run faster.</li> - -<li>The 'SimplifyLibCalls' pass, which optimizes calls to libc and libm - functions for C-based languages, has been rewritten to be a FunctionPass - instead a ModulePass. This allows it to be run more often and to be - included at -O1 in llvm-gcc. It was also extended to include more - optimizations and several corner case bugs were fixed.</li> - -<li>LLVM now includes a simple 'Jump Threading' pass, which attempts to simplify - conditional branches using information about predecessor blocks, simplifying - the control flow graph. This pass is pretty basic at this point, but - catches some important cases and provides a foundation to build on.</li> - -<li>Several corner case bugs which could lead to deleting volatile memory - accesses have been fixed.</li> - -<li>Several optimizations have been sped up, leading to faster code generation - with the same code quality.</li> +<li>.</li> </ul> @@ -399,45 +247,9 @@ which allows us to implement more aggressive algorithms and make it run faster:</p> <ul> -<li>The code generator now has support for carrying information about memory - references throughout the entire code generation process, via the - <a href="http://llvm.org/doxygen/classllvm_1_1MachineMemOperand.html"> - MachineMemOperand</a> class. In the future this will be used to improve - both pre-pass and post-pass scheduling, and to improve compiler-debugging - output.</li> - -<li>The target-independent code generator infrastructure now uses LLVM's - <a href="http://llvm.org/doxygen/classllvm_1_1APInt.html">APInt</a> - class to handle integer values, which allows it to support integer types - larger than 64 bits (for example i128). Note that support for such types is - also dependent on target-specific support. Use of APInt is also a step - toward support for non-power-of-2 integer sizes.</li> - -<li>LLVM 2.3 includes several compile time speedups for code with large basic - blocks, particularly in the instruction selection phase, register - allocation, scheduling, and tail merging/jump threading.</li> +<li>Selection dag speedups</li> +<li>...</li> -<li>LLVM 2.3 includes several improvements which make llc's - <tt>--view-sunit-dags</tt> visualization of scheduling dependency graphs - easier to understand.</li> - -<li>The code generator allows targets to write patterns that generate subreg - references directly in .td files now.</li> - -<li><tt>memcpy</tt> lowering in the backend is more aggressive, particularly for - <tt>memcpy</tt> calls introduced by the code generator when handling - pass-by-value structure argument copies.</li> - -<li>Inline assembly with multiple register results now returns those results - directly in the appropriate registers, rather than going through memory. - Inline assembly that uses constraints like "ir" with immediates now use the - 'i' form when possible instead of always loading the value in a register. - This saves an instruction and reduces register use.</li> - -<li>Added support for PIC/GOT style <a - href="CodeGenerator.html#tailcallopt">tail calls</a> on X86/32 and initial - support for tail calls on PowerPC 32 (it may also work on PowerPC 64 but is - not thoroughly tested).</li> </ul> </div> @@ -453,48 +265,7 @@ faster:</p> </p> <ul> -<li>llvm-gcc's X86-64 ABI conformance is far improved, particularly in the - area of passing and returning structures by value. llvm-gcc compiled code - now interoperates very well on X86-64 systems with other compilers.</li> - -<li>Support for Win64 was added. This includes code generation itself, JIT - support, and necessary changes to llvm-gcc.</li> - -<li>The LLVM X86 backend now supports the support SSE 4.1 instruction set, and - the llvm-gcc 4.2 front-end supports the SSE 4.1 compiler builtins. Various - generic vector operations (insert/extract/shuffle) are much more efficient - when SSE 4.1 is enabled. The JIT automatically takes advantage of these - instructions, but llvm-gcc must be explicitly told to use them, e.g. with - <tt>-march=penryn</tt>.</li> - -<li>The X86 backend now does a number of optimizations that aim to avoid - converting numbers back and forth from SSE registers to the X87 floating - point stack. This is important because most X86 ABIs require return values - to be on the X87 Floating Point stack, but most CPUs prefer computation in - the SSE units.</li> - -<li>The X86 backend supports stack realignment, which is particularly useful for - vector code on OS's without 16-byte aligned stacks, such as Linux and - Windows.</li> - -<li>The X86 backend now supports the "sseregparm" options in GCC, which allow - functions to be tagged as passing floating point values in SSE - registers.</li> - -<li>Trampolines (taking the address of a nested function) now work on - Linux/X86-64.</li> - -<li><tt>__builtin_prefetch</tt> is now compiled into the appropriate prefetch - instructions instead of being ignored.</li> - -<li>128-bit integers are now supported on X86-64 targets. This can be used - through <tt>__attribute__((TImode))</tt> in llvm-gcc.</li> - -<li>The register allocator can now rematerialize PIC-base computations, which is - an important optimization for register use.</li> - -<li>The "t" and "f" inline assembly constraints for the X87 floating point stack - now work. However, the "u" constraint is still not fully supported.</li> +<li>...</li> </ul> @@ -510,9 +281,7 @@ faster:</p> </p> <ul> -<li>The LLVM C backend now supports vector code.</li> -<li>The Cell SPU backend includes a number of improvements. It generates better - code and its stability/completeness is improving.</li> +<li>....</li> </ul> </div> @@ -529,10 +298,7 @@ faster:</p> </p> <ul> -<li>LLVM now builds with GCC 4.3.</li> -<li>Bugpoint now supports running custom scripts (with the <tt>-run-custom</tt> - option) to determine how to execute the command and whether it is making - forward process.</li> +<li>...</li> </ul> </div> |