Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 1 | ====================== |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 2 | LLVM 3.3 Release Notes |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 3 | ====================== |
| 4 | |
| 5 | .. contents:: |
| 6 | :local: |
| 7 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 8 | .. warning:: |
| 9 | These are in-progress notes for the upcoming LLVM 3.3 release. You may |
| 10 | prefer the `LLVM 3.2 Release Notes <http://llvm.org/releases/3.2/docs |
| 11 | /ReleaseNotes.html>`_. |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 12 | |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 13 | |
| 14 | Introduction |
| 15 | ============ |
| 16 | |
| 17 | This document contains the release notes for the LLVM Compiler Infrastructure, |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 18 | release 3.3. Here we describe the status of LLVM, including major improvements |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 19 | from the previous release, improvements in various subprojects of LLVM, and |
| 20 | some of the current users of the code. All LLVM releases may be downloaded |
| 21 | from the `LLVM releases web site <http://llvm.org/releases/>`_. |
| 22 | |
| 23 | For more information about LLVM, including information about the latest |
| 24 | release, please check out the `main LLVM web site <http://llvm.org/>`_. If you |
| 25 | have questions or comments, the `LLVM Developer's Mailing List |
| 26 | <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send |
| 27 | them. |
| 28 | |
| 29 | Note that if you are reading this file from a Subversion checkout or the main |
| 30 | LLVM web page, this document applies to the *next* release, not the current |
| 31 | one. To see the release notes for a specific release, please see the `releases |
| 32 | page <http://llvm.org/releases/>`_. |
| 33 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 34 | Non-comprehensive list of changes in this release |
| 35 | ================================================= |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 36 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 37 | .. NOTE |
| 38 | For small 1-3 sentence descriptions, just add an entry at the end of |
| 39 | this list. If your description won't fit comfortably in one bullet |
| 40 | point (e.g. maybe you would like to give an example of the |
| 41 | functionality, or simply have a lot to talk about), see the `NOTE` below |
| 42 | for adding a new subsection. |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 43 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 44 | * The CellSPU port has been removed. It can still be found in older versions. |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 45 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 46 | * The IR-level extended linker APIs (for example, to link bitcode files out of |
| 47 | archives) have been removed. Any existing clients of these features should |
| 48 | move to using a linker with integrated LTO support. |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 49 | |
Sean Silva | 8a72eff | 2013-01-20 03:32:55 +0000 | [diff] [blame] | 50 | * LLVM and Clang's documentation has been migrated to the `Sphinx |
| 51 | <http://sphinx-doc.org/>`_ documentation generation system which uses |
| 52 | easy-to-write reStructuredText. See `llvm/docs/README.txt` for more |
| 53 | information. |
| 54 | |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 55 | * TargetTransformInfo (TTI) is a new interface that can be used by IR-level |
| 56 | passes to obtain target-specific information, such as the costs of |
| 57 | instructions. Only "Lowering" passes such as LSR and the vectorizer are |
| 58 | allowed to use the TTI infrastructure. |
Nadav Rotem | 87c6157 | 2013-02-07 05:42:31 +0000 | [diff] [blame] | 59 | |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 60 | * We've improved the X86 and ARM cost model. |
Nadav Rotem | 2119cf0 | 2013-02-07 05:44:58 +0000 | [diff] [blame] | 61 | |
Bill Wendling | 6eaab0d | 2013-02-13 21:10:15 +0000 | [diff] [blame] | 62 | * The Attributes classes have been completely rewritten and expanded. They now |
| 63 | support not only enumerated attributes and alignments, but "string" |
| 64 | attributes, which are useful for passing information to code generation. See |
Sean Silva | 3e1a721 | 2013-02-26 18:22:18 +0000 | [diff] [blame] | 65 | :doc:`HowToUseAttributes` for more details. |
Bill Wendling | 6eaab0d | 2013-02-13 21:10:15 +0000 | [diff] [blame] | 66 | |
Jakob Stoklund Olesen | a231033 | 2013-03-25 00:36:53 +0000 | [diff] [blame] | 67 | * TableGen's syntax for instruction selection patterns has been simplified. |
| 68 | Instead of specifying types indirectly with register classes, you should now |
| 69 | specify types directly in the input patterns. See ``SparcInstrInfo.td`` for |
| 70 | examples of the new syntax. The old syntax using register classes still |
| 71 | works, but it will be removed in a future LLVM release. |
| 72 | |
Rafael Espindola | d31ba13 | 2013-05-07 12:29:17 +0000 | [diff] [blame] | 73 | * MCJIT now supports exception handling. Support for it in the old jit will be |
| 74 | removed in the 3.4 release. |
| 75 | |
Andrew Trick | eb4d746 | 2013-05-07 17:34:35 +0000 | [diff] [blame] | 76 | * Command line options can now be grouped into categories which are shown in |
| 77 | the output of ``-help``. See :ref:`grouping options into categories`. |
| 78 | |
| 79 | * The appearance of command line options in ``-help`` that are inherited by |
| 80 | linking with libraries that use the LLVM Command line support library can now |
| 81 | be modified at runtime. See :ref:`cl::getRegisteredOptions`. |
| 82 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 83 | * ... next change ... |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 84 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 85 | .. NOTE |
| 86 | If you would like to document a larger change, then you can add a |
| 87 | subsection about it right here. You can copy the following boilerplate |
| 88 | and un-indent it (the indentation causes it to be inside this comment). |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 89 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 90 | Special New Feature |
| 91 | ------------------- |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 92 | |
Sean Silva | 4a53562 | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 93 | Makes programs 10x faster by doing Special New Thing. |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 94 | |
Tim Northover | 0f80f7b | 2013-02-13 12:46:32 +0000 | [diff] [blame] | 95 | AArch64 target |
| 96 | -------------- |
| 97 | |
| 98 | We've added support for AArch64, ARM's 64-bit architecture. Development is still |
| 99 | in fairly early stages, but we expect successful compilation when: |
| 100 | |
| 101 | - compiling standard compliant C99 and C++03 with Clang; |
| 102 | - using Linux as a target platform; |
| 103 | - where code + static data doesn't exceed 4GB in size (heap allocated data has |
| 104 | no limitation). |
| 105 | |
| 106 | Some additional functionality is also implemented, notably DWARF debugging, |
| 107 | GNU-style thread local storage and inline assembly. |
| 108 | |
Matthew Curtis | 29da043 | 2013-03-12 12:20:51 +0000 | [diff] [blame] | 109 | Hexagon Target |
| 110 | -------------- |
| 111 | |
Matthew Curtis | 624ec29 | 2013-03-18 13:08:24 +0000 | [diff] [blame] | 112 | - Removed support for legacy hexagonv2 and hexagonv3 processor |
| 113 | architectures which are no longer in use. Currently supported |
| 114 | architectures are hexagonv4 and hexagonv5. |
Matthew Curtis | 29da043 | 2013-03-12 12:20:51 +0000 | [diff] [blame] | 115 | |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 116 | Loop Vectorizer |
| 117 | --------------- |
| 118 | |
| 119 | We've continued the work on the loop vectorizer. The loop vectorizer now |
| 120 | has the following features: |
| 121 | |
Nadav Rotem | 6f4888f | 2013-04-30 21:04:04 +0000 | [diff] [blame] | 122 | - Loops with unknown trip counts. |
| 123 | - Runtime checks of pointers. |
| 124 | - Reductions, Inductions. |
| 125 | - Min/Max reductions of integers. |
| 126 | - If Conversion. |
| 127 | - Pointer induction variables. |
| 128 | - Reverse iterators. |
| 129 | - Vectorization of mixed types. |
| 130 | - Vectorization of function calls. |
| 131 | - Partial unrolling during vectorization. |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 132 | |
Nadav Rotem | 74cd12b | 2013-04-15 22:10:39 +0000 | [diff] [blame] | 133 | The loop vectorizer is now enabled by default for -O3. |
| 134 | |
| 135 | SLP Vectorizer |
| 136 | -------------- |
| 137 | |
| 138 | LLVM now has a new SLP vectorizer. The new SLP vectorizer is not enabled by |
| 139 | default but can be enabled using the clang flag -fslp-vectorize. The BB-vectorizer |
| 140 | can also be enabled using the command line flag -fslp-vectorize-aggressive. |
| 141 | |
Tom Stellard | 1c66a18 | 2013-02-08 22:24:41 +0000 | [diff] [blame] | 142 | R600 Backend |
| 143 | ------------ |
| 144 | |
| 145 | The R600 backend was added in this release, it supports AMD GPUs |
| 146 | (HD2XXX - HD7XXX). This backend is used in AMD's Open Source |
| 147 | graphics / compute drivers which are developed as part of the `Mesa3D |
| 148 | <http://www.mesa3d.org>`_ project. |
| 149 | |
Richard Sandiford | 46eb4a6 | 2013-05-07 15:52:32 +0000 | [diff] [blame] | 150 | SystemZ/s390x Backend |
| 151 | --------------------- |
| 152 | |
| 153 | LLVM and clang now support IBM's z/Architecture. At present this support |
| 154 | is restricted to GNU/Linux (GNU triplet s390x-linux-gnu) and requires |
| 155 | z10 or greater. |
| 156 | |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 157 | |
Pekka Jaaskelainen | 555e8f6 | 2013-05-03 07:37:04 +0000 | [diff] [blame] | 158 | External Open Source Projects Using LLVM 3.3 |
| 159 | ============================================ |
| 160 | |
| 161 | An exciting aspect of LLVM is that it is used as an enabling technology for |
| 162 | a lot of other language and tools projects. This section lists some of the |
| 163 | projects that have already been updated to work with LLVM 3.3. |
| 164 | |
| 165 | |
| 166 | Portable Computing Language (pocl) |
| 167 | ---------------------------------- |
| 168 | |
| 169 | In addition to producing an easily portable open source OpenCL |
| 170 | implementation, another major goal of `pocl <http://pocl.sourceforge.net/>`_ |
| 171 | is improving performance portability of OpenCL programs with |
| 172 | compiler optimizations, reducing the need for target-dependent manual |
| 173 | optimizations. An important part of pocl is a set of LLVM passes used to |
| 174 | statically parallelize multiple work-items with the kernel compiler, even in |
| 175 | the presence of work-group barriers. This enables static parallelization of |
| 176 | the fine-grained static concurrency in the work groups in multiple ways. |
| 177 | |
| 178 | TTA-based Co-design Environment (TCE) |
| 179 | ------------------------------------- |
| 180 | |
| 181 | `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new |
| 182 | processors based on the Transport triggered architecture (TTA). |
| 183 | The toolset provides a complete co-design flow from C/C++ |
| 184 | programs down to synthesizable VHDL/Verilog and parallel program binaries. |
| 185 | Processor customization points include the register files, function units, |
| 186 | supported operations, and the interconnection network. |
| 187 | |
| 188 | TCE uses Clang and LLVM for C/C++/OpenCL C language support, target independent |
| 189 | optimizations and also for parts of code generation. It generates new |
| 190 | LLVM-based code generators "on the fly" for the designed TTA processors and |
| 191 | loads them in to the compiler backend as runtime libraries to avoid |
| 192 | per-target recompilation of larger parts of the compiler chain. |
| 193 | |
Arnaud A. de Grandmaison | 38286be | 2013-05-15 14:05:01 +0000 | [diff] [blame] | 194 | Just-in-time Adaptive Decoder Engine (Jade) |
| 195 | ------------------------------------------- |
| 196 | |
| 197 | `Jade <https://github.com/orcc/jade>`_ (Just-in-time Adaptive Decoder Engine) |
| 198 | is a generic video decoder engine using LLVM for just-in-time compilation of |
| 199 | video decoder configurations. Those configurations are designed by MPEG |
| 200 | Reconfigurable Video Coding (RVC) committee. MPEG RVC standard is built on a |
| 201 | stream-based dataflow representation of decoders. It is composed of a standard |
| 202 | library of coding tools written in RVC-CAL language and a dataflow |
| 203 | configuration --- block diagram --- of a decoder. |
| 204 | |
| 205 | Jade project is hosted as part of the Open RVC-CAL Compiler |
| 206 | (`Orcc <http://orcc.sf.net>`_) and requires it to translate the RVC-CAL standard |
| 207 | library of video coding tools into an LLVM assembly code. |
Sean Silva | a79535c | 2013-02-07 05:56:46 +0000 | [diff] [blame] | 208 | |
Kai Nacke | ea99163 | 2013-05-26 17:37:43 +0000 | [diff] [blame^] | 209 | LDC - the LLVM-based D compiler |
| 210 | ------------------------------- |
| 211 | |
| 212 | `D <http://dlang.org>`_ is a language with C-like syntax and static typing. It |
| 213 | pragmatically combines efficiency, control, and modeling power, with safety and |
| 214 | programmer productivity. D supports powerful concepts like Compile-Time Function |
| 215 | Execution (CTFE) and Template Meta-Programming, provides an innovative approach |
| 216 | to concurrency and offers many classical paradigms. |
| 217 | |
| 218 | `LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler |
| 219 | combined with LLVM as backend to produce efficient native code. LDC targets |
| 220 | x86/x86_64 systems like Linux, OS X and Windows and also Linux/PPC64. Ports to |
| 221 | other architectures like ARM are underway. |
| 222 | |
| 223 | |
Dmitri Gribenko | e17d858 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 224 | Additional Information |
| 225 | ====================== |
| 226 | |
| 227 | A wide variety of additional information is available on the `LLVM web page |
| 228 | <http://llvm.org/>`_, in particular in the `documentation |
| 229 | <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| 230 | API documentation which is up-to-date with the Subversion version of the source |
| 231 | code. You can access versions of these documents specific to this release by |
| 232 | going into the ``llvm/docs/`` directory in the LLVM tree. |
| 233 | |
| 234 | If you have any questions or comments about LLVM, please feel free to contact |
| 235 | us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |
| 236 | |