From 922d00f5f5fd202feecefadd223b12001931260b Mon Sep 17 00:00:00 2001
From: Chris Lattner
In the LLVM 2.7 time-frame, the Clang team has made many improvements:
+In the LLVM 2.8 time-frame, the Clang team has made many improvements:
void
function, etc.), sign-comparison warnings, and improved
-format-string warnings.In the LLVM 2.7 time-frame, the analyzer core has made several major and - minor improvements, including better support for tracking the fields of - structures, initial support (not enabled by default yet) for doing - interprocedural (cross-function) analysis, and new checks have been added. +
In the LLVM 2.8 time-frame,
@@ -190,26 +156,8 @@ a JVM and a CLI Virtual Machine (Microsoft .NET is an implementation of the CLI) using LLVM for static and just-in-time compilation. --With the release of LLVM 2.7, VMKit has shifted to a great framework for writing -virtual machines. VMKit now offers precise and efficient garbage collection with -multi-threading support, thanks to the MMTk memory management toolkit, as well -as just in time and ahead of time compilation with LLVM. The major changes in -VMKit 0.27 are:
+With the release of LLVM 2.8, ...
-All of the code in the compiler-rt project is available under the standard LLVM -License, a "BSD-style" license. New in LLVM 2.7: compiler_rt now -supports ARM targets.
+License, a "BSD-style" license. New in LLVM 2.8: + +Soft float support + @@ -265,7 +215,7 @@ supported, and only on linux and darwin (darwin needs an additional gcc patch).-DragonEgg is a new project which is seeing its first release with llvm-2.7. +2.8 status here.
@@ -288,23 +238,13 @@ href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the LLVM MC Project Blog Post. -2.7 includes major parts of the work required by the new MC Project. 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 it has - made substantially more progress on LLVM mainline.
- -One minor example of what MC can do is to transcode an AT&T syntax - X86 .s file into intel syntax. You can do this with something like:
-- llvm-mc foo.s -output-asm-variant=1 -o foo-intel.s -- +
2.8 status here
@@ -312,171 +252,13 @@ LLVM MC Project Blog Post.An exciting aspect of LLVM is that it is used as an enabling technology for a lot of other language and tools projects. This section lists some of the - projects that have already been updated to work with LLVM 2.7.
- - - --Pure -is an algebraic/functional programming language based on term rewriting. -Programs are collections of equations which are used to evaluate expressions in -a symbolic fashion. Pure offers dynamic typing, eager and lazy evaluation, -lexical closures, a hygienic macro system (also based on term rewriting), -built-in list and matrix support (including list and matrix comprehensions) and -an easy-to-use C interface. The interpreter uses LLVM as a backend to - JIT-compile Pure programs to fast native code.
- -Pure versions 0.43 and later have been tested and are known to work with -LLVM 2.7 (and continue to work with older LLVM releases >= 2.5).
- --Roadsend PHP (rphp) is an open -source implementation of the PHP programming -language that uses LLVM for its optimizer, JIT and static compiler. This is a -reimplementation of an earlier project that is now based on LLVM. -
--Unladen Swallow is a -branch of Python intended to be fully -compatible and significantly faster. It uses LLVM's optimization passes and JIT -compiler. -
--TCE is a toolset for designing -application-specific processors (ASP) based on the Transport triggered -architecture (TTA). The toolset provides a complete co-design flow from C/C++ -programs down to synthesizable VHDL and parallel program binaries. Processor -customization points include the register files, function units, supported -operations, and the interconnection network.
- -TCE uses llvm-gcc/Clang and LLVM for C/C++ language support, target -independent optimizations and also for parts of code generation. It generates -new LLVM-based code generators "on the fly" for the designed TTA processors and -loads them in to the compiler backend as runtime libraries to avoid per-target -recompilation of larger parts of the compiler chain.
- --SAFECode is a memory safe C -compiler built using LLVM. It takes standard, unannotated C code, analyzes the -code to ensure that memory accesses and array indexing operations are safe, and -instruments the code with run-time checks when safety cannot be proven -statically. -
--IcedTea provides a -harness to build OpenJDK using only free software build tools and to provide -replacements for the not-yet free parts of OpenJDK. One of the extensions that -IcedTea provides is a new JIT compiler named Shark which uses LLVM -to provide native code generation without introducing processor-dependent -code. -
-Icedtea6 1.8 and later have been tested and are known to work with -LLVM 2.7 (and continue to work with older LLVM releases >= 2.6 as well). -
--LLVM-Lua uses LLVM - to add JIT and static compiling support to the Lua VM. Lua -bytecode is analyzed to remove type checks, then LLVM is used to compile the -bytecode down to machine code. -
-LLVM-Lua 1.2.0 have been tested and is known to work with LLVM 2.7. -
--MacRuby is an implementation of Ruby based on -core Mac OS technologies, sponsored by Apple Inc. It uses LLVM at runtime for -optimization passes, JIT compilation and exception handling. It also allows -static (ahead-of-time) compilation of Ruby code straight to machine code. -
-The upcoming MacRuby 0.6 release works with LLVM 2.7. -
--GHC is an open source, -state-of-the-art programming suite for Haskell, a standard lazy -functional programming language. It includes an optimizing static -compiler generating good code for a variety of platforms, together -with an interactive system for convenient, quick development.
- -In addition to the existing C and native code generators, GHC now -supports an LLVM -code generator. GHC supports LLVM 2.7.
- + projects that have already been updated to work with LLVM 2.8.In addition to changes to the code, between LLVM 2.6 and 2.7, a number of +
In addition to changes to the code, between LLVM 2.7 and 2.8, a number of organization changes have happened:
LLVM 2.7 includes several major new capabilities:
+LLVM 2.8 includes several major new capabilities:
Other miscellaneous features include:
If you're already an LLVM user or developer with out-of-tree changes based -on LLVM 2.6, this section lists some "gotchas" that you may run into upgrading +on LLVM 2.7, this section lists some "gotchas" that you may run into upgrading from the previous release.
In addition, many APIs have changed in this release. Some of the major LLVM API changes are: