Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 1 | ====================== |
Hans Wennborg | becb60f | 2015-01-09 00:21:26 +0000 | [diff] [blame] | 2 | LLVM 3.6 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:: |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 9 | These are in-progress notes for the upcoming LLVM 3.6 release. You may |
Nico Weber | cf914aa | 2014-09-04 15:26:10 +0000 | [diff] [blame] | 10 | prefer the `LLVM 3.5 Release Notes <http://llvm.org/releases/3.5.0/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, |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 18 | release 3.6. 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 | |
Sean Silva | 1eab30d | 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 | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 43 | |
Rafael Espindola | 0e893f5 | 2014-09-02 19:49:39 +0000 | [diff] [blame] | 44 | * Support for AuroraUX has been removed. |
| 45 | |
Peter Collingbourne | 10039c0 | 2014-09-18 21:28:49 +0000 | [diff] [blame] | 46 | * Added support for a `native object file-based bitcode wrapper format |
| 47 | <BitCodeFormat.html#native-object-file>`_. |
| 48 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 49 | * ... next change ... |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 50 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 51 | .. NOTE |
| 52 | If you would like to document a larger change, then you can add a |
| 53 | subsection about it right here. You can copy the following boilerplate |
| 54 | 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] | 55 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 56 | Special New Feature |
| 57 | ------------------- |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 58 | |
Sean Silva | 1eab30d | 2013-01-20 03:29:50 +0000 | [diff] [blame] | 59 | Makes programs 10x faster by doing Special New Thing. |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 60 | |
Peter Collingbourne | 51d2de7 | 2014-12-03 02:08:38 +0000 | [diff] [blame] | 61 | Prefix data rework |
| 62 | ------------------ |
| 63 | |
| 64 | The semantics of the ``prefix`` attribute have been changed. Users |
| 65 | that want the previous ``prefix`` semantics should instead use |
| 66 | ``prologue``. To motivate this change, let's examine the primary |
| 67 | usecases that these attributes aim to serve, |
| 68 | |
| 69 | 1. Code sanitization metadata (e.g. Clang's undefined behavior |
| 70 | sanitizer) |
| 71 | |
| 72 | 2. Function hot-patching: Enable the user to insert ``nop`` operations |
| 73 | at the beginning of the function which can later be safely replaced |
| 74 | with a call to some instrumentation facility. |
| 75 | |
| 76 | 3. Language runtime metadata: Allow a compiler to insert data for |
| 77 | use by the runtime during execution. GHC is one example of a |
| 78 | compiler that needs this functionality for its |
| 79 | tables-next-to-code functionality. |
| 80 | |
| 81 | Previously ``prefix`` served cases (1) and (2) quite well by allowing the user |
| 82 | to introduce arbitrary data at the entrypoint but before the function |
| 83 | body. Case (3), however, was poorly handled by this approach as it |
| 84 | required that prefix data was valid executable code. |
| 85 | |
| 86 | In this release the concept of prefix data has been redefined to be |
| 87 | data which occurs immediately before the function entrypoint (i.e. the |
| 88 | symbol address). Since prefix data now occurs before the function |
| 89 | entrypoint, there is no need for the data to be valid code. |
| 90 | |
| 91 | The previous notion of prefix data now goes under the name "prologue |
| 92 | data" to emphasize its duality with the function epilogue. |
| 93 | |
| 94 | The intention here is to handle cases (1) and (2) with prologue data and |
| 95 | case (3) with prefix data. See the language reference for further details |
| 96 | on the semantics of these attributes. |
| 97 | |
| 98 | This refactoring arose out of discussions_ with Reid Kleckner in |
| 99 | response to a proposal to introduce the notion of symbol offsets to |
| 100 | enable handling of case (3). |
| 101 | |
| 102 | .. _discussions: http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073235.html |
| 103 | |
| 104 | |
Renato Golin | 7c9d050 | 2014-03-18 10:16:15 +0000 | [diff] [blame] | 105 | Changes to the ARM Backend |
| 106 | -------------------------- |
| 107 | |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 108 | During this release ... |
Renato Golin | 7c9d050 | 2014-03-18 10:16:15 +0000 | [diff] [blame] | 109 | |
Renato Golin | 7c9d050 | 2014-03-18 10:16:15 +0000 | [diff] [blame] | 110 | |
Daniel Sanders | a4d18fc | 2014-07-23 12:59:26 +0000 | [diff] [blame] | 111 | Changes to the MIPS Target |
| 112 | -------------------------- |
| 113 | |
Daniel Sanders | 1bcd70e | 2015-01-11 10:34:52 +0000 | [diff] [blame^] | 114 | During this release the MIPS target has reached a few major milestones. It has |
| 115 | gained support for MIPS-II and MIPS-III, become ABI-compatible with GCC for big |
| 116 | and little endian O32, N32, and N64, and we are now able to compile the Linux |
| 117 | kernel for 32-bit targets. |
| 118 | |
| 119 | ABI |
| 120 | ^^^ |
| 121 | |
| 122 | A large number of bugs have been fixed for big-endian MIPS targets using the |
| 123 | N32 and N64 ABI's as well as a small number of bugs affecting other ABI's. |
| 124 | Please note that some of these bugs will still affect LLVM-IR generated by |
| 125 | LLVM 3.5 since correct code generation depends on appropriate usage of the |
| 126 | ``inreg``, ``signext``, and ``zeroext`` attributes on all function arguments |
| 127 | and returns. |
| 128 | |
| 129 | There are far too many corrections to provide a complete list but here are a |
| 130 | few notable ones: |
| 131 | |
| 132 | * Big-endian N32 and N64 now interlinks successfully with GCC compiled code. |
| 133 | Previously this didn't work for the majority of cases. |
| 134 | |
| 135 | * The registers used to return a structure containing a single 128-bit floating |
| 136 | point member on the N32/N64 ABI's have been changed from those specified by |
| 137 | the ABI documentation to match those used by GCC. The documentation specifies |
| 138 | that ``$f0`` and ``$f2`` should be used but GCC has used ``$f0`` and ``$f1`` |
| 139 | for many years. |
| 140 | |
| 141 | * Returning a zero-byte struct no longer causes arguments to be read from the |
| 142 | wrong registers when using the O32 ABI. |
| 143 | |
| 144 | * The exception personality has been changed for 64-bit MIPS targets to |
| 145 | eliminate warnings about relocations in a read-only section. |
| 146 | |
| 147 | * Incorrect usage of odd-numbered single-precision floating point registers |
| 148 | has been fixed when the fastcc calling convention is used with 64-bit FPU's |
| 149 | and -mno-odd-spreg. |
| 150 | |
| 151 | LLVMLinux |
| 152 | ^^^^^^^^^ |
| 153 | |
| 154 | It is now possible to compile the Linux kernel. This currently requires a small |
| 155 | number of kernel patches. See the `LLVMLinux project |
| 156 | <http://llvm.linuxfoundation.org/index.php/Main_Page>`_ for details. |
| 157 | |
| 158 | * Added -mabicalls and -mno-abicalls. The implementation may not be complete |
| 159 | but works sufficiently well for the Linux kernel. |
| 160 | |
| 161 | * Fixed multiple compatibility issues between LLVM's inline assembly support |
| 162 | and GCC's. |
| 163 | |
| 164 | * Added support for a number of directives used by Linux to the Integrated |
| 165 | Assembler. |
| 166 | |
| 167 | Miscellaneous |
| 168 | ^^^^^^^^^^^^^ |
| 169 | |
| 170 | * Attempting to disassemble l[wd]c[23], s[wd]c[23], cache, and pref no longer |
| 171 | triggers an assertion. |
| 172 | |
| 173 | * Added -muclibc and -mglibc to support toolchains that provide both uClibC and |
| 174 | GLibC. |
| 175 | |
| 176 | * __SIZEOF_INT128__ is no longer defined for 64-bit targets since 128-bit |
| 177 | integers do not work at this time for this target. |
| 178 | |
| 179 | * Using $t4-$t7 with the N32 and N64 ABI is deprecated when ``-fintegrated-as`` |
| 180 | is in use and will be removed in LLVM 3.7. These names have never been |
| 181 | supported by the GNU Assembler for these ABI's. |
Daniel Sanders | a4d18fc | 2014-07-23 12:59:26 +0000 | [diff] [blame] | 182 | |
Bill Schmidt | 4004989 | 2014-07-31 14:38:17 +0000 | [diff] [blame] | 183 | Changes to the PowerPC Target |
Bill Schmidt | 08616c7 | 2014-07-31 15:20:30 +0000 | [diff] [blame] | 184 | ----------------------------- |
Bill Schmidt | 4004989 | 2014-07-31 14:38:17 +0000 | [diff] [blame] | 185 | |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 186 | During this release ... |
Bill Schmidt | 4004989 | 2014-07-31 14:38:17 +0000 | [diff] [blame] | 187 | |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 188 | External Open Source Projects Using LLVM 3.6 |
Pekka Jaaskelainen | b531a11 | 2013-05-03 07:37:04 +0000 | [diff] [blame] | 189 | ============================================ |
| 190 | |
| 191 | An exciting aspect of LLVM is that it is used as an enabling technology for |
| 192 | a lot of other language and tools projects. This section lists some of the |
Rafael Espindola | bd334e2 | 2014-08-22 21:57:38 +0000 | [diff] [blame] | 193 | projects that have already been updated to work with LLVM 3.6. |
| 194 | |
| 195 | * A project |
Kai Nacke | ec6e392 | 2013-11-14 05:57:40 +0000 | [diff] [blame] | 196 | |
| 197 | |
Dmitri Gribenko | 38782b8 | 2012-12-09 23:14:26 +0000 | [diff] [blame] | 198 | Additional Information |
| 199 | ====================== |
| 200 | |
| 201 | A wide variety of additional information is available on the `LLVM web page |
| 202 | <http://llvm.org/>`_, in particular in the `documentation |
| 203 | <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| 204 | API documentation which is up-to-date with the Subversion version of the source |
| 205 | code. You can access versions of these documents specific to this release by |
| 206 | going into the ``llvm/docs/`` directory in the LLVM tree. |
| 207 | |
| 208 | If you have any questions or comments about LLVM, please feel free to contact |
| 209 | us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |
| 210 | |