OSDN Git Service

am 0c8e5e4f: am 7de9c005: am 2ef279b3: am 8d2ad1af: Avoid redefinition of __STD_FORMA...
[android-x86/external-llvm.git] / docs / ReleaseNotes.rst
1 ======================
2 LLVM 3.4 Release Notes
3 ======================
4
5 .. contents::
6     :local:
7
8 Introduction
9 ============
10
11 This document contains the release notes for the LLVM Compiler Infrastructure,
12 release 3.4.  Here we describe the status of LLVM, including major improvements
13 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
15 from the `LLVM releases web site <http://llvm.org/releases/>`_.
16
17 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
19 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
21 them.
22
23 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
25 one.  To see the release notes for a specific release, please see the `releases
26 page <http://llvm.org/releases/>`_.
27
28 Non-comprehensive list of changes in this release
29 =================================================
30
31 * This is expected to be the last release of LLVM which compiles using a C++98
32   toolchain. We expect to start using some C++11 features in LLVM and other
33   sub-projects starting after this release. That said, we are committed to
34   supporting a reasonable set of modern C++ toolchains as the host compiler on
35   all of the platforms. This will at least include Visual Studio 2012 on
36   Windows, and Clang 3.1 or GCC 4.7.x on Mac and Linux. The final set of
37   compilers (and the C++11 features they support) is not set in stone, but we
38   wanted users of LLVM to have a heads up that the next release will involve
39   a substantial change in the host toolchain requirements.
40
41 * The regression tests now fail if any command in a pipe fails. To disable it in
42   a directory, just add ``config.pipefail = False`` to its ``lit.local.cfg``.
43   See :doc:`Lit <CommandGuide/lit>` for the details.
44
45 * Support for exception handling has been removed from the old JIT. Use MCJIT
46   if you need EH support.
47
48 * The R600 backend is not marked experimental anymore and is built by default.
49
50 * ``APFloat::isNormal()`` was renamed to ``APFloat::isFiniteNonZero()`` and
51   ``APFloat::isIEEENormal()`` was renamed to ``APFloat::isNormal()``. This
52   ensures that ``APFloat::isNormal()`` conforms to IEEE-754R-2008.
53
54 * The library call simplification pass has been removed.  Its functionality
55   has been integrated into the instruction combiner and function attribute
56   marking passes.
57
58 * Support for building using Visual Studio 2008 has been dropped. Use VS 2010
59   or later instead. For more information, see the `Getting Started using Visual
60   Studio <GettingStartedVS.html>`_ page.
61
62 * The Loop Vectorizer that was previously enabled for ``-O3`` is now enabled
63   for ``-Os`` and ``-O2``.
64
65 * The new SLP Vectorizer is now enabled by default.
66
67 * ``llvm-ar`` now uses the new Object library and produces archives and
68   symbol tables in the gnu format.
69
70 * FileCheck now allows specifing ``-check-prefix`` multiple times. This
71   helps reduce duplicate check lines when using multiple RUN lines.
72
73 * The bitcast instruction no longer allows casting between pointers
74    with different address spaces. To achieve this, use the new addrspacecast
75    instruction.
76
77 * Different sized pointers for different address spaces should now
78   generally work. This is primarily useful for GPU targets.
79
80 * OCaml bindings have been significantly extended to cover almost all of the
81   LLVM libraries.
82
83 Mips Target
84 -----------
85
86 Support for the MIPS SIMD Architecture (MSA) has been added. MSA is supported
87 through inline assembly, intrinsics with the prefix '``__builtin_msa``', and
88 normal code generation.
89
90 For more information on MSA (including documentation for the instruction set),
91 see the `MIPS SIMD page at Imagination Technologies
92 <http://imgtec.com/mips/mips-simd.asp>`_
93
94 PowerPC Target
95 --------------
96
97 Changes in the PowerPC backend include:
98
99 * fast-isel support (for faster ``-O0`` code generation)
100 * many improvements to the builtin assembler
101 * support for generating unaligned (Altivec) vector loads
102 * support for generating the fcpsgn instruction
103 * generate ``frin`` for ``round()`` (not ``nearbyint()`` and ``rint()``, which
104   had been done only in fast-math mode)
105 * improved instruction scheduling for embedded cores (such as the A2)
106 * improved prologue/epilogue generation (especially in 32-bit mode)
107 * support for dynamic stack alignment (and dynamic stack allocations with large alignments)
108 * improved generation of counter-register-based loops
109 * bug fixes
110
111 SPARC Target
112 ------------
113
114 The SPARC backend got many improvements, namely
115
116 * experimental SPARC V9 backend
117 * JIT support for SPARC
118 * fp128 support
119 * exception handling
120 * TLS support
121 * leaf functions optimization
122 * bug fixes
123
124 SystemZ/s390x Backend
125 ---------------------
126
127 LLVM and clang can now optimize for zEnterprise z196 and zEnterprise EC12
128 targets.  In clang these targets are selected using ``-march=z196`` and
129 ``-march=zEC12`` respectively.
130
131 External Open Source Projects Using LLVM 3.4
132 ============================================
133
134 An exciting aspect of LLVM is that it is used as an enabling technology for
135 a lot of other language and tools projects. This section lists some of the
136 projects that have already been updated to work with LLVM 3.4.
137
138 DXR
139 ---
140
141 `DXR <https://wiki.mozilla.org/DXR>`_ is Mozilla's code search and navigation
142 tool, aimed at making sense of large projects like Firefox. It supports
143 full-text and regex searches as well as structural queries like "Find all the
144 callers of this function." Behind the scenes, it uses a custom trigram index,
145 the re2 library, and structural data collected by a clang compiler plugin.
146
147 LDC - the LLVM-based D compiler
148 -------------------------------
149
150 `D <http://dlang.org>`_ is a language with C-like syntax and static typing. It
151 pragmatically combines efficiency, control, and modeling power, with safety and
152 programmer productivity. D supports powerful concepts like Compile-Time Function
153 Execution (CTFE) and Template Meta-Programming, provides an innovative approach
154 to concurrency and offers many classical paradigms.
155
156 `LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler
157 combined with LLVM as backend to produce efficient native code. LDC targets
158 x86/x86_64 systems like Linux, OS X, FreeBSD and Windows and also Linux/PPC64.
159 Ports to other architectures like ARM and AArch64 are underway.
160
161 LibBeauty
162 ---------
163
164 The `LibBeauty <http://www.libbeauty.com>`_ decompiler and reverse
165 engineering tool currently utilises the LLVM disassembler and the LLVM IR
166 Builder. The current aim of the project is to take a x86_64 binary ``.o`` file
167 as input, and produce an equivalent LLVM IR ``.bc`` or ``.ll`` file as
168 output. Support for ARM binary ``.o`` file as input will be added later.
169
170 Likely
171 ------
172
173 `Likely <http://www.liblikely.org/>`_ is an open source domain specific
174 language for image recognition.  Algorithms are just-in-time compiled using
175 LLVM's MCJIT infrastructure to execute on single or multi-threaded CPUs as well
176 as OpenCL SPIR or CUDA enabled GPUs. Likely exploits the observation that while
177 image processing and statistical learning kernels must be written generically
178 to handle any matrix datatype, at runtime they tend to be executed repeatedly
179 on the same type.
180
181 Portable Computing Language (pocl)
182 ----------------------------------
183
184 In addition to producing an easily portable open source OpenCL
185 implementation, another major goal of `pocl <http://portablecl.org/>`_
186 is improving performance portability of OpenCL programs with
187 compiler optimizations, reducing the need for target-dependent manual
188 optimizations. An important part of pocl is a set of LLVM passes used to
189 statically parallelize multiple work-items with the kernel compiler, even in
190 the presence of work-group barriers. This enables static parallelization of
191 the fine-grained static concurrency in the work groups in multiple ways. 
192
193 Portable Native Client (PNaCl)
194 ------------------------------
195
196 `Portable Native Client (PNaCl) <http://www.chromium.org/nativeclient/pnacl>`_
197 is a Chrome initiative to bring the performance and low-level control of native
198 code to modern web browsers, without sacrificing the security benefits and
199 portability of web applications. PNaCl works by compiling native C and C++ code
200 to an intermediate representation using the LLVM clang compiler. This
201 intermediate representation is a subset of LLVM bytecode that is wrapped into a
202 portable executable, which can be hosted on a web server like any other website
203 asset. When the site is accessed, Chrome fetches and translates the portable
204 executable into an architecture-specific machine code optimized directly for
205 the underlying device. PNaCl lets developers compile their code once to run on
206 any hardware platform and embed their PNaCl application in any website,
207 enabling developers to directly leverage the power of the underlying CPU and
208 GPU.
209
210 TTA-based Co-design Environment (TCE)
211 -------------------------------------
212
213 `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new
214 exposed datapath processors based on the Transport triggered architecture (TTA). 
215 The toolset provides a complete co-design flow from C/C++
216 programs down to synthesizable VHDL/Verilog and parallel program binaries.
217 Processor customization points include the register files, function units,
218 supported operations, and the interconnection network.
219
220 TCE uses Clang and LLVM for C/C++/OpenCL C language support, target independent 
221 optimizations and also for parts of code generation. It generates
222 new LLVM-based code generators "on the fly" for the designed processors and
223 loads them in to the compiler backend as runtime libraries to avoid
224 per-target recompilation of larger parts of the compiler chain. 
225
226 WebCL Validator
227 ---------------
228
229 `WebCL Validator <https://github.com/KhronosGroup/webcl-validator>`_ implements
230 validation for WebCL C language which is a subset of OpenCL ES 1.1. Validator
231 checks the correctness of WebCL C, and implements memory protection for it as a
232 source-2-source transformation. The transformation converts WebCL to memory
233 protected OpenCL. The protected OpenCL cannot access any memory ranges which
234 were not allocated for it, and its memory is always initialized to prevent
235 information leakage from other programs.
236
237
238 Additional Information
239 ======================
240
241 A wide variety of additional information is available on the `LLVM web page
242 <http://llvm.org/>`_, in particular in the `documentation
243 <http://llvm.org/docs/>`_ section.  The web page also contains versions of the
244 API documentation which is up-to-date with the Subversion version of the source
245 code.  You can access versions of these documents specific to this release by
246 going into the ``llvm/docs/`` directory in the LLVM tree.
247
248 If you have any questions or comments about LLVM, please feel free to contact
249 us via the `mailing lists <http://llvm.org/docs/#maillist>`_.