| OLD | NEW |
| 1 ====================== | 1 ====================== |
| 2 LLVM 3.3 Release Notes | 2 LLVM 3.3 Release Notes |
| 3 ====================== | 3 ====================== |
| 4 | 4 |
| 5 .. contents:: | 5 .. contents:: |
| 6 :local: | 6 :local: |
| 7 | 7 |
| 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>`_. |
| 12 |
| 13 |
| 8 Introduction | 14 Introduction |
| 9 ============ | 15 ============ |
| 10 | 16 |
| 11 This document contains the release notes for the LLVM Compiler Infrastructure, | 17 This document contains the release notes for the LLVM Compiler Infrastructure, |
| 12 release 3.3. Here we describe the status of LLVM, including major improvements | 18 release 3.3. Here we describe the status of LLVM, including major improvements |
| 13 from the previous release, improvements in various subprojects of LLVM, and | 19 from the previous release, improvements in various subprojects of LLVM, and |
| 14 some of the current users of the code. All LLVM releases may be downloaded | 20 some of the current users of the code. All LLVM releases may be downloaded |
| 15 from the `LLVM releases web site <http://llvm.org/releases/>`_. | 21 from the `LLVM releases web site <http://llvm.org/releases/>`_. |
| 16 | 22 |
| 17 For more information about LLVM, including information about the latest | 23 For more information about LLVM, including information about the latest |
| 18 release, please check out the `main LLVM web site <http://llvm.org/>`_. If you | 24 release, please check out the `main LLVM web site <http://llvm.org/>`_. If you |
| 19 have questions or comments, the `LLVM Developer's Mailing List | 25 have questions or comments, the `LLVM Developer's Mailing List |
| 20 <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send | 26 <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send |
| 21 them. | 27 them. |
| 22 | 28 |
| 23 Note that if you are reading this file from a Subversion checkout or the main | 29 Note that if you are reading this file from a Subversion checkout or the main |
| 24 LLVM web page, this document applies to the *next* release, not the current | 30 LLVM web page, this document applies to the *next* release, not the current |
| 25 one. To see the release notes for a specific release, please see the `releases | 31 one. To see the release notes for a specific release, please see the `releases |
| 26 page <http://llvm.org/releases/>`_. | 32 page <http://llvm.org/releases/>`_. |
| 27 | 33 |
| 28 Non-comprehensive list of changes in this release | 34 Non-comprehensive list of changes in this release |
| 29 ================================================= | 35 ================================================= |
| 30 | 36 |
| 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. |
| 43 |
| 31 * The CellSPU port has been removed. It can still be found in older versions. | 44 * The CellSPU port has been removed. It can still be found in older versions. |
| 32 | 45 |
| 33 * The IR-level extended linker APIs (for example, to link bitcode files out of | 46 * The IR-level extended linker APIs (for example, to link bitcode files out of |
| 34 archives) have been removed. Any existing clients of these features should | 47 archives) have been removed. Any existing clients of these features should |
| 35 move to using a linker with integrated LTO support. | 48 move to using a linker with integrated LTO support. |
| 36 | 49 |
| 37 * LLVM and Clang's documentation has been migrated to the `Sphinx | 50 * LLVM and Clang's documentation has been migrated to the `Sphinx |
| 38 <http://sphinx-doc.org/>`_ documentation generation system which uses | 51 <http://sphinx-doc.org/>`_ documentation generation system which uses |
| 39 easy-to-write reStructuredText. See `llvm/docs/README.txt` for more | 52 easy-to-write reStructuredText. See `llvm/docs/README.txt` for more |
| 40 information. | 53 information. |
| 41 | 54 |
| 42 * TargetTransformInfo (TTI) is a new interface that can be used by IR-level | 55 * TargetTransformInfo (TTI) is a new interface that can be used by IR-level |
| 43 passes to obtain target-specific information, such as the costs of | 56 passes to obtain target-specific information, such as the costs of |
| 44 instructions. Only "Lowering" passes such as LSR and the vectorizer are | 57 instructions. Only "Lowering" passes such as LSR and the vectorizer are |
| 45 allowed to use the TTI infrastructure. | 58 allowed to use the TTI infrastructure. |
| 46 | 59 |
| 47 * We've improved the X86 and ARM cost model. | 60 * We've improved the X86 and ARM cost model. |
| 48 | 61 |
| 49 * The Attributes classes have been completely rewritten and expanded. They now | 62 * The Attributes classes have been completely rewritten and expanded. They now |
| 50 support not only enumerated attributes and alignments, but "string" | 63 support not only enumerated attributes and alignments, but "string" |
| 51 attributes, which are useful for passing information to code generation. See | 64 attributes, which are useful for passing information to code generation. See |
| 52 :doc:`HowToUseAttributes` for more details. | 65 :doc:`HowToUseAttributes` for more details. |
| 53 | 66 |
| 54 * TableGen's syntax for instruction selection patterns has been simplified. | 67 * TableGen's syntax for instruction selection patterns has been simplified. |
| 55 Instead of specifying types indirectly with register classes, you should now | 68 Instead of specifying types indirectly with register classes, you should now |
| 56 specify types directly in the input patterns. See ``SparcInstrInfo.td`` for | 69 specify types directly in the input patterns. See ``SparcInstrInfo.td`` for |
| 57 examples of the new syntax. The old syntax using register classes still | 70 examples of the new syntax. The old syntax using register classes still |
| 58 works, but it will be removed in a future LLVM release. | 71 works, but it will be removed in a future LLVM release. |
| 59 | 72 |
| 60 * MCJIT now supports exception handling. Support for it in the old jit will be | 73 * ... next change ... |
| 61 removed in the 3.4 release. | |
| 62 | 74 |
| 63 * Command line options can now be grouped into categories which are shown in | 75 .. NOTE |
| 64 the output of ``-help``. See :ref:`grouping options into categories`. | 76 If you would like to document a larger change, then you can add a |
| 77 subsection about it right here. You can copy the following boilerplate |
| 78 and un-indent it (the indentation causes it to be inside this comment). |
| 65 | 79 |
| 66 * The appearance of command line options in ``-help`` that are inherited by | 80 Special New Feature |
| 67 linking with libraries that use the LLVM Command line support library can now | 81 ------------------- |
| 68 be modified at runtime. See :ref:`cl::getRegisteredOptions`. | 82 |
| 83 Makes programs 10x faster by doing Special New Thing. |
| 69 | 84 |
| 70 AArch64 target | 85 AArch64 target |
| 71 -------------- | 86 -------------- |
| 72 | 87 |
| 73 We've added support for AArch64, ARM's 64-bit architecture. Development is still | 88 We've added support for AArch64, ARM's 64-bit architecture. Development is still |
| 74 in fairly early stages, but we expect successful compilation when: | 89 in fairly early stages, but we expect successful compilation when: |
| 75 | 90 |
| 76 - compiling standard compliant C99 and C++03 with Clang; | 91 - compiling standard compliant C99 and C++03 with Clang; |
| 77 - using Linux as a target platform; | 92 - using Linux as a target platform; |
| 78 - where code + static data doesn't exceed 4GB in size (heap allocated data has | 93 - where code + static data doesn't exceed 4GB in size (heap allocated data has |
| 79 no limitation). | 94 no limitation). |
| 80 | 95 |
| 81 Some additional functionality is also implemented, notably DWARF debugging, | 96 Some additional functionality is also implemented, notably DWARF debugging, |
| 82 GNU-style thread local storage and inline assembly. | 97 GNU-style thread local storage and inline assembly. |
| 83 | 98 |
| 84 Hexagon Target | 99 Hexagon Target |
| 85 -------------- | 100 -------------- |
| 86 | 101 |
| 87 Removed support for legacy hexagonv2 and hexagonv3 processor architectures which | 102 - Removed support for legacy hexagonv2 and hexagonv3 processor |
| 88 are no longer in use. Currently supported architectures are hexagonv4 and | 103 architectures which are no longer in use. Currently supported |
| 89 hexagonv5. | 104 architectures are hexagonv4 and hexagonv5. |
| 90 | |
| 91 Mips target | |
| 92 -------------- | |
| 93 | |
| 94 New features and improvements: | |
| 95 | |
| 96 - Clang driver | |
| 97 - Support for Sourcery CodeBench Mips toolchain directories tree. | |
| 98 - Support for new command line options including: | |
| 99 - -mxgot/-mno-xgot | |
| 100 - -EL / -EB | |
| 101 - -mmicromips / -mno-micromips | |
| 102 - -msingle-float / -mdouble-float | |
| 103 - -mabi=32 (o32 abi) and -mabi=64 (n64 abi) | |
| 104 - Previously, options such as -mips16, -mmicromips, -mdsp and -mdspr2 were | |
| 105 not passed to the assembler. This issue has been fixed. | |
| 106 | |
| 107 - A number of changes have been made to improve the quality of DSP-ASE code | |
| 108 generation. | |
| 109 - Multiply and multiply-accumulate instructions can now use all four | |
| 110 accumulators. | |
| 111 - Instruction selection patterns have been added so that DSP instructions | |
| 112 are emitted without having to use builtins. | |
| 113 | |
| 114 - Delay slot filler pass can now search successor blocks for instructions to | |
| 115 fill delay slots (use option -disable-mips-df-succbb-search=false). | |
| 116 | |
| 117 PowerPC Target | |
| 118 -------------- | |
| 119 | |
| 120 New features and improvements: | |
| 121 | |
| 122 - PowerPC now supports an assembly parser. | |
| 123 - Support added for thread-local storage. 64-bit ELF subtarget only. | |
| 124 - Support added for medium and large code model (-mcmodel=medium,large). | |
| 125 Medium code model is now the default. 64-bit ELF subtarget only. | |
| 126 - Improved register allocation (fewer reserved registers). | |
| 127 - 64-bit atomic load and store are now supported. | |
| 128 - Improved code generation for unaligned memory accesses of scalar types. | |
| 129 - Improved performance of floating-point divide and square root | |
| 130 with -ffast-math. | |
| 131 - Support for predicated returns. | |
| 132 - Improved code generation for comparisons. | |
| 133 - Support added for inline setjmp and longjmp. | |
| 134 - Support added for many instructions introduced in PowerISA 2.04, 2.05, | |
| 135 and 2.06. | |
| 136 - Improved spill code for vector registers. | |
| 137 - Support added for -mno-altivec. | |
| 138 - ABI compatibility fixes for complex parameters, 128-bit integer parameters, | |
| 139 and varargs functions. 64-bit ELF subtarget only. | |
| 140 | 105 |
| 141 Loop Vectorizer | 106 Loop Vectorizer |
| 142 --------------- | 107 --------------- |
| 143 | 108 |
| 144 We've continued the work on the loop vectorizer. The loop vectorizer now | 109 We've continued the work on the loop vectorizer. The loop vectorizer now |
| 145 has the following features: | 110 has the following features: |
| 146 | 111 |
| 147 - Loops with unknown trip counts. | 112 - Loops with unknown trip counts. |
| 148 - Runtime checks of pointers. | 113 - Runtime checks of pointers. |
| 149 - Reductions, Inductions. | 114 - Reductions, Inductions. |
| 150 - Min/Max reductions of integers. | 115 - Min/Max reductions of integers. |
| 151 - If Conversion. | 116 - If Conversion. |
| 152 - Pointer induction variables. | 117 - Pointer induction variables. |
| 153 - Reverse iterators. | 118 - Reverse iterators. |
| 154 - Vectorization of mixed types. | 119 - Vectorization of mixed types. |
| 155 - Vectorization of function calls. | 120 - Vectorization of function calls. |
| 156 - Partial unrolling during vectorization. | 121 - Partial unrolling during vectorization. |
| 157 | 122 |
| 158 The loop vectorizer is now enabled by default for -O3. | 123 The loop vectorizer is now enabled by default for -O3. |
| 159 | 124 |
| 160 SLP Vectorizer | 125 SLP Vectorizer |
| 161 -------------- | 126 -------------- |
| 162 | 127 |
| 163 LLVM now has a new SLP vectorizer. The new SLP vectorizer is not enabled by | 128 LLVM now has a new SLP vectorizer. The new SLP vectorizer is not enabled by |
| 164 default but can be enabled using the clang flag ``-fslp-vectorize``. The | 129 default but can be enabled using the clang flag -fslp-vectorize. The BB-vectoriz
er |
| 165 BB-vectorizer can also be enabled using the command line flag | 130 can also be enabled using the command line flag -fslp-vectorize-aggressive. |
| 166 ``-fslp-vectorize-aggressive``. | |
| 167 | 131 |
| 168 R600 Backend | 132 R600 Backend |
| 169 ------------ | 133 ------------ |
| 170 | 134 |
| 171 The R600 backend was added in this release, it supports AMD GPUs (HD2XXX - | 135 The R600 backend was added in this release, it supports AMD GPUs |
| 172 HD7XXX). This backend is used in AMD's Open Source graphics / compute drivers | 136 (HD2XXX - HD7XXX). This backend is used in AMD's Open Source |
| 173 which are developed as part of the `Mesa3D <http://www.mesa3d.org>`_ project. | 137 graphics / compute drivers which are developed as part of the `Mesa3D |
| 174 | 138 <http://www.mesa3d.org>`_ project. |
| 175 SystemZ/s390x Backend | |
| 176 --------------------- | |
| 177 | |
| 178 LLVM and clang now support IBM's z/Architecture. At present this support | |
| 179 is restricted to GNU/Linux (GNU triplet s390x-linux-gnu) and requires | |
| 180 z10 or greater. | |
| 181 | |
| 182 | |
| 183 Sub-project Status Update | |
| 184 ========================= | |
| 185 | |
| 186 In addition to the core LLVM 3.3 distribution of production-quality compiler | |
| 187 infrastructure, the LLVM project includes sub-projects that use the LLVM core | |
| 188 and share the same distribution license. This section provides updates on these | |
| 189 sub-projects. | |
| 190 | |
| 191 | |
| 192 DragonEgg: GCC front-ends, LLVM back-end | |
| 193 ---------------------------------------- | |
| 194 | |
| 195 `DragonEgg <http://dragonegg.llvm.org/>`_ is a | |
| 196 `GCC plugin <http://gcc.gnu.org/wiki/plugins>`_ that replaces GCC's optimizers | |
| 197 and code generators with LLVM's. It works with gcc-4.5, 4.6, 4.7 and 4.8, can | |
| 198 target the x86-32/x86-64 and ARM processor families, and has been successfully | |
| 199 used on the Darwin, FreeBSD, KFreeBSD, Linux and OpenBSD platforms. It fully | |
| 200 supports Ada, C, C++ and Fortran. It has partial support for Go, Java, Obj-C | |
| 201 and Obj-C++. Note that gcc-4.6 is the best supported version, and that Ada in | |
| 202 particular doesn't work well with gcc-4.7 and newer. | |
| 203 | |
| 204 The `3.3 release <http://llvm.org/apt/>`_ has the following notable changes. | |
| 205 | |
| 206 - supports gcc-4.8 (requires gcc-4.8.1 or newer) | |
| 207 - object files can be written directly using LLVM's integrated assembler | |
| 208 - produces saner debug info | |
| 209 - bitfields can now contain arbitrary scalar types (useful for Ada) | |
| 210 | |
| 211 | |
| 212 LLDB: Low Level Debugger | |
| 213 ------------------------ | |
| 214 | |
| 215 `LLDB <http://lldb.llvm.org/>`_ is a ground-up implementation of a command-line | |
| 216 debugger, as well as a debugger API that can be used from scripts and other | |
| 217 applications. LLDB uses the following components of the LLVM core distribution | |
| 218 to support the latest language features and target support: | |
| 219 | |
| 220 - the Clang parser for high-quality parsing of C, C++ and Objective C | |
| 221 - the LLVM disassembler | |
| 222 - the LLVM JIT compiler (MCJIT) for expression evaluation | |
| 223 | |
| 224 The `3.3 release <http://lldb.llvm.org/download.html>`_ has the following notabl
e changes. | |
| 225 | |
| 226 Features now supported on Linux: | |
| 227 | |
| 228 - Debugging multi-threaded programs | |
| 229 - Support for watchpoints | |
| 230 - Process list, attach and fork | |
| 231 - `vim integration <http://llvm.org/svn/llvm-project/lldb/branches/release_33/ut
ils/vim-lldb/README>`_ for LLDB | |
| 232 | |
| 233 Portability: | |
| 234 | |
| 235 - Builds with cmake, ninja, auto-tools, clang 3.3 and gcc 4.6 | |
| 236 | |
| 237 Linux Improvements: | |
| 238 | |
| 239 - Improved register support including vector registers | |
| 240 - Basic debugging of i386 programs | |
| 241 - Bug fixes for expression evaluation | |
| 242 | 139 |
| 243 | 140 |
| 244 External Open Source Projects Using LLVM 3.3 | 141 External Open Source Projects Using LLVM 3.3 |
| 245 ============================================ | 142 ============================================ |
| 246 | 143 |
| 247 An exciting aspect of LLVM is that it is used as an enabling technology for a | 144 An exciting aspect of LLVM is that it is used as an enabling technology for |
| 248 lot of other language and tools projects. This section lists some of the | 145 a lot of other language and tools projects. This section lists some of the |
| 249 projects that have already been updated to work with LLVM 3.3. | 146 projects that have already been updated to work with LLVM 3.3. |
| 250 | 147 |
| 251 | 148 |
| 252 Portable Computing Language (pocl) | 149 Portable Computing Language (pocl) |
| 253 ---------------------------------- | 150 ---------------------------------- |
| 254 | 151 |
| 255 In addition to producing an easily portable open source OpenCL implementation, | 152 In addition to producing an easily portable open source OpenCL |
| 256 another major goal of `pocl <http://pocl.sourceforge.net/>`_ is improving | 153 implementation, another major goal of `pocl <http://pocl.sourceforge.net/>`_ |
| 257 performance portability of OpenCL programs with compiler optimizations, reducing | 154 is improving performance portability of OpenCL programs with |
| 258 the need for target-dependent manual optimizations. An important part of pocl is | 155 compiler optimizations, reducing the need for target-dependent manual |
| 259 a set of LLVM passes used to statically parallelize multiple work-items with the | 156 optimizations. An important part of pocl is a set of LLVM passes used to |
| 260 kernel compiler, even in the presence of work-group barriers. This enables | 157 statically parallelize multiple work-items with the kernel compiler, even in |
| 261 static parallelization of the fine-grained static concurrency in the work groups | 158 the presence of work-group barriers. This enables static parallelization of |
| 262 in multiple ways. | 159 the fine-grained static concurrency in the work groups in multiple ways. |
| 263 | 160 |
| 264 TTA-based Co-design Environment (TCE) | 161 TTA-based Co-design Environment (TCE) |
| 265 ------------------------------------- | 162 ------------------------------------- |
| 266 | 163 |
| 267 `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new processors based | 164 `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new |
| 268 on the Transport triggered architecture (TTA). The toolset provides a complete | 165 processors based on the Transport triggered architecture (TTA). |
| 269 co-design flow from C/C++ programs down to synthesizable VHDL/Verilog and | 166 The toolset provides a complete co-design flow from C/C++ |
| 270 parallel program binaries. Processor customization points include the register | 167 programs down to synthesizable VHDL/Verilog and parallel program binaries. |
| 271 files, function units, supported operations, and the interconnection network. | 168 Processor customization points include the register files, function units, |
| 169 supported operations, and the interconnection network. |
| 272 | 170 |
| 273 TCE uses Clang and LLVM for C/C++/OpenCL C language support, target independent | 171 TCE uses Clang and LLVM for C/C++/OpenCL C language support, target independent |
| 274 optimizations and also for parts of code generation. It generates new LLVM-based | 172 optimizations and also for parts of code generation. It generates new |
| 275 code generators "on the fly" for the designed TTA processors and loads them in | 173 LLVM-based code generators "on the fly" for the designed TTA processors and |
| 276 to the compiler backend as runtime libraries to avoid per-target recompilation | 174 loads them in to the compiler backend as runtime libraries to avoid |
| 277 of larger parts of the compiler chain. | 175 per-target recompilation of larger parts of the compiler chain. |
| 278 | |
| 279 Just-in-time Adaptive Decoder Engine (Jade) | |
| 280 ------------------------------------------- | |
| 281 | |
| 282 `Jade <https://github.com/orcc/jade>`_ (Just-in-time Adaptive Decoder Engine) is | |
| 283 a generic video decoder engine using LLVM for just-in-time compilation of video | |
| 284 decoder configurations. Those configurations are designed by MPEG Reconfigurable | |
| 285 Video Coding (RVC) committee. MPEG RVC standard is built on a stream-based | |
| 286 dataflow representation of decoders. It is composed of a standard library of | |
| 287 coding tools written in RVC-CAL language and a dataflow configuration --- block | |
| 288 diagram --- of a decoder. | |
| 289 | |
| 290 Jade project is hosted as part of the Open RVC-CAL Compiler (`Orcc | |
| 291 <http://orcc.sf.net>`_) and requires it to translate the RVC-CAL standard | |
| 292 library of video coding tools into an LLVM assembly code. | |
| 293 | |
| 294 LDC - the LLVM-based D compiler | |
| 295 ------------------------------- | |
| 296 | |
| 297 `D <http://dlang.org>`_ is a language with C-like syntax and static typing. It | |
| 298 pragmatically combines efficiency, control, and modeling power, with safety and | |
| 299 programmer productivity. D supports powerful concepts like Compile-Time Function | |
| 300 Execution (CTFE) and Template Meta-Programming, provides an innovative approach | |
| 301 to concurrency and offers many classical paradigms. | |
| 302 | |
| 303 `LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler | |
| 304 combined with LLVM as backend to produce efficient native code. LDC targets | |
| 305 x86/x86_64 systems like Linux, OS X and Windows and also Linux/PPC64. Ports to | |
| 306 other architectures like ARM are underway. | |
| 307 | 176 |
| 308 | 177 |
| 309 Additional Information | 178 Additional Information |
| 310 ====================== | 179 ====================== |
| 311 | 180 |
| 312 A wide variety of additional information is available on the `LLVM web page | 181 A wide variety of additional information is available on the `LLVM web page |
| 313 <http://llvm.org/>`_, in particular in the `documentation | 182 <http://llvm.org/>`_, in particular in the `documentation |
| 314 <http://llvm.org/docs/>`_ section. The web page also contains versions of the | 183 <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| 315 API documentation which is up-to-date with the Subversion version of the source | 184 API documentation which is up-to-date with the Subversion version of the source |
| 316 code. You can access versions of these documents specific to this release by | 185 code. You can access versions of these documents specific to this release by |
| 317 going into the ``llvm/docs/`` directory in the LLVM tree. | 186 going into the ``llvm/docs/`` directory in the LLVM tree. |
| 318 | 187 |
| 319 If you have any questions or comments about LLVM, please feel free to contact | 188 If you have any questions or comments about LLVM, please feel free to contact |
| 320 us via the `mailing lists <http://llvm.org/docs/#maillist>`_. | 189 us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |
| 321 | 190 |
| OLD | NEW |