| ======================== |
| LLVM 3.4.1 Release Notes |
| ======================== |
| |
| .. contents:: |
| :local: |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the LLVM Compiler Infrastructure, |
| release 3.4. Here we describe the status of LLVM, including major improvements |
| from the previous release, improvements in various subprojects of LLVM, and |
| some of the current users of the code. All LLVM releases may be downloaded |
| from the `LLVM releases web site <http://llvm.org/releases/>`_. |
| |
| For more information about LLVM, including information about the latest |
| release, please check out the `main LLVM web site <http://llvm.org/>`_. If you |
| have questions or comments, the `LLVM Developer's Mailing List |
| <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send |
| them. |
| |
| Note that if you are reading this file from a Subversion checkout or the main |
| LLVM web page, this document applies to the *next* release, not the current |
| one. To see the release notes for a specific release, please see the `releases |
| page <http://llvm.org/releases/>`_. |
| |
| Changes in 3.4.2 |
| ================ |
| |
| * libLLVM-3.4.so soname fix. |
| |
| * PowerPC: Fix for 128-bit shifts. |
| |
| * R600: Shader calling convention fix. |
| |
| |
| Non-comprehensive list of changes in 3.4.1 |
| ========================================== |
| |
| * Various bug fixes for AArch64, ARM, PowerPC, R600, and X86 targets. |
| |
| * R600 geometry shader support |
| |
| * Fix for vaargs on X86 |
| |
| Non-comprehensive list of changes in 3.4 |
| ======================================== |
| |
| * This is expected to be the last release of LLVM which compiles using a C++98 |
| toolchain. We expect to start using some C++11 features in LLVM and other |
| sub-projects starting after this release. That said, we are committed to |
| supporting a reasonable set of modern C++ toolchains as the host compiler on |
| all of the platforms. This will at least include Visual Studio 2012 on |
| Windows, and Clang 3.1 or GCC 4.7.x on Mac and Linux. The final set of |
| compilers (and the C++11 features they support) is not set in stone, but we |
| wanted users of LLVM to have a heads up that the next release will involve |
| a substantial change in the host toolchain requirements. |
| |
| * The regression tests now fail if any command in a pipe fails. To disable it in |
| a directory, just add ``config.pipefail = False`` to its ``lit.local.cfg``. |
| See :doc:`Lit <CommandGuide/lit>` for the details. |
| |
| * Support for exception handling has been removed from the old JIT. Use MCJIT |
| if you need EH support. |
| |
| * The R600 backend is not marked experimental anymore and is built by default. |
| |
| * ``APFloat::isNormal()`` was renamed to ``APFloat::isFiniteNonZero()`` and |
| ``APFloat::isIEEENormal()`` was renamed to ``APFloat::isNormal()``. This |
| ensures that ``APFloat::isNormal()`` conforms to IEEE-754R-2008. |
| |
| * The library call simplification pass has been removed. Its functionality |
| has been integrated into the instruction combiner and function attribute |
| marking passes. |
| |
| * Support for building using Visual Studio 2008 has been dropped. Use VS 2010 |
| or later instead. For more information, see the `Getting Started using Visual |
| Studio <GettingStartedVS.html>`_ page. |
| |
| * The Loop Vectorizer that was previously enabled for ``-O3`` is now enabled |
| for ``-Os`` and ``-O2``. |
| |
| * The new SLP Vectorizer is now enabled by default. |
| |
| * ``llvm-ar`` now uses the new Object library and produces archives and |
| symbol tables in the gnu format. |
| |
| * FileCheck now allows specifing ``-check-prefix`` multiple times. This |
| helps reduce duplicate check lines when using multiple RUN lines. |
| |
| * The bitcast instruction no longer allows casting between pointers |
| with different address spaces. To achieve this, use the new addrspacecast |
| instruction. |
| |
| * Different sized pointers for different address spaces should now |
| generally work. This is primarily useful for GPU targets. |
| |
| * OCaml bindings have been significantly extended to cover almost all of the |
| LLVM libraries. |
| |
| Mips Target |
| ----------- |
| |
| Support for the MIPS SIMD Architecture (MSA) has been added. MSA is supported |
| through inline assembly, intrinsics with the prefix '``__builtin_msa``', and |
| normal code generation. |
| |
| For more information on MSA (including documentation for the instruction set), |
| see the `MIPS SIMD page at Imagination Technologies |
| <http://imgtec.com/mips/mips-simd.asp>`_ |
| |
| PowerPC Target |
| -------------- |
| |
| Changes in the PowerPC backend include: |
| |
| * fast-isel support (for faster ``-O0`` code generation) |
| * many improvements to the builtin assembler |
| * support for generating unaligned (Altivec) vector loads |
| * support for generating the fcpsgn instruction |
| * generate ``frin`` for ``round()`` (not ``nearbyint()`` and ``rint()``, which |
| had been done only in fast-math mode) |
| * improved instruction scheduling for embedded cores (such as the A2) |
| * improved prologue/epilogue generation (especially in 32-bit mode) |
| * support for dynamic stack alignment (and dynamic stack allocations with large alignments) |
| * improved generation of counter-register-based loops |
| * bug fixes |
| |
| SPARC Target |
| ------------ |
| |
| The SPARC backend got many improvements, namely |
| |
| * experimental SPARC V9 backend |
| * JIT support for SPARC |
| * fp128 support |
| * exception handling |
| * TLS support |
| * leaf functions optimization |
| * bug fixes |
| |
| SystemZ/s390x Backend |
| --------------------- |
| |
| LLVM and clang can now optimize for zEnterprise z196 and zEnterprise EC12 |
| targets. In clang these targets are selected using ``-march=z196`` and |
| ``-march=zEC12`` respectively. |
| |
| External Open Source Projects Using LLVM 3.4 |
| ============================================ |
| |
| 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 3.4. |
| |
| DXR |
| --- |
| |
| `DXR <https://wiki.mozilla.org/DXR>`_ is Mozilla's code search and navigation |
| tool, aimed at making sense of large projects like Firefox. It supports |
| full-text and regex searches as well as structural queries like "Find all the |
| callers of this function." Behind the scenes, it uses a custom trigram index, |
| the re2 library, and structural data collected by a clang compiler plugin. |
| |
| LDC - the LLVM-based D compiler |
| ------------------------------- |
| |
| `D <http://dlang.org>`_ is a language with C-like syntax and static typing. It |
| pragmatically combines efficiency, control, and modeling power, with safety and |
| programmer productivity. D supports powerful concepts like Compile-Time Function |
| Execution (CTFE) and Template Meta-Programming, provides an innovative approach |
| to concurrency and offers many classical paradigms. |
| |
| `LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler |
| combined with LLVM as backend to produce efficient native code. LDC targets |
| x86/x86_64 systems like Linux, OS X, FreeBSD and Windows and also Linux/PPC64. |
| Ports to other architectures like ARM and AArch64 are underway. |
| |
| LibBeauty |
| --------- |
| |
| The `LibBeauty <http://www.libbeauty.com>`_ decompiler and reverse |
| engineering tool currently utilises the LLVM disassembler and the LLVM IR |
| Builder. The current aim of the project is to take a x86_64 binary ``.o`` file |
| as input, and produce an equivalent LLVM IR ``.bc`` or ``.ll`` file as |
| output. Support for ARM binary ``.o`` file as input will be added later. |
| |
| Likely |
| ------ |
| |
| `Likely <http://www.liblikely.org/>`_ is an open source domain specific |
| language for image recognition. Algorithms are just-in-time compiled using |
| LLVM's MCJIT infrastructure to execute on single or multi-threaded CPUs as well |
| as OpenCL SPIR or CUDA enabled GPUs. Likely exploits the observation that while |
| image processing and statistical learning kernels must be written generically |
| to handle any matrix datatype, at runtime they tend to be executed repeatedly |
| on the same type. |
| |
| Portable Computing Language (pocl) |
| ---------------------------------- |
| |
| In addition to producing an easily portable open source OpenCL |
| implementation, another major goal of `pocl <http://portablecl.org/>`_ |
| is improving performance portability of OpenCL programs with |
| compiler optimizations, reducing the need for target-dependent manual |
| optimizations. An important part of pocl is a set of LLVM passes used to |
| statically parallelize multiple work-items with the kernel compiler, even in |
| the presence of work-group barriers. This enables static parallelization of |
| the fine-grained static concurrency in the work groups in multiple ways. |
| |
| Portable Native Client (PNaCl) |
| ------------------------------ |
| |
| `Portable Native Client (PNaCl) <http://www.chromium.org/nativeclient/pnacl>`_ |
| is a Chrome initiative to bring the performance and low-level control of native |
| code to modern web browsers, without sacrificing the security benefits and |
| portability of web applications. PNaCl works by compiling native C and C++ code |
| to an intermediate representation using the LLVM clang compiler. This |
| intermediate representation is a subset of LLVM bytecode that is wrapped into a |
| portable executable, which can be hosted on a web server like any other website |
| asset. When the site is accessed, Chrome fetches and translates the portable |
| executable into an architecture-specific machine code optimized directly for |
| the underlying device. PNaCl lets developers compile their code once to run on |
| any hardware platform and embed their PNaCl application in any website, |
| enabling developers to directly leverage the power of the underlying CPU and |
| GPU. |
| |
| TTA-based Co-design Environment (TCE) |
| ------------------------------------- |
| |
| `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new |
| exposed datapath processors based on the Transport triggered architecture (TTA). |
| The toolset provides a complete co-design flow from C/C++ |
| programs down to synthesizable VHDL/Verilog and parallel program binaries. |
| Processor customization points include the register files, function units, |
| supported operations, and the interconnection network. |
| |
| TCE uses Clang and LLVM for C/C++/OpenCL 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 processors and |
| loads them in to the compiler backend as runtime libraries to avoid |
| per-target recompilation of larger parts of the compiler chain. |
| |
| WebCL Validator |
| --------------- |
| |
| `WebCL Validator <https://github.com/KhronosGroup/webcl-validator>`_ implements |
| validation for WebCL C language which is a subset of OpenCL ES 1.1. Validator |
| checks the correctness of WebCL C, and implements memory protection for it as a |
| source-2-source transformation. The transformation converts WebCL to memory |
| protected OpenCL. The protected OpenCL cannot access any memory ranges which |
| were not allocated for it, and its memory is always initialized to prevent |
| information leakage from other programs. |
| |
| |
| Additional Information |
| ====================== |
| |
| A wide variety of additional information is available on the `LLVM web page |
| <http://llvm.org/>`_, in particular in the `documentation |
| <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| API documentation which is up-to-date with the Subversion version of the source |
| code. You can access versions of these documents specific to this release by |
| going into the ``llvm/docs/`` directory in the LLVM tree. |
| |
| If you have any questions or comments about LLVM, please feel free to contact |
| us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |