[LLVMdev] [DRAFT] LLVM 1.7 release announcement notes [DRAFT]

Chris Lattner sabre at nondot.org
Wed Apr 19 23:08:07 PDT 2006


On Wed, 19 Apr 2006, Tanya Lattner wrote:
> Feedback below..

Updated, thanks!

-Chris

>> <will insert overview blurb here> Big new things: llvm-gcc4, new sparc 
>> backend, Generic vector/SSE/Altivec support, X86 Scalar SSE support, 
>> debugging support, many target-independent codegen improvements, inline 
>> asm, llvm.org/web-reg.
>> 
>> 
>> Core LLVM IR Improvements:
>> 
>> *  The LLVM IR now has full support for representing target-specific
>>   inline assembly code, as general as GCC's inline assembly.
>> *  Rob Bocchino added new LLVM insertelement and extractelement
>>   instructions, for accessing/updating scalar elements of a vector.
>> *  LLVM now has a new shufflevector instruction, for permuting the
>>   elements of a vector. http://llvm.org/docs/LangRef.html#vectorops
>> *  LLVM now supports first class global ctor/dtor initialization lists, no
>>   longer forcing targets to use "__main".
>> *  LLVM supports assigning globals and functions to a particular section
>>   in the result executable.
>> 
>> 
>> LLVM Intrinsic Improvements:
>> 
>> *  Adding target-specific intrinsics to LLVM is now really easy: entries
>>   are added to .td files and necessary support code is generated from it.
>
> say TableGen (.td) files
>
>> *  Reid contributed flexible support for "autoupgrading" intrinsics.  This
>>   is useful when we decide to change an intrinsic in a new releases of
>>   LLVM: .ll and .bc files from old releases get upgraded to the new 
>> form.*
>
> <new line> before *
>
>> Andrew added support for a new LLVM "readcyclecounter" intrinsic, for
>>   accessing low-level target timing interfaces.
>> *  LLVM now supports llvm.stacksave/llvm.stackrestore intrinsics, for
>>   proper C99 Variable Length Array support.
>> *  Reid changed many intrinsics to have fixed types instead of being
>>   overloaded based on type.
>> 
>> 
>> Mid-Level Analysis and Transformation Improvements:
>> 
>> *  The -loop-unswitch pass has had several bugs fixed, has several new
>>   features, and is enabled by default now.
>> *  Evan improved the loop strength reduction pass to use a parameterized
>>   target interface and to take advantage of strided loads on targets
>>   that support them (e.g. X86).
>> *  The -instcombine pass has a framework and implementation for simplifying
>>   code based on whether computed bits are demanded or not, based on
>>   Nate's design and implementation in the code generator.
>
> Try to reword and get rid of one "based on".
>
>> *  Nate reimplemented post-dominator analysis using the Lengauer and
>>   Tarjan algorithm, replacing the old iterative implementation.  On one
>>   extreme example his implementation is 40x faster than the old one
>>   (PR681) and uses far less memory.
>> *  Daniel Berlin contributed an ET-Forest implementation, which
>>   replaces the old LLVM DominatorSet with a far more efficient data
>>   structure (in both space and time).
>> *  Andrew wrote a new "reg2mem" which transforms an LLVM function so that
>>   there are no SSA values live across basic blocks.
>> *  The -scalarrepl pass can now promote simple unions to registers.
>> *  The inliner can now inline functions that have dynamic 'alloca'
>>   instructions in them (without increasing stack usage).
>> *  The -reassociate pass knows how to factor expressions in several ways,
>>   e.g. turning (A*A+A*B) into (A*(A+B)) and (X+X+Y+Y) into ((X+Y) << 1)
>> *  Saem Ghani contributed support to allow different implementations of
>>   the abstract callgraph interface, e.g., based on pointer analysis.
>> 
>> 
>> Debugging Support Improvements:
>> 
>> *  Jim implemented almost complete debugging support in the llvm-gcc 4.0
>>   front-end and the x86/powerpc darwin backends.  This includes line
>>   number information, variable information, function information, frame
>>   information etc.  This is a huge leap in debug support over previous
>>   releases, the only major missing piece is support for debugging
>>   optimized code.
>> *  Jim added support to the C backend for turning line number information
>>   into #line directives in the output C file.
>> *  Jim expanded http://llvm.org/docs/SourceLevelDebugging.html and filled
>>   in many details.
>> 
>> 
>> Target-Independent Code Generator Improvements:
>> 
>> *  Nate contributed the foundation of vector support including instruction
>>   selection and tblgen pieces.
>> *  Evan contributed a new target-independent bottom-up list scheduler.
>> *  The new list scheduler was enhanced to support top-down scheduling and
>>   to support target-specific priority functions and resource conflict
>>   detectors.
>> *  The code generator now supports many simple inline assembly
>>   expressions, though there are still cases that are not handled.  If you
>>   get errors or assertions using inline assembly, please file a bugzilla
>>   bug.  Inline assembly is not currently supported in the JIT or C backend.
>> *  Evan contributed extensive additions to 'tblgen', the code
>>   generator generator, providing more expressive .td files.
>> *  Nate integrated switch statement lowering directly into the
>>   SelectionDAG machinery, instead of depending on the lower-switch pass
>>   to reduce them to branches.  In the process, he improved to algorithm
>>   to avoid emiting some dead comparisons.
>
> improved the algorithm
>
>> *  Evan significantly improved SelectionDAG support for chain and flag
>>   handling, and added support for describing these nodes in .td files.
>> *  Nate contributed a framework and implementation for simplifying code
>>   based on whether computed bits are demanded or not, which works well on
>>   bitfield manipulations and other bit-twiddling code, particularly for
>>   removing unneeded sign extensions.
>> *  Evan added support for adding per-instruction predicates that
>>   enable/disable specific instructions.  This is used to disable
>>   instructions that are not supported by specific subtargets, etc.
>> *  LLC has a new -fast option, instructing it to generate code quickly
>>   instead of optimizing the generated code.
>> *  Many compile-time speedups in the code generator.
>> *  The target-independent AsmPrinter module has many new features, such as
>>   support for emitting ".asciz" instead of ".ascii" when possible,
>>   support for .zerofill, support for targets that accept quoted labels,
>>   etc, and it reduces the amount of target-specific code that needs to
>>   be written.
>> *  Nate added support for byte-swap and bit rotate nodes.
>> *  The legalizer pass is now non-iterative (==faster), more simple, and
>>   several nasty libcall insertion bugs are now fixed.
>> *  The register spiller is better at optimizing inserted spill code.
>> *  Evan modified the instruction selector generator to produce code that
>>   doesn't run out of stack space when compiled with GCC 4.x.
>> *  Evan added support for lowering memset/memcpy with small fixed sizes
>>   into discrete load and store instructions.
>> *  LLVM can now inline the copysign C99/FORTRAN functions.
>> 
>> 
>> X86-Specific Code Generator Improvements:
>> 
>> *  Evan added a new DAG-DAG instruction selector for X86,
>>   replacing the 'pattern' selector.
>> *  Evan added Scalar SSE support, which provides significantly
>>   better performance than the LLVM FP stack code.
>> *  Evan added a register-pressure reducing scheduler priority function,
>>   which is now used by default on X86.
>> *  Evan added support for -fpic and -static codegen on Darwin.
>> *  Evan added initial support for subtargets in the X86 backend, including
>>   a broad range of -mcpu=* values.
>> *  Evan improved the loop strength reduction on X86, and it is now turned
>>   on by default.
>> *  Evan added support for generation of SSE3 instructions (e.g. fisttp) on
>>   subtargets that support it.
>> 
>> 
>> PowerPC-Specific Code Generator Improvements:
>> 
>> *  Full support for the Altivec instruction set, accessible with the GCC
>>   generic vector extension and the altivec.h intrinsics (llvmgcc4 only),
>>   including support for -faltivec and -maltivec.
>> *  Nate greatly simplified the PowerPC branch selector, making it more
>>   aggressive and removing support code from the target-independent code
>>   in the process.
>> *  Support for -static and -fpic codegen on Darwin.
>> *  Many improvements in the generated code.
>> 
>> 
>> IA64-Specific Code Generator Improvements:
>> 
>> *  Duraid transitioned the code generator to the new DAG-to-DAG isel
>>   framework, which is more reliable and produces better code.
>> *  The Itanium backend now has a bundling pass, which improves performance
>>   by ~10% and reduces code size.  Bundling can be improved in the future
>>   by implementing a hazard recognizer for the scheduler to build better
>>   bundles.
>> *  LLVM has been built with the HP aCC compiler and stdcxx, the Apache C++
>>   Standard Library (see http://incubator.apache.org/stdcxx/ ). While
>>   building with compilers other than g++ is not supported, doing so
>>   should now be more straightforward.
>> 
>> 
>> Alpha-specific Code Generator Improvements:
>> 
>> *  Andrew rewrote the alpha instruction selector to use the new DAG-to-DAG
>>   instruction selection framework.
>> *  Andrew fixed several bugs handling weak and linkonce linkage.
>> 
>> 
>> SPARC-Specific Code Generator Improvements:
>> 
>> *  LLVM 1.7 includes a completely rewritten SPARC backend.  This backend
>>   has several advantages over the previous LLVM SPARC backend, and will
>>   replace it entirely in LLVM 1.8.  This backend is about 3700 lines of
>>   code (making it a good reference for new targets), supports Sparc V8
>>   and V9 instructions, and produces code that is slightly better than GCC
>>   on SPEC2000.  For more details:
>>   http://lists.cs.uiuc.edu/pipermail/llvmdev/2006-February/005228.html
>> 
>> 
>> llvm-gcc 4.0:
>> 
>> *  llvm-gcc4 is a new C/C++/ObjC/ObjC++ front-end, rewritten from scratch,
>>   based on GCC 4.0.1.  This front-end is currently only supported on
>>   Mac OS/X PowerPC and Intel systems, but we hope to extend support to
>>   the other LLVM-supported systems in the future.
>> *  Supports for the GCC "section", "used" and "align" attributes.
>> *  Full support for the GCC generic vector extension.
>> *  Full support for PowerPC/Altivec and IA32/SSE intrinsics.
>> *  Full support for GCC inline assembly (note that there are currently
>>   some limitations in the code generator though).
>> *  Full support for C99 Variable Length Arrays.
>> *  llvm-gcc 4.0 fixes a broad range of long term bugs that have afflicted
>>   llvm-gcc3 in areas such as ABI compliance, union layout, and bitfield
>>   handling.  There are 28 bugs dependent on http://llvm.org/PR498.
>> 
>> 
>> Other Improvements:
>> 
>> *  The primary LLVM domain name is now http://llvm.org/.
>> *  Web form registration is no longer required to download LLVM releases.
>> *  Eric Kidd contributed the llvm-config utility, to make it easier to
>>   build and link programs against the LLVM libraries:
>>     http://llvm.org/docs/CommandGuide/html/llvm-config.html
>> *  Saem Ghani extended the PostOrderIterator class to permit external
>>   storage.
>> *  The nightly tester output now color codes performance deltas to make it
>>   easier to read at a glance.
>> *  Reid added support for multiple -rpath options to the linker.
>> *  Reid finished consolidating the host specific code into the libsystem
>>   library.
>> *  Reid removed use of fork() from bugpoint, allowing it to work on Win32
>>   systems.
>> *  Andrew improved bugpoint's handling of dynamically loaded
>>   optimization plugins.
>> *  Morten contributed patches for better support of Visual C++ 2005.
>> 
>> In addition to the new features and infrastructure we have built, we
>> have also fixed many minor bugs and have made many small optimization 
>> improvements.  LLVM 1.7 is the clearly our best release yet, and upgrading 
>> from a previous release is highly recommended.
>> 
>> As usual, if you have any questions or comments about LLVM or any of the
>> features in this status update, please feel free to contact the LLVMdev
>> mailing list (llvmdev at cs.uiuc.edu)!
>> 
>> Finally, here is the previous status report, the LLVM 1.6 announcement:
>> http://lists.cs.uiuc.edu/pipermail/llvm-announce/2005-November/000017.html
>> 
>> -Chris
>> 
>> -- 
>> http://nondot.org/sabre/
>> http://llvm.org/
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> 
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-dev mailing list