blob: c3108007306eb60f6f59b868e86515e6af49b6a5 [file] [log] [blame]
Misha Brukman80731b92003-11-22 00:38:41 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
Reid Spencere4190fa2004-11-18 18:38:58 +00005 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Misha Brukman80731b92003-11-22 00:38:41 +00006 <link rel="stylesheet" href="llvm.css" type="text/css">
Chad Rosier06da55e2011-05-27 22:50:46 +00007 <title>LLVM 3.0 Release Notes</title>
Misha Brukman80731b92003-11-22 00:38:41 +00008</head>
9<body>
Chris Lattner3d482502003-10-02 04:57:28 +000010
Chad Rosier06da55e2011-05-27 22:50:46 +000011<h1>LLVM 3.0 Release Notes</h1>
Mikhail Glushenkov024f7cf2008-10-13 02:08:34 +000012
Chris Lattnerc871bac2010-03-17 04:02:39 +000013<img align=right src="http://llvm.org/img/DragonSmall.png"
Gabor Greif27b166352010-04-22 10:21:43 +000014 width="136" height="136" alt="LLVM Dragon Logo">
Chris Lattnerc871bac2010-03-17 04:02:39 +000015
Chris Lattner3d482502003-10-02 04:57:28 +000016<ol>
Misha Brukman80731b92003-11-22 00:38:41 +000017 <li><a href="#intro">Introduction</a></li>
Chris Lattnerf5cd9862008-10-13 18:01:01 +000018 <li><a href="#subproj">Sub-project Status Update</a></li>
Chad Rosier06da55e2011-05-27 22:50:46 +000019 <li><a href="#externalproj">External Projects Using LLVM 3.0</a></li>
20 <li><a href="#whatsnew">What's New in LLVM 3.0?</a></li>
Chris Lattner77a51732004-04-30 22:17:12 +000021 <li><a href="GettingStarted.html">Installation Instructions</a></li>
Dan Gohmanad888912008-10-14 16:23:02 +000022 <li><a href="#knownproblems">Known Problems</a></li>
Misha Brukman80731b92003-11-22 00:38:41 +000023 <li><a href="#additionalinfo">Additional Information</a></li>
Chris Lattner3d482502003-10-02 04:57:28 +000024</ol>
25
Chris Lattner020e1fc2004-05-23 21:07:27 +000026<div class="doc_author">
NAKAMURA Takumica46f5a2011-04-09 02:13:37 +000027 <p>Written by the <a href="http://llvm.org/">LLVM Team</a></p>
Misha Brukman80731b92003-11-22 00:38:41 +000028</div>
Chris Lattner3d482502003-10-02 04:57:28 +000029
Chris Lattner17c170a2011-04-06 06:29:50 +000030<!--
Chad Rosier06da55e2011-05-27 22:50:46 +000031<h1 style="color:red">These are in-progress notes for the upcoming LLVM 3.0
Jeffrey Yasskin0830b972010-01-28 01:14:43 +000032release.<br>
33You may prefer the
Chad Rosier06da55e2011-05-27 22:50:46 +000034<a href="http://llvm.org/releases/2.9/docs/ReleaseNotes.html">LLVM 2.9
Dan Gohman62af9d22010-05-03 23:51:05 +000035Release Notes</a>.</h1>
Chris Lattner17c170a2011-04-06 06:29:50 +000036 -->
Jeffrey Yasskin0830b972010-01-28 01:14:43 +000037
Chris Lattner3d482502003-10-02 04:57:28 +000038<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +000039<h2>
Misha Brukman80731b92003-11-22 00:38:41 +000040 <a name="intro">Introduction</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +000041</h2>
Chris Lattner3d482502003-10-02 04:57:28 +000042<!-- *********************************************************************** -->
43
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +000044<div>
Misha Brukman80731b92003-11-22 00:38:41 +000045
Chris Lattner1e4d5bc2008-10-13 17:57:36 +000046<p>This document contains the release notes for the LLVM Compiler
Bill Wendling16133782011-10-26 18:46:16 +000047 Infrastructure, release 3.0. Here we describe the status of LLVM, including
48 major improvements from the previous release and significant known problems.
49 All LLVM releases may be downloaded from
50 the <a href="http://llvm.org/releases/">LLVM releases web site</a>.</p>
Chris Lattner62495762003-10-02 16:38:05 +000051
Chris Lattnerb5bb5972004-12-07 08:04:13 +000052<p>For more information about LLVM, including information about the latest
Bill Wendling16133782011-10-26 18:46:16 +000053 release, please check out the <a href="http://llvm.org/">main LLVM web
54 site</a>. If you have questions or comments,
55 the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM
56 Developer's Mailing List</a> is a good place to send them.</p>
Chris Lattner3d482502003-10-02 04:57:28 +000057
Bill Wendling16133782011-10-26 18:46:16 +000058<p>Note that if you are reading this file from a Subversion checkout or the main
59 LLVM web page, this document applies to the <i>next</i> release, not the
60 current one. To see the release notes for a specific release, please see the
61 <a href="http://llvm.org/releases/">releases page</a>.</p>
Misha Brukman80731b92003-11-22 00:38:41 +000062
63</div>
Chris Lattneraa61f412009-10-13 17:48:04 +000064
Chris Lattnerce6b0472011-04-05 23:22:33 +000065<!-- Features that need text if they're finished for 3.1:
66 ARM EHABI
Chris Lattnera67df2d2010-04-22 06:28:20 +000067 combiner-aa?
Chris Lattneraa61f412009-10-13 17:48:04 +000068 strong phi elim
Chris Lattneraa61f412009-10-13 17:48:04 +000069 loop dependence analysis
Chris Lattner342f9572010-09-29 05:30:03 +000070 CorrelatedValuePropagation
Chris Lattnerce6b0472011-04-05 23:22:33 +000071 lib/Transforms/IPO/MergeFunctions.cpp => consider for 3.1.
Chris Lattner2b8a52e2008-02-10 07:46:44 +000072 -->
Chris Lattner342f9572010-09-29 05:30:03 +000073
Chris Lattnerf5cd9862008-10-13 18:01:01 +000074<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +000075<h2>
Chris Lattnerf5cd9862008-10-13 18:01:01 +000076 <a name="subproj">Sub-project Status Update</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +000077</h2>
Chris Lattnerf5cd9862008-10-13 18:01:01 +000078<!-- *********************************************************************** -->
Chris Lattner625a3d82008-06-08 21:34:41 +000079
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +000080<div>
Bill Wendling16133782011-10-26 18:46:16 +000081
82<p>The LLVM 3.0 distribution currently consists of code from the core LLVM
83 repository (which roughly includes the LLVM optimizers, code generators and
84 supporting tools), the Clang repository and the llvm-gcc repository. In
85 addition to this code, the LLVM Project includes other sub-projects that are
86 in development. Here we include updates on these subprojects.</p>
Chris Lattnerf5cd9862008-10-13 18:01:01 +000087
Chris Lattnerc75fd522008-06-08 21:58:17 +000088<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +000089<h3>
Chris Lattner44c09cd2008-10-13 18:11:54 +000090<a name="clang">Clang: C/C++/Objective-C Frontend Toolkit</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +000091</h3>
Chris Lattnerc75fd522008-06-08 21:58:17 +000092
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +000093<div>
Chris Lattnerc75fd522008-06-08 21:58:17 +000094
Chris Lattner5de7f6e2010-04-26 17:42:18 +000095<p><a href="http://clang.llvm.org/">Clang</a> is an LLVM front end for the C,
Bill Wendling16133782011-10-26 18:46:16 +000096 C++, and Objective-C languages. Clang aims to provide a better user
97 experience through expressive diagnostics, a high level of conformance to
98 language standards, fast compilation, and low memory use. Like LLVM, Clang
99 provides a modular, library-based architecture that makes it suitable for
100 creating or integrating with other development tools. Clang is considered a
101 production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
102 (32- and 64-bit), and for darwin/arm targets.</p>
Chris Lattneraa61f412009-10-13 17:48:04 +0000103
Chad Rosier06da55e2011-05-27 22:50:46 +0000104<p>In the LLVM 3.0 time-frame, the Clang team has made many improvements:</p>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000105
106<ul>
Bill Wendling16133782011-10-26 18:46:16 +0000107 <li>Greatly improved support for building C++ applications, with greater
108 stability and better diagnostics.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000109
Bill Wendling16133782011-10-26 18:46:16 +0000110 <li><a href="http://clang.llvm.org/cxx_status.html">Improved support</a> for
111 the <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">C++
112 2011</a> standard, including implementations of non-static data member
113 initializers, alias templates, delegating constructors, the range-based
114 for loop, and implicitly-generated move constructors and move assignment
115 operators, among others.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000116
Bill Wendling16133782011-10-26 18:46:16 +0000117 <li>Implemented support for some features of the upcoming C1x standard,
118 including static assertions and generic selections.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000119
Bill Wendling16133782011-10-26 18:46:16 +0000120 <li>Better detection of include and linking paths for system headers and
121 libraries, especially for Linux distributions.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000122
Bill Wendling16133782011-10-26 18:46:16 +0000123 <li>Implemented support
124 for <a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html">Automatic
125 Reference Counting</a> for Objective-C.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000126
Bill Wendling16133782011-10-26 18:46:16 +0000127 <li>Implemented a number of optimizations in <tt>libclang</tt>, the Clang C
128 interface, to improve the performance of code completion and the mapping
129 from source locations to abstract syntax tree nodes.</li>
Douglas Gregor936c75b2011-10-15 00:48:01 +0000130</ul>
131
Chris Lattnerfd97b882011-04-05 07:19:28 +0000132
Duncan Sandsce5d9ae2011-04-06 08:07:40 +0000133<p>If Clang rejects your code but another compiler accepts it, please take a
Bill Wendling16133782011-10-26 18:46:16 +0000134 look at the <a href="http://clang.llvm.org/compatibility.html">language
135 compatibility</a> guide to make sure this is not intentional or a known
136 issue.</p>
Bill Wendlingef362462008-10-27 09:27:33 +0000137
Chris Lattner44c09cd2008-10-13 18:11:54 +0000138</div>
139
140<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000141<h3>
Duncan Sands1cd78982011-04-04 11:09:08 +0000142<a name="dragonegg">DragonEgg: GCC front-ends, LLVM back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000143</h3>
Chris Lattneraa61f412009-10-13 17:48:04 +0000144
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000145<div>
Bill Wendling16133782011-10-26 18:46:16 +0000146<p><a href="http://dragonegg.llvm.org/">DragonEgg</a> is a
147 <a href="http://gcc.gnu.org/wiki/plugins">gcc plugin</a> that replaces GCC's
Duncan Sandsa294c542011-11-10 18:44:29 +0000148 optimizers and code generators with LLVM's. It works with gcc-4.5 or gcc-4.6,
149 targets the x86-32 and x86-64 processor families, and has been successfully
150 used on the Darwin, FreeBSD, KFreeBSD, Linux and OpenBSD platforms. It fully
151 supports Ada, C, C++ and Fortran. It has partial support for Go, Java, Obj-C
152 and Obj-C++.</p>
Duncan Sands92452b92010-04-02 09:23:15 +0000153
Bill Wendling16133782011-10-26 18:46:16 +0000154<p>The 3.0 release has the following notable changes:</p>
155
Duncan Sandsa294c542011-11-10 18:44:29 +0000156 <li>GCC version 4.6 is now fully supported.</li>
157
158 <li>Patching and building GCC is no longer required: the plugin should work
159 with your system GCC (version 4.5 or 4.6; on Debian/Ubuntu systems the
160 gcc-4.5-plugin-dev or gcc-4.6-plugin-dev package is also needed).</li>
161
162 <li>The <tt>-fplugin-arg-dragonegg-enable-gcc-optzns</tt> option, which runs
163 GCC's optimizers as well as LLVM's, now works much better. This is the
164 option to use if you want ultimate performance! It not yet completely
165 stable: it may cause the plugin to crash.</li>
166
167 <li>The type and constant conversion logic has been almost entirely rewritten,
168 fixing a multitude of obscure bugs.</li>
169
Duncan Sands7f9a0dc2010-09-30 17:37:34 +0000170<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +0000171<!--
172<li></li>
173-->
Duncan Sands7f9a0dc2010-09-30 17:37:34 +0000174</ul>
Chris Lattneraa61f412009-10-13 17:48:04 +0000175
176</div>
177
Chris Lattner120804a2010-10-03 23:49:06 +0000178<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000179<h3>
Chris Lattner120804a2010-10-03 23:49:06 +0000180<a name="compiler-rt">compiler-rt: Compiler Runtime Library</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000181</h3>
Chris Lattner120804a2010-10-03 23:49:06 +0000182
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000183<div>
Bill Wendling16133782011-10-26 18:46:16 +0000184
185<p>The new LLVM <a href="http://compiler-rt.llvm.org/">compiler-rt project</a>
186 is a simple library that provides an implementation of the low-level
187 target-specific hooks required by code generation and other runtime
188 components. For example, when compiling for a 32-bit target, converting a
189 double to a 64-bit unsigned integer is compiled into a runtime call to the
190 "__fixunsdfdi" function. The compiler-rt library provides highly optimized
191 implementations of this and other low-level routines (some are 3x faster than
192 the equivalent libgcc routines).</p>
Chris Lattner120804a2010-10-03 23:49:06 +0000193
Chad Rosier06da55e2011-05-27 22:50:46 +0000194<p>In the LLVM 3.0 timeframe,</p>
Chris Lattner120804a2010-10-03 23:49:06 +0000195
196</div>
Chris Lattneraa61f412009-10-13 17:48:04 +0000197
198<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000199<h3>
Chris Lattner342f9572010-09-29 05:30:03 +0000200<a name="lldb">LLDB: Low Level Debugger</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000201</h3>
Chris Lattner342f9572010-09-29 05:30:03 +0000202
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000203<div>
Chris Lattner342f9572010-09-29 05:30:03 +0000204
Bill Wendling16133782011-10-26 18:46:16 +0000205<p>LLDB has advanced by leaps and bounds in the 3.0 timeframe. It is
206 dramatically more stable and useful, and includes both a
207 new <a href="http://lldb.llvm.org/tutorial.html">tutorial</a> and
208 a <a href="http://lldb.llvm.org/lldb-gdb.html">side-by-side comparison with
209 GDB</a>.</p>
Chris Lattner342f9572010-09-29 05:30:03 +0000210
211</div>
212
213<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000214<h3>
Chris Lattner342f9572010-09-29 05:30:03 +0000215<a name="libc++">libc++: C++ Standard Library</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000216</h3>
Chris Lattner342f9572010-09-29 05:30:03 +0000217
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000218<div>
Chris Lattner342f9572010-09-29 05:30:03 +0000219
Bill Wendling16133782011-10-26 18:46:16 +0000220<p>Like compiler_rt, libc++ is now <a href="DeveloperPolicy.html#license">dual
221 licensed</a> under the MIT and UIUC license, allowing it to be used more
222 permissively.</p>
Chris Lattner342f9572010-09-29 05:30:03 +0000223
224</div>
225
Chris Lattneraa61f412009-10-13 17:48:04 +0000226
Chris Lattnercaefe932011-04-07 03:08:22 +0000227<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000228<h3>
Chris Lattnercaefe932011-04-07 03:08:22 +0000229<a name="LLBrowse">LLBrowse: IR Browser</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000230</h3>
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000231
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000232<div>
Bill Wendling16133782011-10-26 18:46:16 +0000233
234<p><a href="http://llvm.org/svn/llvm-project/llbrowse/trunk/doc/LLBrowse.html">
235 LLBrowse</a> is an interactive viewer for LLVM modules. It can load any LLVM
236 module and displays its contents as an expandable tree view, facilitating an
237 easy way to inspect types, functions, global variables, or metadata nodes. It
238 is fully cross-platform, being based on the popular wxWidgets GUI
239 toolkit.</p>
240
Chris Lattnercaefe932011-04-07 03:08:22 +0000241</div>
242
243<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000244<h3>
Chris Lattnercaefe932011-04-07 03:08:22 +0000245<a name="vmkit">VMKit</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000246</h3>
Chris Lattnercaefe932011-04-07 03:08:22 +0000247
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000248<div>
Bill Wendling16133782011-10-26 18:46:16 +0000249
Chris Lattnercaefe932011-04-07 03:08:22 +0000250<p>The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation
Bill Wendling16133782011-10-26 18:46:16 +0000251 of a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and
252 just-in-time compilation. As of LLVM 3.0, VMKit now supports generational
253 garbage collectors. The garbage collectors are provided by the MMTk
254 framework, and VMKit can be configured to use one of the numerous implemented
255 collectors of MMTk.</p>
256
Chris Lattnercaefe932011-04-07 03:08:22 +0000257</div>
258
259
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000260<!--=========================================================================-->
Chris Lattner9ee0b012011-04-05 18:38:45 +0000261<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000262<h3>
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000263<a name="klee">KLEE: A Symbolic Execution Virtual Machine</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000264</h3>
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000265
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000266<div>
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000267<p>
268<a href="http://klee.llvm.org/">KLEE</a> is a symbolic execution framework for
269programs in LLVM bitcode form. KLEE tries to symbolically evaluate "all" paths
270through the application and records state transitions that lead to fault
271states. This allows it to construct testcases that lead to faults and can even
272be used to verify some algorithms.
273</p>
274
Chris Lattner0d364302011-03-10 07:43:44 +0000275<p>UPDATE!</p>
Chris Lattner9ee0b012011-04-05 18:38:45 +0000276</div>-->
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000277
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000278</div>
Daniel Dunbar8fbd8aa2010-10-04 17:39:47 +0000279
Chris Lattner53e06f92009-02-26 22:33:38 +0000280<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000281<h2>
Chad Rosier06da55e2011-05-27 22:50:46 +0000282 <a name="externalproj">External Open Source Projects Using LLVM 3.0</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000283</h2>
Chris Lattner53e06f92009-02-26 22:33:38 +0000284<!-- *********************************************************************** -->
285
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000286<div>
Chris Lattneraa61f412009-10-13 17:48:04 +0000287
288<p>An exciting aspect of LLVM is that it is used as an enabling technology for
289 a lot of other language and tools projects. This section lists some of the
Chad Rosier06da55e2011-05-27 22:50:46 +0000290 projects that have already been updated to work with LLVM 3.0.</p>
Chris Lattner120804a2010-10-03 23:49:06 +0000291
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000292<!--=========================================================================-->
Bill Wendling0ed57472011-10-26 00:17:54 +0000293<h3>AddressSanitizer</h3>
294
295<div>
296
297<p><a href="http://code.google.com/p/address-sanitizer/">AddressSanitizer</a>
298 uses compiler instrumentation and a specialized malloc library to find C/C++
299 bugs such as use-after-free and out-of-bound accesses to heap, stack, and
300 globals. The key feature of the tool is speed: the average slowdown
301 introduced by AddressSanitizer is less than 2x.</p>
302
303</div>
304
305<!--=========================================================================-->
Bill Wendling3bb971b2011-10-26 00:14:36 +0000306<h3>ClamAV</h3>
307
308<div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000309
Bill Wendling3bb971b2011-10-26 00:14:36 +0000310<p><a href="http://www.clamav.net">Clam AntiVirus</a> is an open source (GPL)
311 anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail
312 gateways.</p>
313
314<p>Since version 0.96 it
315 has <a href="http://vrt-sourcefire.blogspot.com/2010/09/introduction-to-clamavs-low-level.html">bytecode
316 signatures</a> that allow writing detections for complex malware.</p>
317
318<p>It uses LLVM's JIT to speed up the execution of bytecode on X86, X86-64,
319 PPC32/64, falling back to its own interpreter otherwise. The git version was
320 updated to work with LLVM 3.0.</p>
321
322</div>
323
324<!--=========================================================================-->
Bill Wendling5ee37be2011-10-26 18:23:06 +0000325<h3>clReflect</h3>
326
327<div>
328
329<p><a href="https://bitbucket.org/dwilliamson/clreflect">clReflect</a> is a C++
330 parser that uses clang/LLVM to derive a light-weight reflection database
331 suitable for use in game development. It comes with a very simple runtime
332 library for loading and querying the database, requiring no external
333 dependencies (including CRT), and an additional utility library for object
334 management and serialisation.</p>
335
336</div>
337
338<!--=========================================================================-->
Bill Wendlingca8dc4a2011-10-29 01:10:01 +0000339<h3>Cling C++ Interpreter</h3>
340
341<div>
342
343<p><a href="http://cern.ch/cling">Cling</a> is an interactive compiler interface
344 (aka C++ interpreter). It uses LLVM's JIT and clang; it currently supports
345 C++ and C. It has a prompt interface, runs source files, calls into shared
346 libraries, prints the value of expressions, even does runtime lookup of
347 identifiers (dynamic scopes). And it just behaves like one would expect from
348 an interpreter.</p>
349
350</div>
351
352<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000353<h3>Crack Programming Language</h3>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000354
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000355<div>
Bill Wendlinged4cc442011-11-03 20:10:01 +0000356
357<p><a href="http://code.google.com/p/crack-language/">Crack</a> aims to provide
358 the ease of development of a scripting language with the performance of a
359 compiled language. The language derives concepts from C++, Java and Python,
360 incorporating object-oriented programming, operator overloading and strong
361 typing.</p>
362
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000363</div>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000364
365<!--=========================================================================-->
Bill Wendlingb33bd112011-11-08 05:22:54 +0000366<h3>Eero</h3>
367
368<div>
369
370<p><a href="http://eerolanguage.org/">Eero</a> is a fully
371 header-and-binary-compatible dialect of Objective-C 2.0, implemented with a
372 patched version of the Clang/LLVM compiler. It features a streamlined syntax,
373 Python-like indentation, and new operators, for improved readability and
374 reduced code clutter. It also has new features such as limited forms of
375 operator overloading and namespaces, and strict (type-and-operator-safe)
376 enumerations. It is inspired by languages such as Smalltalk, Python, and
377 Ruby.</p>
378
379</div>
380
381<!--=========================================================================-->
Bill Wendling3bb93ad2011-10-26 00:09:55 +0000382<h3>Glasgow Haskell Compiler (GHC)</h3>
383
384<div>
385
386<p>GHC is an open source, state-of-the-art programming suite for Haskell, a
387 standard lazy functional programming language. It includes an optimizing
388 static compiler generating good code for a variety of platforms, together
389 with an interactive system for convenient, quick development.</p>
390
391<p>GHC 7.0 and onwards include an LLVM code generator, supporting LLVM 2.8 and
392 later. Since LLVM 2.9, GHC now includes experimental support for the ARM
393 platform with LLVM 3.0.</p>
394
395</div>
396
397<!--=========================================================================-->
Bill Wendling3e3968e2011-10-25 20:35:31 +0000398<h3>gwXscript</h3>
399
400<div>
401
402<p><a href="http://botwars.tk/gwscript/">gwXscript</a> is an object oriented,
Bill Wendlingc902d132011-10-26 04:24:15 +0000403 aspect oriented programming language which can create both executables (ELF,
Bill Wendling3e3968e2011-10-25 20:35:31 +0000404 EXE) and shared libraries (DLL, SO, DYNLIB). The compiler is implemented in
405 its own language and translates scripts into LLVM-IR which can be optimized
406 and translated into native code by the LLVM framework. Source code in
407 gwScript contains definitions that expand the namespaces. So you can build
408 your project and simply 'plug out' features by removing a file. The remaining
409 project does not leave scars since you directly separate concerns by the
410 'template' feature of gwX. It is also possible to add new features to a
411 project by just adding files and without editing the original project. This
412 language is used for example to create games or content management systems
413 that should be extendable.</p>
414
415<p>gwXscript is strongly typed and offers comfort with its native types string,
416 hash and array. You can easily write new libraries in gwXscript or native
417 code. gwXscript is type safe and users should not be able to crash your
418 program or execute malicious code except code that is eating CPU time.</p>
419
420</div>
421
422<!--=========================================================================-->
Bill Wendlinga2ae87b2011-10-26 22:55:18 +0000423<h3>include-what-you-use</h3>
424
425<div>
426
427<p><a href="http://code.google.com/p/include-what-you-use">include-what-you-use</a>
428 is a tool to ensure that a file directly <code>#include</code>s
429 all <code>.h</code> files that provide a symbol that the file uses. It also
430 removes superfluous <code>#include</code>s from source files.</p>
431
432</div>
433
434<!--=========================================================================-->
Bill Wendlingfc1935c2011-11-07 22:05:17 +0000435<h3>ispc: The Intel SPMD Program Compiler</h3>
436
437<div>
438
439<p><a href="http://ispc.github.com">ispc</a> is a compiler for "single program,
440 multiple data" (SPMD) programs. It compiles a C-based SPMD programming
441 language to run on the SIMD units of CPUs; it often delivers 5-6x speedups on
442 a single core of a CPU with an 8-wide SIMD unit compared to serial code,
443 while still providing a clean and easy-to-understand programming model. For
444 an introduction to the language and its performance,
445 see <a href="http://ispc.github.com/example.html">the walkthrough of a short
446 example program. ispc is licensed under the BSD license.</p>
447
448</div>
449
450<!--=========================================================================-->
Bill Wendling4d9c8e52011-10-26 18:20:54 +0000451<h3>LanguageKit and Pragmatic Smalltalk</h3>
452
453<div>
454
455<p><a href="http://etoileos.com/etoile/features/languagekit/">LanguageKit</a> is
456 a framework for implementing dynamic languages sharing an object model with
457 Objective-C. It provides static and JIT compilation using LLVM along with
458 its own interpreter. Pragmatic Smalltalk is a dialect of Smalltalk, built on
459 top of LanguageKit, that interfaces directly with Objective-C, sharing the
460 same object representation and message sending behaviour. These projects are
461 developed as part of the &Eacute;toi&eacute; desktop environment.</p>
462
463</div>
464
465<!--=========================================================================-->
Bill Wendlingeda350d2011-11-01 04:08:23 +0000466<h3>LuaAV</h3>
467
468<div>
469
470<p><a href="http://lua-av.mat.ucsb.edu/blog/">LuaAV</a> is a real-time
471 audiovisual scripting environment based around the Lua language and a
472 collection of libraries for sound, graphics, and other media protocols. LuaAV
473 uses LLVM and Clang to JIT compile efficient user-defined audio synthesis
474 routines specified in a declarative syntax.</p>
475
476</div>
477
478<!--=========================================================================-->
Bill Wendlingfd9eb5732011-10-26 00:16:17 +0000479<h3>Mono</h3>
480
481<div>
482
483<p>An open source, cross-platform implementation of C# and the CLR that is
484 binary compatible with Microsoft.NET. Has an optional, dynamically-loaded
485 LLVM code generation backend in Mini, the JIT compiler.</p>
486
487<p>Note that we use a Git mirror of LLVM with some patches. See:
488 https://github.com/mono/llvm</p>
489
490</div>
491
492<!--=========================================================================-->
Bill Wendlinge8caad52011-10-25 20:37:45 +0000493<h3>Portable OpenCL (pocl)</h3>
494
495<div>
496
497<p>Portable OpenCL is an open source implementation of the OpenCL standard which
498 can be easily adapted for new targets. One of the goals of the project is
499 improving performance portability of OpenCL programs, avoiding the need for
500 target-dependent manual optimizations. A "native" target is included, which
501 allows running OpenCL kernels on the host (CPU).</p>
502
503</div>
504
505<!--=========================================================================-->
Bill Wendling58209292011-10-25 20:39:06 +0000506<h3>Pure</h3>
507
508<div>
509<p><a href="http://pure-lang.googlecode.com/">Pure</a> is an
510 algebraic/functional programming language based on term rewriting. Programs
511 are collections of equations which are used to evaluate expressions in a
512 symbolic fashion. The interpreter uses LLVM as a backend to JIT-compile Pure
513 programs to fast native code. Pure offers dynamic typing, eager and lazy
514 evaluation, lexical closures, a hygienic macro system (also based on term
515 rewriting), built-in list and matrix support (including list and matrix
516 comprehensions) and an easy-to-use interface to C and other programming
517 languages (including the ability to load LLVM bitcode modules, and inline C,
518 C++, Fortran and Faust code in Pure programs if the corresponding LLVM-enabled
519 compilers are installed).</p>
520
521<p>Pure version 0.48 has been tested and is known to work with LLVM 3.0
522 (and continues to work with older LLVM releases &gt;= 2.5).</p>
523
524</div>
525
526<!--=========================================================================-->
Bill Wendling97b889d2011-10-26 00:12:04 +0000527<h3>Renderscript</h3>
528
529<div>
530
531<p><a href="http://developer.android.com/guide/topics/renderscript/index.html">Renderscript</a>
532 is Android's advanced 3D graphics rendering and compute API. It provides a
533 portable C99-based language with extensions to facilitate common use cases
534 for enhancing graphics and thread level parallelism. The Renderscript
535 compiler frontend is based on Clang/LLVM. It emits a portable bitcode format
536 for the actual compiled script code, as well as reflects a Java interface for
537 developers to control the execution of the compiled bitcode. Executable
538 machine code is then generated from this bitcode by an LLVM backend on the
539 device. Renderscript is thus able to provide a mechanism by which Android
540 developers can improve performance of their applications while retaining
541 portability.</p>
542
543</div>
544
545<!--=========================================================================-->
Bill Wendlingbf72f2c2011-10-25 20:40:26 +0000546<h3>SAFECode</h3>
547
548<div>
549
550<p><a href="http://safecode.cs.illinois.edu">SAFECode</a> is a memory safe C/C++
551 compiler built using LLVM. It takes standard, unannotated C/C++ code,
552 analyzes the code to ensure that memory accesses and array indexing
553 operations are safe, and instruments the code with run-time checks when
554 safety cannot be proven statically. SAFECode can be used as a debugging aid
555 (like Valgrind) to find and repair memory safety bugs. It can also be used
556 to protect code from security attacks at run-time.</p>
557
558</div>
559
560<!--=========================================================================-->
Bill Wendling8fae82a2011-10-26 07:38:19 +0000561<h3>The Stupid D Compiler (SDC)</h3>
562
563<div>
564
565<p><a href="https://github.com/bhelyer/SDC">The Stupid D Compiler</a> is a
566 project seeking to write a self-hosting compiler for the D programming
567 language without using the frontend of the reference compiler (DMD).</p>
568
569</div>
570
571<!--=========================================================================-->
Bill Wendling53aa7a82011-10-25 20:24:32 +0000572<h3>TTA-based Co-design Environment (TCE)</h3>
573
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000574<div>
Bill Wendling53aa7a82011-10-25 20:24:32 +0000575
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000576<p>TCE is a toolset for designing application-specific processors (ASP) based on
Bill Wendling53aa7a82011-10-25 20:24:32 +0000577 the Transport triggered architecture (TTA). The toolset provides a complete
578 co-design flow from C/C++ programs down to synthesizable VHDL and parallel
579 program binaries. Processor customization points include the register files,
580 function units, supported operations, and the interconnection network.</p>
Bill Wendling16133782011-10-26 18:46:16 +0000581
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000582<p>TCE uses Clang and LLVM for C/C++ language support, target independent
Bill Wendling53aa7a82011-10-25 20:24:32 +0000583 optimizations and also for parts of code generation. It generates new
Bill Wendling16133782011-10-26 18:46:16 +0000584 LLVM-based code generators "on the fly" for the designed TTA processors and
585 loads them in to the compiler backend as runtime libraries to avoid
Bill Wendling53aa7a82011-10-25 20:24:32 +0000586 per-target recompilation of larger parts of the compiler chain.</p>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000587
Bill Wendling16133782011-10-26 18:46:16 +0000588</div>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000589
590<!--=========================================================================-->
Bill Wendlingae9aa352011-10-25 20:27:37 +0000591<h3>Tart Programming Language</h3>
592
593<div>
594
595<p><a href="http://code.google.com/p/tart/">Tart</a> is a general-purpose,
596 strongly typed programming language designed for application
597 developers. Strongly inspired by Python and C#, Tart focuses on practical
598 solutions for the professional software developer, while avoiding the clutter
599 and boilerplate of legacy languages like Java and C++. Although Tart is still
600 in development, the current implementation supports many features expected of
601 a modern programming language, such as garbage collection, powerful
602 bidirectional type inference, a greatly simplified syntax for template
603 metaprogramming, closures and function literals, reflection, operator
604 overloading, explicit mutability and immutability, and much more. Tart is
605 flexible enough to accommodate a broad range of programming styles and
606 philosophies, while maintaining a strong commitment to simplicity, minimalism
607 and elegance in design.</p>
608
609</div>
610
611<!--=========================================================================-->
Bill Wendlingfe845d52011-10-26 09:25:01 +0000612<h3>ThreadSanitizer</h3>
613
614<div>
615
616<p><a href="http://code.google.com/p/data-race-test/">ThreadSanitizer</a> is a
617 data race detector for (mostly) C and C++ code, available for Linux, Mac OS
618 and Windows. On different systems, we use binary instrumentation frameworks
Bill Wendlingedc20872011-10-29 01:11:15 +0000619 (Valgrind and Pin) as frontends that generate the program events for the race
620 detection algorithm. On Linux, there's an option of using LLVM-based
621 compile-time instrumentation.</p>
Bill Wendlingfe845d52011-10-26 09:25:01 +0000622
623</div>
624
625<!--=========================================================================-->
Bill Wendling39fe2652011-10-26 07:42:45 +0000626<h3>The ZooLib C++ Cross-Platform Application Framework</h3>
627
628<div>
629
630<p><a href="http://www.zoolib.org/">ZooLib</a> is Open Source under the MIT
631 License. It provides GUI, filesystem access, TCP networking, thread-safe
632 memory management, threading and locking for Mac OS X, Classic Mac OS,
633 Microsoft Windows, POSIX operating systems with X11, BeOS, Haiku, Apple's iOS
634 and Research in Motion's BlackBerry.</p>
635
636<p>My current work is to use CLang's static analyzer to improve ZooLib's code
637 quality. I also plan to set up LLVM compiles of the demo programs and test
638 programs using CLang and LLVM on all the platforms that CLang, LLVM and
639 ZooLib all support.</p>
640
641</div>
642
643<!--=========================================================================-->
Bill Wendling99ba0b62011-10-25 01:01:42 +0000644<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000645<h3>PinaVM</h3>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000646
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000647<div>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000648<p><a href="http://gitorious.org/pinavm/pages/Home">PinaVM</a> is an open
649source, <a href="http://www.systemc.org/">SystemC</a> front-end. Unlike many
650other front-ends, PinaVM actually executes the elaboration of the
651program analyzed using LLVM's JIT infrastructure. It later enriches the
652bitcode with SystemC-specific information.</p>
653</div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000654-->
655
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000656
657<!--=========================================================================-->
Bill Wendling99ba0b62011-10-25 01:01:42 +0000658<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000659<h3 id="icedtea">IcedTea Java Virtual Machine Implementation</h3>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000660
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000661<div>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000662<p>
663<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea</a> provides a
664harness to build OpenJDK using only free software build tools and to provide
665replacements for the not-yet free parts of OpenJDK. One of the extensions that
666IcedTea provides is a new JIT compiler named <a
667href="http://icedtea.classpath.org/wiki/ZeroSharkFaq">Shark</a> which uses LLVM
668to provide native code generation without introducing processor-dependent
669code.
670</p>
671
672<p> OpenJDK 7 b112, IcedTea6 1.9 and IcedTea7 1.13 and later have been tested
Chad Rosier06da55e2011-05-27 22:50:46 +0000673and are known to work with LLVM 3.0 (and continue to work with older LLVM
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000674releases &gt;= 2.6 as well).</p>
675</div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000676-->
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000677
678<!--=========================================================================-->
Bill Wendling99ba0b62011-10-25 01:01:42 +0000679<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000680<h3>Polly - Polyhedral optimizations for LLVM</h3>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000681
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000682<div>
Chris Lattnerae6a89a2011-04-06 01:13:49 +0000683<p>Polly is a project that aims to provide advanced memory access optimizations
684to better take advantage of SIMD units, cache hierarchies, multiple cores or
685even vector accelerators for LLVM. Built around an abstract mathematical
686description based on Z-polyhedra, it provides the infrastructure to develop
687advanced optimizations in LLVM and to connect complex external optimizers. In
688its first year of existence Polly already provides an exact value-based
689dependency analysis as well as basic SIMD and OpenMP code generation support.
690Furthermore, Polly can use PoCC(Pluto) an advanced optimizer for data-locality
691and parallelism.</p>
692</div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000693-->
Chris Lattner120804a2010-10-03 23:49:06 +0000694
Chris Lattner958d2992011-04-06 16:14:25 +0000695<!--=========================================================================-->
Bill Wendling99ba0b62011-10-25 01:01:42 +0000696<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000697<h3>Rubinius</h3>
Chris Lattner958d2992011-04-06 16:14:25 +0000698
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000699<div>
Chris Lattner958d2992011-04-06 16:14:25 +0000700 <p><a href="http://github.com/evanphx/rubinius">Rubinius</a> is an environment
701 for running Ruby code which strives to write as much of the implementation in
702 Ruby as possible. Combined with a bytecode interpreting VM, it uses LLVM to
703 optimize and compile ruby code down to machine code. Techniques such as type
704 feedback, method inlining, and deoptimization are all used to remove dynamism
705 from ruby execution and increase performance.</p>
706</div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000707-->
Chris Lattner958d2992011-04-06 16:14:25 +0000708
Chris Lattner5ddaab12011-04-07 03:09:21 +0000709<!--=========================================================================-->
Bill Wendling99ba0b62011-10-25 01:01:42 +0000710<!--
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000711<h3>
Chris Lattner5ddaab12011-04-07 03:09:21 +0000712<a name="FAUST">FAUST Real-Time Audio Signal Processing Language</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000713</h3>
Chris Lattnerca7c8962010-10-01 06:34:49 +0000714
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000715<div>
Chris Lattner5ddaab12011-04-07 03:09:21 +0000716<p>
717<a href="http://faust.grame.fr">FAUST</a> is a compiled language for real-time
718audio signal processing. The name FAUST stands for Functional AUdio STream. Its
719programming model combines two approaches: functional programming and block
720diagram composition. In addition with the C, C++, JAVA output formats, the
Chad Rosier06da55e2011-05-27 22:50:46 +0000721Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7-3.0.</p>
Chris Lattner5ddaab12011-04-07 03:09:21 +0000722
723</div>
Bill Wendling99ba0b62011-10-25 01:01:42 +0000724-->
Chris Lattner5ddaab12011-04-07 03:09:21 +0000725
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000726</div>
727
Chris Lattnerc75fd522008-06-08 21:58:17 +0000728<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000729<h2>
Chad Rosier06da55e2011-05-27 22:50:46 +0000730 <a name="whatsnew">What's New in LLVM 3.0?</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000731</h2>
Chris Lattnerc75fd522008-06-08 21:58:17 +0000732<!-- *********************************************************************** -->
733
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000734<div>
Chris Lattnerb7bc2aa2008-06-08 22:59:35 +0000735
Chris Lattneraa61f412009-10-13 17:48:04 +0000736<p>This release includes a huge number of bug fixes, performance tweaks and
Bill Wendling16133782011-10-26 18:46:16 +0000737 minor improvements. Some of the major improvements and new features are
738 listed in this section.</p>
Chris Lattneraa61f412009-10-13 17:48:04 +0000739
Chris Lattnera67df2d2010-04-22 06:28:20 +0000740<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000741<h3>
Chris Lattnercdc44ed2008-02-06 18:00:06 +0000742<a name="majorfeatures">Major New Features</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000743</h3>
Chris Lattnercdc44ed2008-02-06 18:00:06 +0000744
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000745<div>
Chris Lattnercdc44ed2008-02-06 18:00:06 +0000746
Chad Rosier06da55e2011-05-27 22:50:46 +0000747<p>LLVM 3.0 includes several major new capabilities:</p>
Chris Lattner97beb512007-05-14 06:56:09 +0000748
749<ul>
Chris Lattnerc3a2c982011-04-06 00:45:11 +0000750
Chad Rosier06da55e2011-05-27 22:50:46 +0000751<!--
752<li></li>
753-->
Chris Lattner9ee0b012011-04-05 18:38:45 +0000754
Chris Lattner458e79f2008-02-10 08:18:42 +0000755</ul>
Chris Lattnerfd97b882011-04-05 07:19:28 +0000756
Chris Lattner97beb512007-05-14 06:56:09 +0000757</div>
758
Chris Lattner0a1fd102007-09-21 03:54:09 +0000759<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000760<h3>
Chris Lattnerd1094e02009-03-02 02:37:32 +0000761<a name="coreimprovements">LLVM IR and Core Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000762</h3>
Chris Lattnerdd6acc02008-02-10 08:17:19 +0000763
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000764<div>
Bill Wendling16133782011-10-26 18:46:16 +0000765
Chris Lattneraa61f412009-10-13 17:48:04 +0000766<p>LLVM IR has several new features for better support of new targets and that
Bill Wendling16133782011-10-26 18:46:16 +0000767 expose new optimization opportunities:</p>
Chris Lattnerdd6acc02008-02-10 08:17:19 +0000768
Bill Wendlingd535a6e2011-10-26 18:33:01 +0000769<p>One of the biggest changes is that 3.0 has a new exception handling
770 system. The old system used LLVM intrinsics to convey the exception handling
771 information to the code generator. It worked in most cases, but not
772 all. Inlining was especially difficult to get right. Also, the intrinsics
773 could be moved away from the <code>invoke</code> instruction, making it hard
774 to recover that information.</p>
775
776<p>The new EH system makes exception handling a first-class member of the IR. It
777 adds two new instructions:</p>
778
Chris Lattnerb7112222008-06-05 06:25:56 +0000779<ul>
Bill Wendlingd535a6e2011-10-26 18:33:01 +0000780 <li><a href="LangRef.html#i_landingpad"><code>landingpad</code></a> &mdash;
781 this instruction defines a landing pad basic block. It contains all of the
782 information that's needed by the code generator. It's also required to be
783 the first non-PHI instruction in the landing pad. In addition, a landing
784 pad may be jumped to only by the unwind edge of an <code>invoke</code>
785 instruction.</li>
786
787 <li><a href="LangRef.html#i_resume"><code>resume</code></a> &mdash; this
788 instruction causes the current exception to resume traveling up the
789 stack. It replaces the <code>@llvm.eh.resume</code> intrinsic.</li>
Chris Lattnerdd6acc02008-02-10 08:17:19 +0000790</ul>
Mikhail Glushenkov024f7cf2008-10-13 02:08:34 +0000791
Bill Wendlingd535a6e2011-10-26 18:33:01 +0000792<p>Converting from the old EH API to the new EH API is rather simple, because a
793 lot of complexity has been removed. The two intrinsics,
794 <code>@llvm.eh.exception</code> and <code>@llvm.eh.selector</code> have been
795 superceded by the <code>landingpad</code> instruction. Instead of generating
796 a call to <code>@llvm.eh.exception</code> and <code>@llvm.eh.selector</code>:
797
798<div class="doc_code">
799<pre>
800Function *ExcIntr = Intrinsic::getDeclaration(TheModule,
801 Intrinsic::eh_exception);
802Function *SlctrIntr = Intrinsic::getDeclaration(TheModule,
803 Intrinsic::eh_selector);
804
805// The exception pointer.
806Value *ExnPtr = Builder.CreateCall(ExcIntr, "exc_ptr");
807
808std::vector&lt;Value*&gt; Args;
809Args.push_back(ExnPtr);
810Args.push_back(Builder.CreateBitCast(Personality,
811 Type::getInt8PtrTy(Context)));
812
813<i>// Add selector clauses to Args.</i>
814
815// The selector call.
816Builder.CreateCall(SlctrIntr, Args, "exc_sel");
817</pre>
818</div>
819
820<p>You should instead generate a <code>landingpad</code> instruction, that
821 returns an exception object and selector value:</p>
822
823<div class="doc_code">
824<pre>
825LandingPadInst *LPadInst =
826 Builder.CreateLandingPad(StructType::get(Int8PtrTy, Int32Ty, NULL),
827 Personality, 0);
828
829Value *LPadExn = Builder.CreateExtractValue(LPadInst, 0);
830Builder.CreateStore(LPadExn, getExceptionSlot());
831
832Value *LPadSel = Builder.CreateExtractValue(LPadInst, 1);
833Builder.CreateStore(LPadSel, getEHSelectorSlot());
834</pre>
835</div>
836
837<p>It's now trivial to add the individual clauses to the <code>landingpad</code>
838 instruction.</p>
839
840<div class="doc_code">
841<pre>
842<i><b>// Adding a catch clause</b></i>
843Constant *TypeInfo = getTypeInfo();
844LPadInst-&gt;addClause(TypeInfo);
845
846<i><b>// Adding a C++ catch-all</b></i>
847LPadInst-&gt;addClause(Constant::getNullValue(Builder.getInt8PtrTy()));
848
849<i><b>// Adding a cleanup</b></i>
850LPadInst-&gt;setCleanup(true);
851
852<i><b>// Adding a filter clause</b></i>
853std::vector&lt;Constant*&gt; TypeInfos;
854Constant *TypeInfo = getFilterTypeInfo();
855TypeInfos.push_back(Builder.CreateBitCast(TypeInfo, Builder.getInt8PtrTy()));
856
857ArrayType *FilterTy = ArrayType::get(Int8PtrTy, TypeInfos.size());
858LPadInst-&gt;addClause(ConstantArray::get(FilterTy, TypeInfos));
859</pre>
860</div>
861
862<p>Converting from using the <code>@llvm.eh.resume</code> intrinsic to
863 the <code>resume</code> instruction is trivial. It takes the exception
864 pointer and exception selector values returned by
865 the <code>landingpad</code> instruction:</p>
866
867<div class="doc_code">
868<pre>
869Type *UnwindDataTy = StructType::get(Builder.getInt8PtrTy(),
870 Builder.getInt32Ty(), NULL);
871Value *UnwindData = UndefValue::get(UnwindDataTy);
872Value *ExcPtr = Builder.CreateLoad(getExceptionObjSlot());
873Value *ExcSel = Builder.CreateLoad(getExceptionSelSlot());
874UnwindData = Builder.CreateInsertValue(UnwindData, ExcPtr, 0, "exc_ptr");
875UnwindData = Builder.CreateInsertValue(UnwindData, ExcSel, 1, "exc_sel");
876Builder.CreateResume(UnwindData);
877</pre>
878</div>
879
Chris Lattnerdd6acc02008-02-10 08:17:19 +0000880</div>
881
882<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000883<h3>
Andrew Trick6c0a11b2011-11-06 17:59:24 +0000884<a name="loopoptimization">Loop Optimization Improvements</a>
885</h3>
886
887<div>
888<p>The induction variable simplification pass in 3.0 only modifies
889 induction variables when profitable. Sign and zero extension
890 elimination, linear function test replacement, loop unrolling, and
891 other simplifications that require induction variable analysis have
892 been generalized so they no longer require loops to be rewritten in a
893 typically suboptimal form prior to optimization. This new design
894 preserves more IR level information, avoids undoing earlier loop
895 optimizations (particularly hand-optimized loops), and no longer
896 strongly depends on the code generator rewriting loops a second time
897 in a now optimal form--an intractable problem.</p>
898
899<p>The original behavior can be restored with -mllvm -enable-iv-rewrite;
900 however, support for this mode will be short lived. As such, bug
901 reports should be filed for any significant performance regressions
902 when moving from -mllvm -enable-iv-rewrite to the 3.0 default mode.</p>
903</div>
904
905<!--=========================================================================-->
906<h3>
Chris Lattner2b8a52e2008-02-10 07:46:44 +0000907<a name="optimizer">Optimizer Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000908</h3>
Chris Lattner2b8a52e2008-02-10 07:46:44 +0000909
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000910<div>
Chris Lattner2b8a52e2008-02-10 07:46:44 +0000911
Chris Lattneraa61f412009-10-13 17:48:04 +0000912<p>In addition to a large array of minor performance tweaks and bug fixes, this
Bill Wendling16133782011-10-26 18:46:16 +0000913 release includes a few major enhancements and additions to the
914 optimizers:</p>
Chris Lattner2b8a52e2008-02-10 07:46:44 +0000915
916<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +0000917<!--
918<li></li>
919-->
Chris Lattner23e16b592011-04-06 05:50:04 +0000920</li>
Chris Lattnerc3a2c982011-04-06 00:45:11 +0000921
Chris Lattnerfcc65a72010-10-04 02:42:39 +0000922</ul>
923
Chris Lattneraa61f412009-10-13 17:48:04 +0000924</div>
Chris Lattnerd1094e02009-03-02 02:37:32 +0000925
Chris Lattner7795ea92008-06-08 02:45:07 +0000926<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000927<h3>
Chris Lattnerf25bc192010-09-30 16:31:33 +0000928<a name="mc">MC Level Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000929</h3>
Chris Lattnerf25bc192010-09-30 16:31:33 +0000930
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000931<div>
Bill Wendling16133782011-10-26 18:46:16 +0000932
933<p>The LLVM Machine Code (aka MC) subsystem was created to solve a number of
934 problems in the realm of assembly, disassembly, object file format handling,
935 and a number of other related areas that CPU instruction-set level tools work
936 in.</p>
Chris Lattnerbf1cf672010-10-02 21:59:30 +0000937
Chris Lattnerbf1cf672010-10-02 21:59:30 +0000938<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +0000939<!--
940<li></li>
941-->
Chris Lattnerbf1cf672010-10-02 21:59:30 +0000942</ul>
943
Bill Wendling16133782011-10-26 18:46:16 +0000944<p>For more information, please see
945 the <a href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro
946 to the LLVM MC Project Blog Post</a>.</p>
Chris Lattnerf25bc192010-09-30 16:31:33 +0000947
NAKAMURA Takumi8d89b8e2011-04-05 08:24:22 +0000948</div>
Chris Lattnerf25bc192010-09-30 16:31:33 +0000949
Chris Lattnerf25bc192010-09-30 16:31:33 +0000950<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000951<h3>
Chris Lattnerd434bfb2009-03-02 03:24:11 +0000952<a name="codegen">Target Independent Code Generator Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000953</h3>
Chris Lattner7795ea92008-06-08 02:45:07 +0000954
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000955<div>
Chris Lattner7795ea92008-06-08 02:45:07 +0000956
Mikhail Glushenkov25422542009-03-01 18:09:47 +0000957<p>We have put a significant amount of work into the code generator
Bill Wendling16133782011-10-26 18:46:16 +0000958 infrastructure, which allows us to implement more aggressive algorithms and
959 make it run faster:</p>
Chris Lattner7795ea92008-06-08 02:45:07 +0000960
961<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +0000962<!--
963<li></li>
964-->
Chris Lattner0a1fd102007-09-21 03:54:09 +0000965</ul>
Chris Lattner0a1fd102007-09-21 03:54:09 +0000966</div>
967
Chris Lattnerd1094e02009-03-02 02:37:32 +0000968<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000969<h3>
Chris Lattnerd1094e02009-03-02 02:37:32 +0000970<a name="x86">X86-32 and X86-64 Target Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000971</h3>
Chris Lattnerd1094e02009-03-02 02:37:32 +0000972
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000973<div>
Bill Wendling16133782011-10-26 18:46:16 +0000974
975<p>New features and major changes in the X86 target include:</p>
Chris Lattnerd1094e02009-03-02 02:37:32 +0000976
977<ul>
Bill Wendling16133782011-10-26 18:46:16 +0000978
979 <li>The CRC32 intrinsics have been renamed. The intrinsics were previously
980 <code>@llvm.x86.sse42.crc32.[8|16|32]</code>
981 and <code>@llvm.x86.sse42.crc64.[8|64]</code>. They have been renamed to
982 <code>@llvm.x86.sse42.crc32.32.[8|16|32]</code> and
983 <code>@llvm.x86.sse42.crc32.64.[8|64]</code>.</li>
Chad Rosierd1db4f82011-05-27 20:13:10 +0000984
Chris Lattnerd1094e02009-03-02 02:37:32 +0000985</ul>
986
Chris Lattnerd1094e02009-03-02 02:37:32 +0000987</div>
Chris Lattner0a1fd102007-09-21 03:54:09 +0000988
989<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000990<h3>
Chris Lattneraa61f412009-10-13 17:48:04 +0000991<a name="ARM">ARM Target Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +0000992</h3>
Chris Lattnerc92d7692009-03-01 02:30:21 +0000993
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +0000994<div>
Bill Wendling16133782011-10-26 18:46:16 +0000995
996<p>New features of the ARM target include:</p>
Chris Lattnerc92d7692009-03-01 02:30:21 +0000997
998<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +0000999<!--
1000<li></li>
1001-->
Bob Wilsone44f2982010-09-13 17:39:35 +00001002</ul>
Chris Lattneraa61f412009-10-13 17:48:04 +00001003</div>
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001004
1005<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001006<h3>
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001007<a name="OtherTS">Other Target Specific Improvements</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001008</h3>
Chris Lattnerc92d7692009-03-01 02:30:21 +00001009
Roman Divacky2634d772011-10-30 07:49:04 +00001010<p>PPC32/ELF va_arg was implemented.</p>
1011<p>PPC32 initial support for .o file writing was implemented.</p>
1012
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001013<div>
Bill Wendling16133782011-10-26 18:46:16 +00001014
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001015<ul>
Chad Rosier06da55e2011-05-27 22:50:46 +00001016<!--
1017<li></li>
1018-->
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001019</ul>
Bill Wendling16133782011-10-26 18:46:16 +00001020
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001021</div>
Chris Lattner6cb64032008-06-05 08:02:49 +00001022
1023<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001024<h3>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001025<a name="changes">Major Changes and Removed Features</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001026</h3>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001027
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001028<div>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001029
Bill Wendling2d3138c2011-08-03 22:18:20 +00001030<p>If you're already an LLVM user or developer with out-of-tree changes based on
1031 LLVM 2.9, this section lists some "gotchas" that you may run into upgrading
1032 from the previous release.</p>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001033
1034<ul>
Eric Christopher508503b2011-09-28 19:47:28 +00001035 <li>The <code>LLVMC</code> front end code was removed while separating
1036 out language independence.</li>
Jay Foad2755e072011-08-04 10:43:43 +00001037 <li>The <code>LowerSetJmp</code> pass wasn't used effectively by any
1038 target and has been removed.</li>
Rafael Espindolaa45c20b2011-08-30 23:03:45 +00001039 <li>The old <code>TailDup</code> pass was not used in the standard pipeline
1040 and was unable to update ssa form, so it has been removed.
Eli Friedman02e737b2011-08-12 22:50:01 +00001041 <li>The syntax of volatile loads and stores in IR has been changed to
1042 "<code>load volatile</code>"/"<code>store volatile</code>". The old
1043 syntax ("<code>volatile load</code>"/"<code>volatile store</code>")
1044 is still accepted, but is now considered deprecated.</li>
Eli Friedman2c25d9c2011-10-26 00:55:23 +00001045 <li>The old atomic intrinscs (<code>llvm.memory.barrier</code> and
1046 <code>llvm.atomic.*</code>) are now gone. Please use the new atomic
1047 instructions, described in the <a href="Atomics.html">atomics guide</a>.
Devang Pateldbf83832008-10-14 20:03:43 +00001048</ul>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001049
NAKAMURA Takumi2b462b52011-08-22 23:22:05 +00001050<h4>Windows (32-bit)</h4>
1051<div>
Bill Wendling16133782011-10-26 18:46:16 +00001052
NAKAMURA Takumi2b462b52011-08-22 23:22:05 +00001053<ul>
1054 <li>On Win32(MinGW32 and MSVC), Windows 2000 will not be supported.
1055 Windows XP or higher is required.</li>
1056</ul>
Bill Wendling16133782011-10-26 18:46:16 +00001057
NAKAMURA Takumi2b462b52011-08-22 23:22:05 +00001058</div>
1059
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001060</div>
1061
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001062<!--=========================================================================-->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001063<h3>
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001064<a name="api_changes">Internal API Changes</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001065</h3>
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001066
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001067<div>
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001068
Chris Lattnerc3a2c982011-04-06 00:45:11 +00001069<p>In addition, many APIs have changed in this release. Some of the major
Bill Wendling46ffaa92011-08-02 06:20:17 +00001070 LLVM API changes are:</p>
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001071
1072<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001073 <li>The biggest and most pervasive change is that llvm::Type's are no longer
1074 returned or accepted as 'const' values. Instead, just pass around
1075 non-const Type's.</li>
Chris Lattner14b3b4d2011-07-18 04:56:02 +00001076
Bill Wendling16133782011-10-26 18:46:16 +00001077 <li><code>PHINode::reserveOperandSpace</code> has been removed. Instead, you
1078 must specify how many operands to reserve space for when you create the
1079 PHINode, by passing an extra argument
1080 into <code>PHINode::Create</code>.</li>
Jay Foade03f15a2011-07-14 09:19:05 +00001081
Bill Wendling16133782011-10-26 18:46:16 +00001082 <li>PHINodes no longer store their incoming BasicBlocks as operands. Instead,
1083 the list of incoming BasicBlocks is stored separately, and can be accessed
1084 with new functions <code>PHINode::block_begin</code>
1085 and <code>PHINode::block_end</code>.</li>
Jay Foade03f15a2011-07-14 09:19:05 +00001086
Bill Wendling16133782011-10-26 18:46:16 +00001087 <li>Various functions now take an <code>ArrayRef</code> instead of either a
1088 pair of pointers (or iterators) to the beginning and end of a range, or a
1089 pointer and a length. Others now return an <code>ArrayRef</code> instead
1090 of a reference to a <code>SmallVector</code>
1091 or <code>std::vector</code>. These include:
Jay Foade03f15a2011-07-14 09:19:05 +00001092<ul>
1093<!-- Please keep this list sorted. -->
Jay Foad5bd375a2011-07-15 08:37:34 +00001094<li><code>CallInst::Create</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001095<li><code>ComputeLinearIndex</code> (in <code>llvm/CodeGen/Analysis.h</code>)</li>
1096<li><code>ConstantArray::get</code></li>
1097<li><code>ConstantExpr::getExtractElement</code></li>
Jay Foaded8db7d2011-07-21 14:31:17 +00001098<li><code>ConstantExpr::getGetElementPtr</code></li>
1099<li><code>ConstantExpr::getInBoundsGetElementPtr</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001100<li><code>ConstantExpr::getIndices</code></li>
1101<li><code>ConstantExpr::getInsertElement</code></li>
1102<li><code>ConstantExpr::getWithOperands</code></li>
Jay Foadf4b14a22011-07-19 13:32:40 +00001103<li><code>ConstantFoldCall</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li>
1104<li><code>ConstantFoldInstOperands</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li>
Jay Foade03f15a2011-07-14 09:19:05 +00001105<li><code>ConstantVector::get</code></li>
1106<li><code>DIBuilder::createComplexVariable</code></li>
1107<li><code>DIBuilder::getOrCreateArray</code></li>
1108<li><code>ExtractValueInst::Create</code></li>
1109<li><code>ExtractValueInst::getIndexedType</code></li>
1110<li><code>ExtractValueInst::getIndices</code></li>
1111<li><code>FindInsertedValue</code> (in <code>llvm/Analysis/ValueTracking.h</code>)</li>
Jay Foad528beda2011-07-19 14:42:50 +00001112<li><code>gep_type_begin</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li>
1113<li><code>gep_type_end</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li>
Jay Foadd1b78492011-07-25 09:48:08 +00001114<li><code>GetElementPtrInst::Create</code></li>
1115<li><code>GetElementPtrInst::CreateInBounds</code></li>
1116<li><code>GetElementPtrInst::getIndexedType</code></li>
Jay Foad857a48a2011-07-21 14:42:51 +00001117<li><code>InsertValueInst::Create</code></li>
1118<li><code>InsertValueInst::getIndices</code></li>
1119<li><code>InvokeInst::Create</code></li>
Jay Foad5bd375a2011-07-15 08:37:34 +00001120<li><code>IRBuilder::CreateCall</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001121<li><code>IRBuilder::CreateExtractValue</code></li>
Jay Foad040dd822011-07-22 08:16:57 +00001122<li><code>IRBuilder::CreateGEP</code></li>
1123<li><code>IRBuilder::CreateInBoundsGEP</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001124<li><code>IRBuilder::CreateInsertValue</code></li>
Jay Foad5bd375a2011-07-15 08:37:34 +00001125<li><code>IRBuilder::CreateInvoke</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001126<li><code>MDNode::get</code></li>
1127<li><code>MDNode::getIfExists</code></li>
1128<li><code>MDNode::getTemporary</code></li>
1129<li><code>MDNode::getWhenValsUnresolved</code></li>
Jay Foadb992a632011-07-19 15:07:52 +00001130<li><code>SimplifyGEPInst</code> (in <code>llvm/Analysis/InstructionSimplify.h</code>)</li>
Jay Foadbf904772011-07-19 14:01:37 +00001131<li><code>TargetData::getIndexedOffset</code></li>
Jay Foade03f15a2011-07-14 09:19:05 +00001132</ul></li>
1133
Bill Wendling16133782011-10-26 18:46:16 +00001134 <li>All forms of <code>StringMap::getOrCreateValue</code> have been remove
1135 except for the one which takes a <code>StringRef</code>.</li>
Jay Foade03f15a2011-07-14 09:19:05 +00001136
Bill Wendling16133782011-10-26 18:46:16 +00001137 <li>The <code>LLVMBuildUnwind</code> function from the C API was removed. The
1138 LLVM <code>unwind</code> instruction has been deprecated for a long time
1139 and isn't used by the current front-ends. So this was removed during the
1140 exception handling rewrite.</li>
Bill Wendling46ffaa92011-08-02 06:20:17 +00001141
Bill Wendling16133782011-10-26 18:46:16 +00001142 <li>The <code>LLVMAddLowerSetJmpPass</code> function from the C API was
1143 removed because the <code>LowerSetJmp</code> pass was removed.</li>
Bill Wendling2d3138c2011-08-03 22:18:20 +00001144
Bill Wendling16133782011-10-26 18:46:16 +00001145 <li>The <code>DIBuilder</code> interface used by front ends to encode
1146 debugging information in the LLVM IR now expects clients to
1147 use <code>DIBuilder::finalize()</code> at the end of translation unit to
1148 complete debugging information encoding.</li>
Devang Patel2b8acaf2011-08-15 23:00:00 +00001149
Bill Wendling16133782011-10-26 18:46:16 +00001150 <li>The way the type system works has been
1151 rewritten: <code>PATypeHolder</code> and <code>OpaqueType</code> are gone,
1152 and all APIs deal with <code>Type*</code> instead of <code>const
1153 Type*</code>. If you need to create recursive structures, then create a
1154 named structure, and use <code>setBody()</code> when all its elements are
1155 built. Type merging and refining is gone too: named structures are not
1156 merged with other structures, even if their layout is identical. (of
1157 course anonymous structures are still uniqued by layout).</li>
Torok Edwin52cac092011-09-30 13:07:52 +00001158
Bill Wendling16133782011-10-26 18:46:16 +00001159 <li>TargetSelect.h moved to Support/ from Target/</li>
Torok Edwin52cac092011-09-30 13:07:52 +00001160
Bill Wendling16133782011-10-26 18:46:16 +00001161 <li>UpgradeIntrinsicCall no longer upgrades pre-2.9 intrinsic calls (for
1162 example <code>llvm.memset.i32</code>).</li>
Torok Edwin52cac092011-09-30 13:07:52 +00001163
Bill Wendling16133782011-10-26 18:46:16 +00001164 <li>It is mandatory to initialize all out-of-tree passes too and their dependencies now with
1165 <code>INITIALIZE_PASS{BEGIN,END,}</code>
1166 and <code>INITIALIZE_{PASS,AG}_DEPENDENCY</code>.</li>
Torok Edwin52cac092011-09-30 13:07:52 +00001167
Bill Wendling16133782011-10-26 18:46:16 +00001168 <li>The interface for MemDepResult in MemoryDependenceAnalysis has been
1169 enhanced with new return types Unknown and NonFuncLocal, in addition to
1170 the existing types Clobber, Def, and NonLocal.</li>
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001171</ul>
Bill Wendling16133782011-10-26 18:46:16 +00001172
Daniel Dunbarf70898a2010-10-04 20:11:41 +00001173</div>
Chris Lattner1e4d5bc2008-10-13 17:57:36 +00001174
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001175</div>
1176
Chris Lattner3d482502003-10-02 04:57:28 +00001177<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001178<h2>
Misha Brukman80731b92003-11-22 00:38:41 +00001179 <a name="knownproblems">Known Problems</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001180</h2>
Chris Lattner3d482502003-10-02 04:57:28 +00001181<!-- *********************************************************************** -->
1182
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001183<div>
Misha Brukman80731b92003-11-22 00:38:41 +00001184
Bill Wendling16133782011-10-26 18:46:16 +00001185<p>This section contains significant known problems with the LLVM system, listed
1186 by component. If you run into a problem, please check
1187 the <a href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
1188 there isn't already one.</p>
Chris Lattner3d482502003-10-02 04:57:28 +00001189
Chris Lattnerb911de42004-03-14 02:03:02 +00001190<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001191<h3>
Chris Lattnerb911de42004-03-14 02:03:02 +00001192 <a name="experimental">Experimental features included with this release</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001193</h3>
Chris Lattner3d482502003-10-02 04:57:28 +00001194
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001195<div>
Chris Lattnerb911de42004-03-14 02:03:02 +00001196
Misha Brukmanfa50a222004-05-12 21:46:05 +00001197<p>The following components of this LLVM release are either untested, known to
Bill Wendling16133782011-10-26 18:46:16 +00001198 be broken or unreliable, or are in early development. These components
1199 should not be relied on, and bugs should not be filed against them, but they
1200 may be useful to some people. In particular, if you would like to work on
1201 one of these components, please contact us on
1202 the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev
1203 list</a>.</p>
Chris Lattnerb911de42004-03-14 02:03:02 +00001204
1205<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001206 <li>The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ and
1207 XCore backends are experimental.</li>
1208
1209 <li><tt>llc</tt> "<tt>-filetype=obj</tt>" is experimental on all targets other
1210 than darwin and ELF X86 systems.</li>
Chris Lattnerb911de42004-03-14 02:03:02 +00001211</ul>
1212
1213</div>
Chris Lattner3d482502003-10-02 04:57:28 +00001214
Misha Brukman80731b92003-11-22 00:38:41 +00001215<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001216<h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001217 <a name="x86-be">Known problems with the X86 back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001218</h3>
John Criswell3bdbd302005-11-08 21:11:33 +00001219
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001220<div>
John Criswell3bdbd302005-11-08 21:11:33 +00001221
1222<ul>
Anton Korobeynikov486c7d32008-06-08 10:24:13 +00001223 <li>The X86 backend does not yet support
Bill Wendling16133782011-10-26 18:46:16 +00001224 all <a href="http://llvm.org/PR879">inline assembly that uses the X86
1225 floating point stack</a>. It supports the 'f' and 't' constraints, but
1226 not 'u'.</li>
1227
Dan Gohman721b3722008-06-08 23:05:11 +00001228 <li>The X86-64 backend does not yet support the LLVM IR instruction
Bill Wendling16133782011-10-26 18:46:16 +00001229 <tt>va_arg</tt>. Currently, front-ends support variadic argument
1230 constructs on X86-64 by lowering them manually.</li>
1231
NAKAMURA Takumi8d89b8e2011-04-05 08:24:22 +00001232 <li>Windows x64 (aka Win64) code generator has a few issues.
1233 <ul>
Bill Wendling16133782011-10-26 18:46:16 +00001234 <li>llvm-gcc cannot build the mingw-w64 runtime currently due to lack of
1235 support for the 'u' inline assembly constraint and for X87 floating
1236 point inline assembly.</li>
1237
1238 <li>On mingw-w64, you will see unresolved symbol <tt>__chkstk</tt> due
1239 to <a href="http://llvm.org/bugs/show_bug.cgi?id=8919">Bug 8919</a>.
1240 It is fixed
1241 in <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110321/118499.html">r128206</a>.</li>
1242
NAKAMURA Takumi8d89b8e2011-04-05 08:24:22 +00001243 <li>Miss-aligned MOVDQA might crash your program. It is due to
Bill Wendling16133782011-10-26 18:46:16 +00001244 <a href="http://llvm.org/bugs/show_bug.cgi?id=9483">Bug 9483</a>, lack
1245 of handling aligned internal globals.</li>
NAKAMURA Takumi8d89b8e2011-04-05 08:24:22 +00001246 </ul>
1247 </li>
1248
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001249</ul>
1250
1251</div>
1252
1253<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001254<h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001255 <a name="ppc-be">Known problems with the PowerPC back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001256</h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001257
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001258<div>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001259
1260<ul>
Roman Divacky2634d772011-10-30 07:49:04 +00001261 <li>The PPC32/ELF support lacks PIC support.</li>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001262</ul>
1263
1264</div>
1265
1266<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001267<h3>
Chris Lattner97beb512007-05-14 06:56:09 +00001268 <a name="arm-be">Known problems with the ARM back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001269</h3>
Chris Lattner97beb512007-05-14 06:56:09 +00001270
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001271<div>
Chris Lattner97beb512007-05-14 06:56:09 +00001272
1273<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001274 <li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
1275 processors, thumb programs can crash or produce wrong results
1276 (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
1277
1278 <li>Compilation for ARM Linux OABI (old ABI) is supported but not fully
1279 tested.</li>
Chris Lattner97beb512007-05-14 06:56:09 +00001280</ul>
1281
1282</div>
1283
1284<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001285<h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001286 <a name="sparc-be">Known problems with the SPARC back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001287</h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001288
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001289<div>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001290
1291<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001292 <li>The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not
1293 support the 64-bit SPARC ABI (-m64).</li>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001294</ul>
1295
1296</div>
1297
1298<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001299<h3>
Bruno Cardoso Lopes24eb3de2008-10-25 14:56:26 +00001300 <a name="mips-be">Known problems with the MIPS back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001301</h3>
Bruno Cardoso Lopes24eb3de2008-10-25 14:56:26 +00001302
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001303<div>
Bruno Cardoso Lopes24eb3de2008-10-25 14:56:26 +00001304
1305<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001306 <li>64-bit MIPS targets are not supported yet.</li>
Bruno Cardoso Lopes24eb3de2008-10-25 14:56:26 +00001307</ul>
1308
1309</div>
1310
1311<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001312<h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001313 <a name="alpha-be">Known problems with the Alpha back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001314</h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001315
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001316<div>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001317
1318<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001319 <li>On 21164s, some rare FP arithmetic sequences which may trap do not have
1320 the appropriate nops inserted to ensure restartability.</li>
John Criswell3bdbd302005-11-08 21:11:33 +00001321</ul>
Bill Wendling16133782011-10-26 18:46:16 +00001322
John Criswell3bdbd302005-11-08 21:11:33 +00001323</div>
1324
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001325<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001326<h3>
Chris Lattner97beb512007-05-14 06:56:09 +00001327 <a name="c-be">Known problems with the C back-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001328</h3>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001329
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001330<div>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001331
Chris Lattner086d2692010-09-29 05:34:42 +00001332<p>The C backend has numerous problems and is not being actively maintained.
Bill Wendling16133782011-10-26 18:46:16 +00001333 Depending on it for anything serious is not advised.</p>
Chris Lattner086d2692010-09-29 05:34:42 +00001334
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001335<ul>
Bill Wendling16133782011-10-26 18:46:16 +00001336 <li><a href="http://llvm.org/PR802">The C backend has only basic support for
1337 inline assembly code</a>.</li>
1338
1339 <li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common
1340 C++ programs</a>, preventing intermixing between C++ compiled by the CBE
1341 and C++ code compiled with <tt>llc</tt> or native compilers.</li>
1342
1343 <li>The C backend does not support all exception handling constructs.</li>
1344
1345 <li>The C backend does not support arbitrary precision integers.</li>
Chris Lattnerb81f10e2006-11-18 07:51:14 +00001346</ul>
1347
1348</div>
John Criswell3bdbd302005-11-08 21:11:33 +00001349
Misha Brukman80731b92003-11-22 00:38:41 +00001350
1351<!-- ======================================================================= -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001352<h3>
Chris Lattner086d2692010-09-29 05:34:42 +00001353 <a name="llvm-gcc">Known problems with the llvm-gcc front-end</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001354</h3>
Chris Lattner178f3db2003-10-02 05:07:23 +00001355
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001356<div>
Chris Lattner72a269f2006-03-03 00:34:26 +00001357
Bill Wendling16133782011-10-26 18:46:16 +00001358<p><b>LLVM 2.9 was the last release of llvm-gcc.</b></p>
Chris Lattner17c170a2011-04-06 06:29:50 +00001359
Chris Lattner086d2692010-09-29 05:34:42 +00001360<p>llvm-gcc is generally very stable for the C family of languages. The only
1361 major language feature of GCC not supported by llvm-gcc is the
1362 <tt>__builtin_apply</tt> family of builtins. However, some extensions
1363 are only supported on some targets. For example, trampolines are only
1364 supported on some targets (these are used when you take the address of a
1365 nested function).</p>
Misha Brukman80731b92003-11-22 00:38:41 +00001366
Chris Lattner086d2692010-09-29 05:34:42 +00001367<p>Fortran support generally works, but there are still several unresolved bugs
1368 in <a href="http://llvm.org/bugs/">Bugzilla</a>. Please see the
1369 tools/gfortran component for details. Note that llvm-gcc is missing major
1370 Fortran performance work in the frontend and library that went into GCC after
1371 4.2. If you are interested in Fortran, we recommend that you consider using
1372 <a href="#dragonegg">dragonegg</a> instead.</p>
Chris Lattner3d482502003-10-02 04:57:28 +00001373
Duncan Sandsd63e1c82010-10-04 10:06:56 +00001374<p>The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being
Bill Wendling16133782011-10-26 18:46:16 +00001375 actively maintained. If you are interested in Ada, we recommend that you
1376 consider using <a href="#dragonegg">dragonegg</a> instead.</p>
1377
Chris Lattnere38ac152008-02-12 06:29:45 +00001378</div>
1379
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001380</div>
1381
Chris Lattner3d482502003-10-02 04:57:28 +00001382<!-- *********************************************************************** -->
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001383<h2>
Misha Brukman80731b92003-11-22 00:38:41 +00001384 <a name="additionalinfo">Additional Information</a>
NAKAMURA Takumi64835132011-04-18 01:17:51 +00001385</h2>
Chris Lattner3d482502003-10-02 04:57:28 +00001386<!-- *********************************************************************** -->
1387
NAKAMURA Takumi3ad28282011-04-21 01:52:00 +00001388<div>
Misha Brukman80731b92003-11-22 00:38:41 +00001389
Bill Wendling16133782011-10-26 18:46:16 +00001390<p>A wide variety of additional information is available on
1391 the <a href="http://llvm.org/">LLVM web page</a>, in particular in
1392 the <a href="http://llvm.org/docs/">documentation</a> section. The web page
1393 also contains versions of the API documentation which is up-to-date with the
1394 Subversion version of the source code. You can access versions of these
1395 documents specific to this release by going into the "<tt>llvm/doc/</tt>"
1396 directory in the LLVM tree.</p>
Chris Lattner3d482502003-10-02 04:57:28 +00001397
Misha Brukman80731b92003-11-22 00:38:41 +00001398<p>If you have any questions or comments about LLVM, please feel free to contact
Bill Wendling16133782011-10-26 18:46:16 +00001399 us via the <a href="http://llvm.org/docs/#maillist"> mailing lists</a>.</p>
Chris Lattner3d482502003-10-02 04:57:28 +00001400
Misha Brukman80731b92003-11-22 00:38:41 +00001401</div>
Chris Lattner3d482502003-10-02 04:57:28 +00001402
1403<!-- *********************************************************************** -->
Chris Lattner3d482502003-10-02 04:57:28 +00001404
Misha Brukman80731b92003-11-22 00:38:41 +00001405<hr>
Misha Brukman68aab3b2003-11-22 01:23:39 +00001406<address>
Misha Brukman8834af92003-12-21 22:53:21 +00001407 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
Misha Brukman86242e12008-12-11 17:34:48 +00001408 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
Misha Brukman68aab3b2003-11-22 01:23:39 +00001409 <a href="http://validator.w3.org/check/referer"><img
Misha Brukman86242e12008-12-11 17:34:48 +00001410 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
Misha Brukman68aab3b2003-11-22 01:23:39 +00001411
Chris Lattnere0c1df42007-05-18 00:44:29 +00001412 <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
Misha Brukman80731b92003-11-22 00:38:41 +00001413 Last modified: $Date$
Misha Brukman68aab3b2003-11-22 01:23:39 +00001414</address>
Chris Lattner3d482502003-10-02 04:57:28 +00001415
Misha Brukman80731b92003-11-22 00:38:41 +00001416</body>
1417</html>