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 |