From owner-svn-src-all@FreeBSD.ORG Thu Oct 7 16:32:35 2010
Return-Path:
Delivered-To: svn-src-all@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
by hub.freebsd.org (Postfix) with ESMTP id D198B106564A;
Thu, 7 Oct 2010 16:32:35 +0000 (UTC) (envelope-from dim@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
by mx1.freebsd.org (Postfix) with ESMTP id BC3468FC0A;
Thu, 7 Oct 2010 16:32:35 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o97GWZWP046486;
Thu, 7 Oct 2010 16:32:35 GMT (envelope-from dim@svn.freebsd.org)
Received: (from dim@localhost)
by svn.freebsd.org (8.14.3/8.14.3/Submit) id o97GWZRU046480;
Thu, 7 Oct 2010 16:32:35 GMT (envelope-from dim@svn.freebsd.org)
Message-Id: <201010071632.o97GWZRU046480@svn.freebsd.org>
From: Dimitry Andric
Date: Thu, 7 Oct 2010 16:32:35 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-all@freebsd.org,
svn-src-vendor@freebsd.org
X-SVN-Group: vendor
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc:
Subject: svn commit: r213518 - in vendor/llvm/dist: . autoconf docs
include/llvm/ADT lib/CodeGen lib/Target/ARM lib/Target/X86
X-BeenThere: svn-src-all@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the entire src tree \(except for "
user" and " projects" \)"
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
X-List-Received-Date: Thu, 07 Oct 2010 16:32:35 -0000
Author: dim
Date: Thu Oct 7 16:32:35 2010
New Revision: 213518
URL: http://svn.freebsd.org/changeset/base/213518
Log:
Vendor import of llvm 2.8 release:
http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_28@115866
Approved by: rpaulo (mentor)
Modified:
vendor/llvm/dist/Makefile.rules
vendor/llvm/dist/autoconf/configure.ac
vendor/llvm/dist/configure
vendor/llvm/dist/docs/ReleaseNotes.html
vendor/llvm/dist/include/llvm/ADT/SmallVector.h
vendor/llvm/dist/lib/CodeGen/MachineCSE.cpp
vendor/llvm/dist/lib/Target/ARM/ARMBaseInstrInfo.cpp
vendor/llvm/dist/lib/Target/X86/X86ISelLowering.cpp
Modified: vendor/llvm/dist/Makefile.rules
==============================================================================
--- vendor/llvm/dist/Makefile.rules Thu Oct 7 15:17:16 2010 (r213517)
+++ vendor/llvm/dist/Makefile.rules Thu Oct 7 16:32:35 2010 (r213518)
@@ -941,6 +941,11 @@ ifdef EXPORTED_SYMBOL_FILE
# First, set up the native export file, which may differ from the source
# export file.
+# The option --version-script is not effective on GNU ld win32.
+ifneq (,$(filter $(HOST_OS),Cygwin MingW))
+ HAVE_LINK_VERSION_SCRIPT := 0
+endif
+
ifeq ($(HOST_OS),Darwin)
# Darwin convention prefixes symbols with underscores.
NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).sed
Modified: vendor/llvm/dist/autoconf/configure.ac
==============================================================================
--- vendor/llvm/dist/autoconf/configure.ac Thu Oct 7 15:17:16 2010 (r213517)
+++ vendor/llvm/dist/autoconf/configure.ac Thu Oct 7 16:32:35 2010 (r213518)
@@ -31,7 +31,7 @@ dnl===
dnl===-----------------------------------------------------------------------===
dnl Initialize autoconf and define the package name, version number and
dnl email address for reporting bugs.
-AC_INIT([[llvm]],[[2.8rc]],[llvmbugs@cs.uiuc.edu])
+AC_INIT([[llvm]],[[2.8]],[llvmbugs@cs.uiuc.edu])
dnl Provide a copyright substitution and ensure the copyright notice is included
dnl in the output of --version option of the generated configure script.
Modified: vendor/llvm/dist/configure
==============================================================================
--- vendor/llvm/dist/configure Thu Oct 7 15:17:16 2010 (r213517)
+++ vendor/llvm/dist/configure Thu Oct 7 16:32:35 2010 (r213518)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.60 for llvm 2.8rc.
+# Generated by GNU Autoconf 2.60 for llvm 2.8.
#
# Report bugs to .
#
@@ -561,8 +561,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='llvm'
PACKAGE_TARNAME='-llvm-'
-PACKAGE_VERSION='2.8rc'
-PACKAGE_STRING='llvm 2.8rc'
+PACKAGE_VERSION='2.8'
+PACKAGE_STRING='llvm 2.8'
PACKAGE_BUGREPORT='llvmbugs@cs.uiuc.edu'
ac_unique_file="lib/VMCore/Module.cpp"
@@ -1318,7 +1318,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures llvm 2.8rc to adapt to many kinds of systems.
+\`configure' configures llvm 2.8 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1384,7 +1384,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of llvm 2.8rc:";;
+ short | recursive ) echo "Configuration of llvm 2.8:";;
esac
cat <<\_ACEOF
@@ -1394,7 +1394,7 @@ Optional Features:
--enable-optimized Compile with optimizations enabled (default is NO)
--enable-profiling Compile with profiling enabled (default is NO)
--enable-assertions Compile with assertion checks enabled (default is
- YES)
+ NO)
--enable-expensive-checks
Compile with expensive debug checks enabled (default
is NO)
@@ -1533,7 +1533,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-llvm configure 2.8rc
+llvm configure 2.8
generated by GNU Autoconf 2.60
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1549,7 +1549,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by llvm $as_me 2.8rc, which was
+It was created by llvm $as_me 2.8, which was
generated by GNU Autoconf 2.60. Invocation command line was
$ $0 $@
@@ -21045,7 +21045,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by llvm $as_me 2.8rc, which was
+This file was extended by llvm $as_me 2.8, which was
generated by GNU Autoconf 2.60. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21098,7 +21098,7 @@ Report bugs to ."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-llvm config.status 2.8rc
+llvm config.status 2.8
configured by $0, generated by GNU Autoconf 2.60,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Modified: vendor/llvm/dist/docs/ReleaseNotes.html
==============================================================================
--- vendor/llvm/dist/docs/ReleaseNotes.html Thu Oct 7 15:17:16 2010 (r213517)
+++ vendor/llvm/dist/docs/ReleaseNotes.html Thu Oct 7 16:32:35 2010 (r213518)
@@ -3,6 +3,7 @@
+
LLVM 2.8 Release Notes
@@ -19,7 +20,6 @@
@@ -66,23 +68,20 @@ current one. To see the release notes f
Almost dead code.
include/llvm/Analysis/LiveValues.h => Dan
lib/Transforms/IPO/MergeFunctions.cpp => consider for 2.8.
- llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
GEPSplitterPass
-->
-
-
-
+
+
+
@@ -115,13 +114,32 @@ through expressive diagnostics, a high l
standards, fast compilation, and low memory use. Like LLVM, Clang provides a
modular, library-based architecture that makes it suitable for creating or
integrating with other development tools. Clang is considered a
-production-quality compiler for C and Objective-C on x86 (32- and 64-bit).
+production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
+(32- and 64-bit), and for darwin-arm targets.
In the LLVM 2.8 time-frame, the Clang team has made many improvements:
-
-
-
+
+
Clang C++ is now feature-complete with respect to the ISO C++ 1998 and 2003 standards.
+
Added support for Objective-C++.
+
Clang now uses LLVM-MC to directly generate object code and to parse inline assembly (on Darwin).
+
Introduced many new warnings, including -Wmissing-field-initializers, -Wshadow, -Wno-protocol, -Wtautological-compare, -Wstrict-selector-match, -Wcast-align, -Wunused improvements, and greatly improved format-string checking.
+
Introduced the "libclang" library, a C interface to Clang intended to support IDE clients.
+
Added support for #pragma GCC visibility, #pragma align, and others.
+
Added support for SSE, ARM NEON, and Altivec.
+
Improved support for many Microsoft extensions.
+
Implemented support for blocks in C++.
+
Implemented precompiled headers for C++.
+
Improved abstract syntax trees to retain more accurate source information.
+
Added driver support for handling LLVM IR and bitcode files directly.
+
Major improvements to compiler correctness for exception handling.
+
Improved generated code quality in some areas:
+
+
Good code generation for X86-32 and X86-64 ABI handling.
+
Improved code generation for bit-fields, although important work remains.
+
+
+
@@ -138,27 +156,64 @@ production-quality compiler for C and Ob
future!). The tool is very good at finding bugs that occur on specific
paths through code, such as on error conditions.
-
In the LLVM 2.8 time-frame,
+
The LLVM 2.8 release fixes a number of bugs and slightly improves precision
+ over 2.7, but there are no major new features in the release.
-The VMKit project is an implementation of
-a JVM and a CLI Virtual Machine (Microsoft .NET is an
-implementation of the CLI) using LLVM for static and just-in-time
-compilation.
+DragonEgg is a port of llvm-gcc to
+gcc-4.5. Unlike llvm-gcc, dragonegg in theory does not require any gcc-4.5
+modifications whatsoever (currently one small patch is needed) thanks to the
+new gcc plugin architecture.
+DragonEgg is a gcc plugin that makes gcc-4.5 use the LLVM optimizers and code
+generators instead of gcc's, just like with llvm-gcc.
+
-
With the release of LLVM 2.8, ...
+
+DragonEgg is still a work in progress, but it is able to compile a lot of code,
+for example all of gcc, LLVM and clang. Currently Ada, C, C++ and Fortran work
+well, while all other languages either don't work at all or only work poorly.
+For the moment only the x86-32 and x86-64 targets are supported, and only on
+linux and darwin (darwin may need additional gcc patches).
+
+
+
+The 2.8 release has the following notable changes:
+
+
The plugin loads faster due to exporting fewer symbols.
+
Additional vector operations such as addps256 are now supported.
+
Ada global variables with no initial value are no longer zero initialized,
+resulting in better optimization.
+
The '-fplugin-arg-dragonegg-enable-gcc-optzns' flag now runs all gcc
+optimizers, rather than just a handful.
+
Fortran programs using common variables now link correctly.
+The VMKit project is an implementation of
+a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and
+just-in-time compilation. As of LLVM 2.8, VMKit now supports copying garbage
+collectors, and can be configured to use MMTk's copy mark-sweep garbage
+collector. In LLVM 2.8, the VMKit .NET VM is no longer being maintained.
+
+
@@ -178,67 +233,91 @@ libgcc routines).
All of the code in the compiler-rt project is available under the standard LLVM
-License, a "BSD-style" license. New in LLVM 2.8:
-
-Soft float support
-
+License, a "BSD-style" license. New in LLVM 2.8, compiler_rt now supports
+soft floating point (for targets that don't have a real floating point unit),
+and includes an extensive testsuite for the "blocks" language feature and the
+blocks runtime included in compiler_rt.
-DragonEgg is a port of llvm-gcc to
-gcc-4.5. Unlike llvm-gcc, which makes many intrusive changes to the underlying
-gcc-4.2 code, dragonegg in theory does not require any gcc-4.5 modifications
-whatsoever (currently one small patch is needed). This is thanks to the new
-gcc plugin architecture, which
-makes it possible to modify the behaviour of gcc at runtime by loading a plugin,
-which is nothing more than a dynamic library which conforms to the gcc plugin
-interface. DragonEgg is a gcc plugin that causes the LLVM optimizers to be run
-instead of the gcc optimizers, and the LLVM code generators instead of the gcc
-code generators, just like llvm-gcc. To use it, you add
-"-fplugin=path/dragonegg.so" to the gcc-4.5 command line, and gcc-4.5 magically
-becomes llvm-gcc-4.5!
-
+LLDB is a brand new member of the LLVM
+umbrella of projects. LLDB is a next generation, high-performance debugger. It
+is built as a set of reusable components which highly leverage existing
+libraries in the larger LLVM Project, such as the Clang expression parser, the
+LLVM disassembler and the LLVM JIT.
-DragonEgg is still a work in progress. Currently C works very well, while C++,
-Ada and Fortran work fairly well. All other languages either don't work at all,
-or only work poorly. For the moment only the x86-32 and x86-64 targets are
-supported, and only on linux and darwin (darwin needs an additional gcc patch).
+LLDB is in early development and not included as part of the LLVM 2.8 release,
+but is mature enough to support basic debugging scenarios on Mac OS X in C,
+Objective-C and C++. We'd really like help extending and expanding LLDB to
+support new platforms, new languages, new architectures, and new features.
-2.8 status here.
+libc++ is another new member of the LLVM
+family. It is an implementation of the C++ standard library, written from the
+ground up to specifically target the forthcoming C++'0X standard and focus on
+delivering great performance.
+
+
+As of the LLVM 2.8 release, libc++ is virtually feature complete, but would
+benefit from more testing and better integration with Clang++. It is also
+looking forward to the C++ committee finalizing the C++'0x standard.
-The LLVM Machine Code (aka MC) sub-project of LLVM was created to solve a number
-of problems in the realm of assembly, disassembly, object file format handling,
-and a number of other related areas that CPU instruction-set level tools work
-in. It is a sub-project of LLVM which provides it with a number of advantages
-over other compilers that do not have tightly integrated assembly-level tools.
-For a gentle introduction, please see the Intro to the
-LLVM MC Project Blog Post.
+KLEE is a symbolic execution framework for
+programs in LLVM bitcode form. KLEE tries to symbolically evaluate "all" paths
+through the application and records state transitions that lead to fault
+states. This allows it to construct testcases that lead to faults and can even
+be used to verify some algorithms.
-
2.8 status here
-
+
Although KLEE does not have any major new features as of 2.8, we have made
+various minor improvements, particular to ease development:
+
+
Added support for LLVM 2.8. KLEE currently maintains compatibility with
+ LLVM 2.6, 2.7, and 2.8.
+
Added a buildbot for 2.6, 2.7, and trunk. A 2.8 buildbot will be coming
+ soon following release.
+
Fixed many C++ code issues to allow building with Clang++. Mostly
+ complete, except for the version of MiniSAT which is inside the KLEE STP
+ version.
+
Improved support for building with separate source and build
+ directories.
+
Added support for "long double" on x86.
+
Initial work on KLEE support for using 'lit' test runner instead of
+ DejaGNU.
+
Added configure support for using an external version of
+ STP.
+
+
+
@@ -254,231 +333,605 @@ LLVM MC Project Blog Post.
projects that have already been updated to work with LLVM 2.8.
+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.
+Horizon is a bytecode
+language and compiler written on top of LLVM, intended for producing
+single-address-space managed code operating systems that
+run faster than the equivalent multiple-address-space C systems.
+More in-depth blurb is available on the wiki.
-
This release 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.
+
+Clam AntiVirus is an open source (GPL)
+anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail
+gateways. Since version 0.96 it has bytecode
+signatures that allow writing detections for complex malware. It
+uses LLVM's JIT to speed up the execution of bytecode on
+X86, X86-64, PPC32/64, falling back to its own interpreter otherwise.
+The git version was updated to work with LLVM 2.8.
+
The
+ClamAV bytecode compiler uses Clang and LLVM to compile a C-like
+language, insert runtime checks, and generate ClamAV bytecode.
+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.
-
In addition to changes to the code, between LLVM 2.7 and 2.8, a number of
-organization changes have happened:
-
+
Pure versions 0.44 and later have been tested and are known to work with
+LLVM 2.8 (and continue to work with older LLVM releases >= 2.5).
+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 7.0 now
+supports an LLVM
+code generator. GHC supports LLVM 2.7 and later.
+Clay is a new systems programming
+language that is specifically designed for generic programming. It makes
+generic programming very concise thanks to whole program type propagation. It
+uses LLVM as its backend.
LLVM IR has several new features for better support of new targets and that
-expose new optimization opportunities:
+
+llvm-py has been updated to work
+with LLVM 2.8. llvm-py provides Python bindings for LLVM, allowing you to write a
+compiler backend or a VM in Python.
-
+
-
LLVM 2.8 changes the internal order of operands in InvokeInst
- and CallInst.
- To be portable across releases, resort to CallSite and the
- high-level accessors, such as getCalledValue and setUnwindDest.
-
-
- You can no longer pass use_iterators directly to cast<> (and similar), because
- these routines tend to perform costly dereference operations more than once. You
- have to dereference the iterators yourself and pass them in.
-
-
- llvm.memcpy.*, llvm.memset.*, llvm.memmove.* (and possibly other?) intrinsics
- take an extra parameter now (i1 isVolatile), totaling 5 parameters.
- If you were creating these intrinsic calls and prototypes yourself (as opposed
- to using Intrinsic::getDeclaration), you can use UpgradeIntrinsicFunction/UpgradeIntrinsicCall
- to be portable accross releases.
- Note that you cannot use Intrinsic::getDeclaration() in a backwards compatible
- way (needs 2/3 types now, in 2.7 it needed just 1).
-
-
- SetCurrentDebugLocation takes a DebugLoc now instead of a MDNode.
- Change your code to use
- SetCurrentDebugLocation(DebugLoc::getFromDILocation(...)).
-
-
- VISIBILITY_HIDDEN is gone.
-
-
- The RegisterPass and RegisterAnalysisGroup templates are
- considered deprecated, but continue to function in LLVM 2.8. Clients are
- strongly advised to use the upcoming INITIALIZE_PASS() and
- INITIALIZE_AG_PASS() macros instead.
-
- SMDiagnostic takes different parameters now. //FIXME: how to upgrade?
-
-
- The constructor for the Triple class no longer tries to understand odd triple
- specifications. Frontends should ensure that they only pass valid triples to
- LLVM. The Triple::normalize utility method has been added to help front-ends
- deal with funky triples.
-
+FAUST is a compiled language for real-time
+audio signal processing. The name FAUST stands for Functional AUdio STream. Its
+programming model combines two approaches: functional programming and block
+diagram composition. In addition with the C, C++, JAVA output formats, the
+Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7 and
+2.8.
Jade
+(Just-in-time Adaptive Decoder Engine) is a generic video decoder engine using
+LLVM for just-in-time compilation of video decoder configurations. Those
+configurations are designed by MPEG Reconfigurable Video Coding (RVC) committee.
+MPEG RVC standard is built on a stream-based dataflow representation of
+decoders. It is composed of a standard library of coding tools written in
+RVC-CAL language and a dataflow configuration — block diagram —
+of a decoder.
+
+
Jade project is hosted as part of the Open
+RVC-CAL Compiler and requires it to translate the RVC-CAL standard library
+of video coding tools into an LLVM assembly code.
-
In addition to a large array of minor performance tweaks and bug fixes, this
-release includes a few major enhancements and additions to the optimizers:
Neko LLVM JIT
+replaces the standard Neko JIT with an LLVM-based implementation. While not
+fully complete, it is already providing a 1.5x speedup on 64-bit systems.
+Neko LLVM JIT requires LLVM 2.8 or later.
+Crack aims to provide
+the ease of development of a scripting language with the performance of a
+compiled language. The language derives concepts from C++, Java and Python,
+incorporating object-oriented programming, operator overloading and strong
+typing. Crack 0.2 works with LLVM 2.7, and the forthcoming Crack 0.2.1 release
+builds on LLVM 2.8.
+DTMC provides support for
+Transactional Memory, which is an easy-to-use and efficient way to synchronize
+accesses to shared memory. Transactions can contain normal C/C++ code (e.g.,
+__transaction { list.remove(x); x.refCount--; }) and will be executed
+virtually atomically and isolated from other transactions.
+Kai (Japanese 会 for
+meeting/gathering) is an experimental interpreter that provides a highly
+extensible runtime environment and explicit control over the compilation
+process. Programs are defined using nested symbolic expressions, which are all
+parsed into first-class values with minimal intrinsic semantics. Kai can
+generate optimised code at run-time (using LLVM) in order to exploit the nature
+of the underlying hardware and to integrate with external software libraries.
+It is a unique exploration into world of dynamic code compilation, and the
+interaction between high level and low level semantics.
+OSL is a shading
+language designed for use in physically based renderers and in particular
+production rendering. By using LLVM instead of the interpreter, it was able to
+meet its performance goals (>= C-code) while retaining the benefits of
+runtime specialization and a portable high-level language.
+
-
We have put a significant amount of work into the code generator
-infrastructure, which allows us to implement more aggressive algorithms and make
-it run faster:
This release 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.
+
The X86 backend now supports holding X87 floating point stack values
- in registers across basic blocks, dramatically improving performance of code
- that uses long double, and when targetting CPUs that don't support SSE.
+
LLVM 2.8 includes several major new capabilities:
+
+
As mentioned above, libc++ and LLDB are major new additions to the LLVM collective.
+
LLVM 2.8 now has pretty decent support for debugging optimized code. You
+ should be able to reliably get debug info for function arguments, assuming
+ that the value is actually available where you have stopped.
+
A new 'llvm-diff' tool is available that does a semantic diff of .ll
+ files.
+
The MC subproject has made major progress in this release.
+ Direct .o file writing support for darwin/x86[-64] is now reliable and
+ support for other targets and object file formats are in progress.
LLVM IR has several new features for better support of new targets and that
+expose new optimization opportunities:
+
The memcpy, memmove, and memset
+ intrinsics now take address space qualified pointers and a bit to indicate
+ whether the transfer is "volatile" or not.
+
+
Per-instruction debug info metadata is much faster and uses less memory by
+ using the new DebugLoc class.
+
LLVM IR now has a more formalized concept of "trap values", which allow the optimizer
+ to optimize more aggressively in the presence of undefined behavior, while
+ still producing predictable results.
+
LLVM IR now supports two new linkage
+ types (linker_private_weak and linker_private_weak_def_auto) which map
+ onto some obscure MachO concepts.
In addition to a large array of minor performance tweaks and bug fixes, this
+release includes a few major enhancements and additions to the optimizers:
+
+
As mentioned above, the optimizer now has support for updating debug
+ information as it goes. A key aspect of this is the new llvm.dbg.value
+ intrinsic. This intrinsic represents debug info for variables that are
+ promoted to SSA values (typically by mem2reg or the -scalarrepl passes).
+
+
The JumpThreading pass is now much more aggressive about implied value
+ relations, allowing it to thread conditions like "a == 4" when a is known to
+ be 13 in one of the predecessors of a block. It does this in conjunction
+ with the new LazyValueInfo analysis pass.
+
The new RegionInfo analysis pass identifies single-entry single-exit regions
+ in the CFG. You can play with it with the "opt -regions analyze" or
+ "opt -view-regions" commands.
+
The loop optimizer has significantly improved strength reduction and analysis
+ capabilities. Notably it is able to build on the trap value and signed
+ integer overflow information to optimize <= and >= loops.
+
The CallGraphSCCPassManager now has some basic support for iterating within
+ an SCC when a optimizer devirtualizes a function call. This allows inlining
+ through indirect call sites that are devirtualized by store-load forwarding
+ and other optimizations.
+
The new -loweratomic pass is available
+ to lower atomic instructions into their non-atomic form. This can be useful
+ to optimize generic code that expects to run in a single-threaded
+ environment.
+The LLVM Machine Code (aka MC) subsystem was created to solve a number
+of problems in the realm of assembly, disassembly, object file format handling,
+and a number of other related areas that CPU instruction-set level tools work
+in.
+
+
The MC subproject has made great leaps in LLVM 2.8. For example, support for
+ directly writing .o files from LLC (and clang) now works reliably for
+ darwin/x86[-64] (including inline assembly support) and the integrated
+ assembler is turned on by default in Clang for these targets. This provides
+ improved compile times among other things.
+
+
+
The entire compiler has converted over to using the MCStreamer assembler API
+ instead of writing out a .s file textually.
+
The "assembler parser" is far more mature than in 2.7, supporting a full
+ complement of directives, now supports assembler macros, etc.
+
The "assembler backend" has been completed, including support for relaxation
+ relocation processing and all the other things that an assembler does.
+
The MachO file format support is now fully functional and works.
+
The MC disassembler now fully supports ARM and Thumb. ARM assembler support
+ is still in early development though.
+
The X86 MC assembler now supports the X86 AES and AVX instruction set.
+
Work on ELF and COFF object files and ARM target support is well underway,
+ but isn't useful yet in LLVM 2.8. Please contact the llvmdev mailing list
+ if you're interested in this.
+
-
This release includes a number of new APIs that are used internally, which
- may also be useful for external clients.
+
We have put a significant amount of work into the code generator
+infrastructure, which allows us to implement more aggressive algorithms and make
+it run faster:
+
-
+
The clang/gcc -momit-leaf-frame-pointer argument is now supported.
+
The clang/gcc -ffunction-sections and -fdata-sections arguments are now
+ supported on ELF targets (like GCC).
+
The MachineCSE pass is now tuned and on by default. It eliminates common
+ subexpressions that are exposed when lowering to machine instructions.
+
The "local" register allocator was replaced by a new "fast" register
+ allocator. This new allocator (which is often used at -O0) is substantially
+ faster and produces better code than the old local register allocator.
+
A new LLC "-regalloc=default" option is available, which automatically
+ chooses a register allocator based on the -O optimization level.
+
The common code generator code was modified to promote illegal argument and
+ return value vectors to wider ones when possible instead of scalarizing
+ them. For example, <3 x float> will now pass in one SSE register
+ instead of 3 on X86. This generates substantially better code since the
+ rest of the code generator was already expecting this.
+
The code generator uses a new "COPY" machine instruction. This speeds up
+ the code generator and eliminates the need for targets to implement the
+ isMoveInstr hook. Also, the copyRegToReg hook was renamed to copyPhysReg
+ and simplified.
+
The code generator now has a "LocalStackSlotPass", which optimizes stack
+ slot access for targets (like ARM) that have limited stack displacement
+ addressing.
+
A new "PeepholeOptimizer" is available, which eliminates sign and zero
+ extends, and optimizes away compare instructions when the condition result
+ is available from a previous instruction.
+
Atomic operations now get legalized into simpler atomic operations if not
+ natively supported, easing the implementation burden on targets.
+
We have added two new bottom-up pre-allocation register pressure aware schedulers:
+
+
The hybrid scheduler schedules aggressively to minimize schedule length when registers are available and avoid overscheduling in high pressure situations.
+
The instruction-level-parallelism scheduler schedules for maximum ILP when registers are available and avoid overscheduling in high pressure situations.
+
+
The tblgen type inference algorithm was rewritten to be more consistent and
+ diagnose more target bugs. If you have an out-of-tree backend, you may
+ find that it finds bugs in your target description. This support also
+ allows limited support for writing patterns for instructions that return
+ multiple results (e.g. a virtual register and a flag result). The
+ 'parallel' modifier in tblgen was removed, you should use the new support
+ for multiple results instead.
+
A new (experimental) "-rendermf" pass is available which renders a
+ MachineFunction into HTML, showing live ranges and other useful
+ details.
+
The new SubRegIndex tablegen class allows subregisters to be indexed
+ symbolically instead of numerically. If your target uses subregisters you
+ will need to adapt to use SubRegIndex when you upgrade to 2.8.
+
+
+
The -fast-isel instruction selection path (used at -O0 on X86) was rewritten
+ to work bottom-up on basic blocks instead of top down. This makes it
+ slightly faster (because the MachineDCE pass is not needed any longer) and
+ allows it to generate better code in some cases.
New features and major changes in the X86 target include:
+
+
+
+
The X86 backend now supports holding X87 floating point stack values
+ in registers across basic blocks, dramatically improving performance of code
+ that uses long double, and when targeting CPUs that don't support SSE.