Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 1 | ====================== |
Bill Wendling | 70d39e6 | 2013-11-20 10:10:50 +0000 | [diff] [blame] | 2 | LLVM 3.5 Release Notes |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 3 | ====================== |
| 4 | |
| 5 | .. contents:: |
| 6 | :local: |
| 7 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 8 | .. warning:: |
Bill Wendling | 70d39e6 | 2013-11-20 10:10:50 +0000 | [diff] [blame] | 9 | These are in-progress notes for the upcoming LLVM 3.5 release. You may |
| 10 | prefer the `LLVM 3.4 Release Notes <http://llvm.org/releases/3.4/docs |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 11 | /ReleaseNotes.html>`_. |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 12 | |
Dmitri Gribenko | 38782b8 | 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, |
Bill Wendling | 70d39e6 | 2013-11-20 10:10:50 +0000 | [diff] [blame] | 18 | release 3.5. Here we describe the status of LLVM, including major improvements |
Dmitri Gribenko | 38782b8 | 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 | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 34 | Non-comprehensive list of changes in this release |
| 35 | ================================================= |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 36 | |
Rafael Espindola | 1840ad4 | 2014-01-10 22:06:26 +0000 | [diff] [blame] | 37 | * All backends have been changed to use the MC asm printer and support for the |
| 38 | non MC one has been removed. |
| 39 | |
Venkatraman Govindaraju | 5a96c87 | 2014-02-03 15:28:26 +0000 | [diff] [blame] | 40 | * Clang can now successfully self-host itself on Linux/Sparc64 and on |
| 41 | FreeBSD/Sparc64. |
| 42 | |
Rafael Espindola | b4eec1d | 2014-02-05 18:00:21 +0000 | [diff] [blame] | 43 | * LLVM now assumes the assembler supports ``.loc`` for generating debug line |
| 44 | numbers. The old support for printing the debug line info directly was only |
| 45 | used by ``llc`` and has been removed. |
| 46 | |
Daniel Sanders | 66d797a | 2014-02-20 09:24:15 +0000 | [diff] [blame] | 47 | * All inline assembly is parsed by the integrated assembler when it is enabled. |
| 48 | Previously this was only the case for object-file output. It is now the case |
Rafael Espindola | 48fa6ed | 2014-02-21 03:13:54 +0000 | [diff] [blame] | 49 | for assembly output as well. The integrated assembler can be disabled with |
Daniel Sanders | a4d18fc | 2014-07-23 12:59:26 +0000 | [diff] [blame^] | 50 | the ``-no-integrated-as`` option. |
Daniel Sanders | 66d797a | 2014-02-20 09:24:15 +0000 | [diff] [blame] | 51 | |
Rafael Espindola | a51f0f8 | 2014-02-28 02:17:23 +0000 | [diff] [blame] | 52 | * llvm-ar now handles IR files like regular object files. In particular, a |
Rafael Espindola | d0afc22 | 2014-07-03 21:34:25 +0000 | [diff] [blame] | 53 | regular symbol table is created for symbols defined in IR files, including |
| 54 | those in file scope inline assembly. |
Rafael Espindola | a51f0f8 | 2014-02-28 02:17:23 +0000 | [diff] [blame] | 55 | |
Rafael Espindola | 1e312c7 | 2014-05-05 17:53:29 +0000 | [diff] [blame] | 56 | * LLVM now always uses cfi directives for producing most stack |
| 57 | unwinding information. |
Rafael Espindola | 595f542 | 2014-05-05 17:33:26 +0000 | [diff] [blame] | 58 | |
Eli Bendersky | 5d5e18d | 2014-06-25 15:41:00 +0000 | [diff] [blame] | 59 | * The prefix for loop vectorizer hint metadata has been changed from |
Mark Heffernan | 9d20e42 | 2014-07-21 23:11:03 +0000 | [diff] [blame] | 60 | ``llvm.vectorizer`` to ``llvm.loop.vectorize``. In addition, |
| 61 | ``llvm.vectorizer.unroll`` metadata has been renamed |
| 62 | ``llvm.loop.interleave.count``. |
Eli Bendersky | 5d5e18d | 2014-06-25 15:41:00 +0000 | [diff] [blame] | 63 | |
Cameron McInally | 0c01caa | 2014-07-09 18:29:55 +0000 | [diff] [blame] | 64 | * Some backends previously implemented Atomic NAND(x,y) as ``x & ~y``. Now |
| 65 | all backends implement it as ``~(x & y)``, matching the semantics of GCC 4.4 |
| 66 | and later. |
| 67 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 68 | .. NOTE |
| 69 | For small 1-3 sentence descriptions, just add an entry at the end of |
| 70 | this list. If your description won't fit comfortably in one bullet |
| 71 | point (e.g. maybe you would like to give an example of the |
| 72 | functionality, or simply have a lot to talk about), see the `NOTE` below |
| 73 | for adding a new subsection. |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 74 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 75 | * ... next change ... |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 76 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 77 | .. NOTE |
| 78 | If you would like to document a larger change, then you can add a |
| 79 | subsection about it right here. You can copy the following boilerplate |
| 80 | and un-indent it (the indentation causes it to be inside this comment). |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 81 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 82 | Special New Feature |
| 83 | ------------------- |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 84 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 85 | Makes programs 10x faster by doing Special New Thing. |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 86 | |
Renato Golin | 7c9d050 | 2014-03-18 10:16:15 +0000 | [diff] [blame] | 87 | Changes to the ARM Backend |
| 88 | -------------------------- |
| 89 | |
| 90 | Since release 3.3, a lot of new features have been included in the ARM |
| 91 | back-end but weren't production ready (ie. well tested) on release 3.4. |
| 92 | Just after the 3.4 release, we started heavily testing two major parts |
| 93 | of the back-end: the integrated assembler (IAS) and the ARM exception |
| 94 | handling (EHABI), and now they are enabled by default on LLVM/Clang. |
| 95 | |
| 96 | The IAS received a lot of GNU extensions and directives, as well as some |
| 97 | specific pre-UAL instructions. Not all remaining directives will be |
| 98 | implemented, as we made judgement calls on the need versus the complexity, |
| 99 | and have chosen simplicity and future compatibility where hard decisions |
| 100 | had to be made. The major difference is, as stated above, the IAS validates |
| 101 | all inline ASM, not just for object emission, and that cause trouble with |
| 102 | some uses of inline ASM as pre-processor magic. |
| 103 | |
| 104 | So, while the IAS is good enough to compile large projects (including most |
| 105 | of the Linux kernel), there are a few things that we can't (and probably |
| 106 | won't) do. For those cases, please use ``-fno-integrated-as`` in Clang. |
| 107 | |
| 108 | Exception handling is another big change. After extensive testing and |
| 109 | changes to cooperate with Dwarf unwinding, EHABI is enabled by default. |
| 110 | The options ``-arm-enable-ehabi`` and ``-arm-enable-ehabi-descriptors``, |
| 111 | which were used to enable EHABI in the previous releases, are removed now. |
| 112 | |
| 113 | This means all ARM code will emit EH unwind tables, or CFI unwinding (for |
| 114 | debug/profiling), or both. To avoid run-time inconsistencies, C code will |
| 115 | also emit EH tables (in case they interoperate with C++ code), as is the |
Renato Golin | 3a077eb | 2014-03-24 11:02:38 +0000 | [diff] [blame] | 116 | case for other architectures (ex. x86_64). |
Renato Golin | 7c9d050 | 2014-03-18 10:16:15 +0000 | [diff] [blame] | 117 | |
Daniel Sanders | a4d18fc | 2014-07-23 12:59:26 +0000 | [diff] [blame^] | 118 | Changes to the MIPS Target |
| 119 | -------------------------- |
| 120 | |
| 121 | There has been a large amount of improvements to the MIPS target which can be |
| 122 | broken down into subtarget, ABI, and Integrated Assembler changes. |
| 123 | |
| 124 | Subtargets |
| 125 | ^^^^^^^^^^ |
| 126 | |
| 127 | Added support for Release 6 of the MIPS32 and MIPS64 architecture (MIPS32r6 |
| 128 | and MIPS64r6). Release 6 makes a number of significant changes to the MIPS32 |
| 129 | and MIPS64 architectures. For example, FPU registers are always 64-bits wide, |
| 130 | FPU NaN values conform to IEEE 754 (2008), and the unaligned memory instructions |
| 131 | (such as lwl and lwr) have been replaced with a requirement for ordinary memory |
| 132 | operations to support unaligned operations. Full details of MIPS32 and MIPS64 |
| 133 | Release 6 can be found on the `MIPS64 Architecture page at Imagination |
| 134 | Technologies <http://www.imgtec.com/mips/architectures/mips64.asp>`_. |
| 135 | |
| 136 | This release also adds experimental support for MIPS-IV, cnMIPS, and Cavium |
| 137 | Octeon CPU's. |
| 138 | |
| 139 | Support for the MIPS SIMD Architecture (MSA) has been improved to support MSA |
| 140 | on MIPS64. |
| 141 | |
| 142 | Support for IEEE 754 (2008) NaN values has been added. |
| 143 | |
| 144 | ABI and ABI extensions |
| 145 | ^^^^^^^^^^^^^^^^^^^^^^ |
| 146 | |
| 147 | There has also been considerable ABI work since the 3.4 release. This release |
| 148 | adds support for the N32 ABI, the O32-FPXX ABI Extension, the O32-FP64 ABI |
| 149 | Extension, and the O32-FP64A ABI Extension. |
| 150 | |
| 151 | The N32 ABI is an existing ABI that has now been implemented in LLVM. It is a |
| 152 | 64-bit ABI that is similar to N64 but retains 32-bit pointers. N64 remains the |
| 153 | default 64-bit ABI in LLVM. This differs from GCC where N32 is the default |
| 154 | 64-bit ABI. |
| 155 | |
| 156 | The O32-FPXX ABI Extension is 100% compatible with the O32-ABI and the O32-FP64 |
| 157 | ABI Extension and may be linked with either but may not be linked with both of |
| 158 | these simultaneously. It extends the O32 ABI to allow the same code to execute |
| 159 | without modification on processors with 32-bit FPU registers as well as 64-bit |
| 160 | FPU registers. The O32-FPXX ABI Extension is enabled by default for the O32 ABI |
| 161 | on mips*-img-linux-gnu and mips*-mti-linux-gnu triples and is selected with |
| 162 | -mfpxx. It is expected that future releases of LLVM will enable the FPXX |
| 163 | Extension for O32 on all triples. |
| 164 | |
| 165 | The O32-FP64 ABI Extension is an extension to the O32 ABI to fully exploit FPU's |
| 166 | with 64-bit registers and is enabled with -mfp64. This replaces an undocumented |
| 167 | and unsupported O32 extension which was previously enabled with -mfp64. It is |
| 168 | 100% compatible with the O32-FPXX ABI Extension. |
| 169 | |
| 170 | The O32-FP64A ABI Extension is a restricted form of the O32-FP64 ABI Extension |
| 171 | which allows interlinking with unmodified binaries that use the base O32 ABI. |
| 172 | |
| 173 | Integrated Assembler |
| 174 | ^^^^^^^^^^^^^^^^^^^^ |
| 175 | |
| 176 | The MIPS Integrated Assembler has undergone a substantial overhaul including a |
| 177 | rewrite of the assembly parser. It's not ready for general use in this release |
| 178 | but adventurous users may wish to enable it using ``-fintegrated-as``. |
| 179 | |
| 180 | In this release, the integrated assembler supports the majority of MIPS-I, |
| 181 | MIPS-II, MIPS-III, MIPS-IV, MIPS-V, MIPS32, MIPS32r2, MIPS32r6, MIPS64, |
| 182 | MIPS64r2, and MIPS64r6 as well as some of the Application Specific Extensions |
| 183 | such as MSA. It also supports several of the MIPS specific assembler directives |
| 184 | such as ``.set``, ``.module``, ``.cpload``, etc. |
| 185 | |
Bill Wendling | 70d39e6 | 2013-11-20 10:10:50 +0000 | [diff] [blame] | 186 | External Open Source Projects Using LLVM 3.5 |
Pekka Jaaskelainen | b531a11 | 2013-05-03 07:37:04 +0000 | [diff] [blame] | 187 | ============================================ |
| 188 | |
| 189 | An exciting aspect of LLVM is that it is used as an enabling technology for |
| 190 | a lot of other language and tools projects. This section lists some of the |
Bill Wendling | 70d39e6 | 2013-11-20 10:10:50 +0000 | [diff] [blame] | 191 | projects that have already been updated to work with LLVM 3.5. |
Kai Nacke | ec6e392 | 2013-11-14 05:57:40 +0000 | [diff] [blame] | 192 | |
| 193 | |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 194 | Additional Information |
| 195 | ====================== |
| 196 | |
| 197 | A wide variety of additional information is available on the `LLVM web page |
| 198 | <http://llvm.org/>`_, in particular in the `documentation |
| 199 | <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| 200 | API documentation which is up-to-date with the Subversion version of the source |
| 201 | code. You can access versions of these documents specific to this release by |
| 202 | going into the ``llvm/docs/`` directory in the LLVM tree. |
| 203 | |
| 204 | If you have any questions or comments about LLVM, please feel free to contact |
| 205 | us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |
| 206 | |