Clarify in PowerPC release notes that 32-bit PIC support is incomplete.
[oota-llvm.git] / docs / ReleaseNotes.rst
1 ======================
2 LLVM 3.5 Release Notes
3 ======================
4
5 .. contents::
6     :local:
7
8 .. warning::
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
11    /ReleaseNotes.html>`_.
12
13
14 Introduction
15 ============
16
17 This document contains the release notes for the LLVM Compiler Infrastructure,
18 release 3.5.  Here we describe the status of LLVM, including major improvements
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
34 Non-comprehensive list of changes in this release
35 =================================================
36
37 * All backends have been changed to use the MC asm printer and support for the
38   non MC one has been removed.
39
40 * Clang can now successfully self-host itself on Linux/Sparc64 and on
41   FreeBSD/Sparc64.
42
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
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
49   for assembly output as well. The integrated assembler can be disabled with
50   the ``-no-integrated-as`` option.
51
52 * llvm-ar now handles IR files like regular object files. In particular, a
53   regular symbol table is created for symbols defined in IR files, including
54   those in file scope inline assembly.
55
56 * LLVM now always uses cfi directives for producing most stack
57   unwinding information.
58
59 * The prefix for loop vectorizer hint metadata has been changed from
60   ``llvm.vectorizer`` to ``llvm.loop.vectorize``.  In addition,
61   ``llvm.vectorizer.unroll`` metadata has been renamed
62   ``llvm.loop.interleave.count``.
63
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
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.
74
75 * ... next change ...
76
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).
81
82    Special New Feature
83    -------------------
84
85    Makes programs 10x faster by doing Special New Thing.
86
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
116 case for other architectures (ex. x86_64).
117
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
186 Changes to the PowerPC Target
187 -----------------------------
188
189 The PowerPC 64-bit Little Endian subtarget (powerpc64le-unknown-linux-gnu) is
190 now fully supported.  This includes support for the Altivec instruction set.
191
192 The Power Architecture 64-Bit ELFv2 ABI Specification is now supported, and
193 is the default ABI for Little Endian.  The ELFv1 ABI remains the default ABI
194 for Big Endian.  Currently, it is not possible to override these defaults.
195 That capability will be available (albeit not recommended) in a future release.
196
197 Links to the ELFv2 ABI specification and to the Power ISA Version 2.07
198 specification may be found `here <https://www-03.ibm.com/technologyconnect/tgcm/TGCMServlet.wss?alias=OpenPOWER&linkid=1n0000>`_ (free registration required).
199 Efforts are underway to move this to a location that doesn't require
200 registration, but the planned site isn't ready yet.
201
202 Experimental support for the VSX instruction set introduced with ISA 2.06
203 is now available using the ``-mvsx`` switch.  Work remains on this, so it
204 is not recommended for production use.  VSX is disabled for Little Endian
205 regardless of this switch setting.
206
207 Load/store cost estimates have been improved.
208
209 Constant hoisting has been enabled.
210
211 Global named register support has been enabled.
212
213 Initial support for PIC code has been added for the 32-bit ELF subtarget.
214 Further support will be available in a future release.
215
216 External Open Source Projects Using LLVM 3.5
217 ============================================
218
219 An exciting aspect of LLVM is that it is used as an enabling technology for
220 a lot of other language and tools projects. This section lists some of the
221 projects that have already been updated to work with LLVM 3.5.
222
223
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