blob: aa11404d3c619996c847345ac82d09f424ac2f7c [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 <link rel="stylesheet" href="llvm.css" type="text/css">
Chris Lattnerb0d6c502007-09-21 03:54:09 +00007 <title>LLVM 2.1 Release Notes</title>
Dan Gohmanf17a25c2007-07-18 16:29:46 +00008</head>
9<body>
10
Chris Lattnerb0d6c502007-09-21 03:54:09 +000011<div class="doc_title">LLVM 2.1 Release Notes</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000012
13<ol>
14 <li><a href="#intro">Introduction</a></li>
15 <li><a href="#whatsnew">What's New?</a></li>
16 <li><a href="GettingStarted.html">Installation Instructions</a></li>
17 <li><a href="#portability">Portability and Supported Platforms</a></li>
18 <li><a href="#knownproblems">Known Problems</a>
19 <li><a href="#additionalinfo">Additional Information</a></li>
20</ol>
21
22<div class="doc_author">
23 <p>Written by the <a href="http://llvm.org">LLVM Team</a><p>
24</div>
25
26<!-- *********************************************************************** -->
27<div class="doc_section">
28 <a name="intro">Introduction</a>
29</div>
30<!-- *********************************************************************** -->
31
32<div class="doc_text">
33
34<p>This document contains the release notes for the LLVM compiler
Chris Lattnerb0d6c502007-09-21 03:54:09 +000035infrastructure, release 2.1. Here we describe the status of LLVM, including
Dan Gohmanf17a25c2007-07-18 16:29:46 +000036major improvements from the previous release and any known problems. All LLVM
37releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM
38releases web site</a>.</p>
39
40<p>For more information about LLVM, including information about the latest
41release, please check out the <a href="http://llvm.org/">main LLVM
42web site</a>. If you have questions or comments, the <a
43href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
44list</a> is a good place to send them.</p>
45
46<p>Note that if you are reading this file from a Subversion checkout or the
Chris Lattnerb0d6c502007-09-21 03:54:09 +000047main LLVM web page, this document applies to the <i>next</i> release, not the
48current one. To see the release notes for a specific releases, please see the
49<a href="http://llvm.org/releases/">releases page</a>.</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000050
51</div>
52
53<!-- *********************************************************************** -->
54<div class="doc_section">
55 <a name="whatsnew">What's New?</a>
56</div>
57<!-- *********************************************************************** -->
58
59<div class="doc_text">
60
Chris Lattnerb0d6c502007-09-21 03:54:09 +000061<p>This is the twelfth public release of the LLVM Compiler Infrastructure.
62It includes many features and refinements from LLVM 2.0.</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000063
64</div>
65
66<!--=========================================================================-->
67<div class="doc_subsection">
Chris Lattnerb0d6c502007-09-21 03:54:09 +000068<a name="frontends">New Frontends</a>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000069</div>
70
Dan Gohmanf17a25c2007-07-18 16:29:46 +000071<div class="doc_text">
72
Duncan Sands1827fa62007-09-26 15:59:54 +000073<p>LLVM 2.1 brings two new beta C front-ends. First, a new version of llvm-gcc
74based on GCC 4.2, innovatively called "llvm-gcc-4.2". This promises to bring
75FORTRAN and Ada support to LLVM as well as features like atomic builtins and
76OpenMP. None of these actually work yet, but don't let that stop you checking
77it out!</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000078
Chris Lattnerb0d6c502007-09-21 03:54:09 +000079<p>Second, LLVM now includes its own native C and Objective-C front-end (C++ is
80in progress, but is not very far along) code named "<a
81href="http://clang.llvm.org/">clang</a>". This front-end has a number of great
82features, primarily aimed at source-level analysis and speeding up compile-time.
83At this point though, the LLVM Code Generator component is still very early in
84development, so it's mostly useful for people looking to build source-level
85analysis tools or source-to-source translators.</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000086
87</div>
88
Chris Lattnerb0d6c502007-09-21 03:54:09 +000089<!--=========================================================================-->
90<div class="doc_subsection">
91<a name="optimizer">Optimizer Improvements</a>
92</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000093
Dan Gohmanf17a25c2007-07-18 16:29:46 +000094<div class="doc_text">
Chris Lattnerb0d6c502007-09-21 03:54:09 +000095
Chris Lattner7d2b1102007-09-26 05:44:21 +000096<p>Some of the most noticable feature improvements this release have been in the
97optimizer, speeding it up and making it more aggressive. For example:</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +000098
99<ul>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000100
Owen Anderson5b332932007-09-25 02:10:58 +0000101<li>Owen Anderson wrote the new MemoryDependenceAnalysis pass, which provides
Chris Lattnerdb5e2c62007-09-26 06:38:59 +0000102 a lazy, caching layer on top of <a
103 href="AliasAnalysis.html">AliasAnalysis</a>. He then used it to rewrite
Owen Anderson5b332932007-09-25 02:10:58 +0000104 DeadStoreElimination which resulted in significantly better compile time in
105 common cases, </li>
106<li>Owen implemented the new GVN pass, which is also based on
107 MemoryDependenceAnalysis. This pass replaces GCSE/LoadVN in the standard
108 set of passes, providing more aggressive optimization at a some-what
109 improved compile-time cost.</li>
110<li>Owen implemented GVN-PRE, a partial redundancy elimination algorithm that
111 shares some details with the new GVN pass. It is still in need of compile
112 time tuning, and is not turned on by default.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000113<li>Devang merged ETForest and DomTree into a single easier to use data
Chris Lattner7d2b1102007-09-26 05:44:21 +0000114 structure. This makes it more obvious which datastructure to choose
115 (because there is only one) and makes the compiler more memory and time
116 efficient (less stuff to keep up-to-date).</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000117<li>Nick Lewycky improved loop trip count analysis to handle many more common
Chris Lattner7d2b1102007-09-26 05:44:21 +0000118 cases.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000119
120</ul>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000121
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000122</div>
123
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000124<!--=========================================================================-->
125<div class="doc_subsection">
126<a name="codegen">Code Generator Improvements</a>
127</div>
128
129<div class="doc_text">
130
Chris Lattner7d2b1102007-09-26 05:44:21 +0000131<p>One of the main focuses of this release was performance tuning and bug
132 fixing. In addition to these, several new major changes occurred:</p>
133
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000134<ul>
135
Chris Lattner7d2b1102007-09-26 05:44:21 +0000136<li>Dale finished up the Tail Merging optimization in the code generator, and
137 enabled it by default. This produces smaller code that is also faster in
138 some cases.</li>
139
140<li>Christopher Lamb implemented support for virtual register sub-registers,
141 which can be used to better model many forms of subregisters. As an example
142 use, he modified the X86 backend to use this to model truncates and
143 extends more accurately (leading to better code).</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000144
145<li>Dan Gohman changed the way we represent vectors before legalization,
Chris Lattner7d2b1102007-09-26 05:44:21 +0000146 significantly simplifying the SelectionDAG representation for these and
147 making the code generator faster for vector code.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000148
Chris Lattner7d2b1102007-09-26 05:44:21 +0000149<li>Evan contributed a new target independent if-converter. While it is
Chris Lattner56481a52007-09-26 15:48:33 +0000150 target independent, so far only the ARM backend uses it.</li>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000151
152<li>Evan rewrite the way the register allocator handles rematerialization,
153 allowing it to be much more effective on two-address targets like X86,
154 and taught it to fold loads away when possible (also a big win on X86).</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000155
156<li>Dan Gohman contributed support for better alignment and volatility handling
Chris Lattner7d2b1102007-09-26 05:44:21 +0000157 in the code generator, and significantly enhanced alignment analysis for SSE
158 load/store instructions. With his changes, an insufficiently-aligned SSE
159 load instruction turns into <tt>movups</tt>, for example.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000160
161<li>Duraid Madina contributed a new "bigblock" register allocator, and Roman
Chris Lattner7d2b1102007-09-26 05:44:21 +0000162 Levenstein contributed several big improvements. BigBlock is optimized for
163 code that uses very large basic blocks. It is slightly slower than the
164 "local" allocator, but produces much better code.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000165
Chris Lattner76dec102007-09-21 17:43:52 +0000166<li>David Greene refactored the register allocator to split coalescing out from
Chris Lattner7d2b1102007-09-26 05:44:21 +0000167 allocation, making coalescers pluggable.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000168
169</ul>
170
171</div>
172
173
174<!--=========================================================================-->
175<div class="doc_subsection">
176<a name="targetspecific">Target Specific Improvements</a>
177</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000178
179<div class="doc_text">
180<p>New features include:
181</p>
182
183<ul>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000184<li>Bruno Cardoso Lopes contributed initial MIPS support. It is sufficient to
185 run many small programs, but is still incomplete and is not yet
186 fully performant.</li>
187
188<li>Bill Wendling added SSSE3 support to the X86 backend.</li>
189
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000190<li>Nicholas Geoffray contributed improved linux/ppc ABI and JIT support.</li>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000191
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000192<li>Dale Johannesen rewrote handling of 32-bit float values in the X86 backend
Chris Lattner7d2b1102007-09-26 05:44:21 +0000193 when using the floating point stack, fixing several nasty bugs.</li>
194
195<li>Dan contributed rematerialization support for the X86 backend, in addition
196 to several X86-specific micro optimizations.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000197</ul>
198
199</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000200
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000201
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000202<!--=========================================================================-->
203<div class="doc_subsection">
204<a name="llvmgccimprovements">llvm-gcc Improvements</a>
205</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000206
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000207<div class="doc_text">
208<p>New features include:
209</p>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000210
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000211<ul>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000212<li>Duncan and Anton made significant progress chasing down a number of problems
213 with C++ Zero-Cost exception handling in llvm-gcc 4.0 and 4.2. It is now at
Duncan Sands1827fa62007-09-26 15:59:54 +0000214 the point where it "just works" on linux/X86-32 and has partial support on
Chris Lattner7d2b1102007-09-26 05:44:21 +0000215 other targets.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000216
Chris Lattner7d2b1102007-09-26 05:44:21 +0000217<li>Devang and Duncan fixed a huge number of bugs relating to bitfields, pragma
218 pack, and variable sized fields in structures.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000219
Chris Lattner7d2b1102007-09-26 05:44:21 +0000220<li>Tanya implemented support for <tt>__attribute__((noinline))</tt> in
221 llvm-gcc, and added support for generic variable annotations which are
222 propagated into the LLVM IR, e.g.
223 "<tt>int X __attribute__((annotate("myproperty")));</tt>".</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000224
225<li>Sheng Zhou and Christopher Lamb implemented alias analysis support for
Chris Lattner7d2b1102007-09-26 05:44:21 +0000226"restrict" pointer arguments to functions.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000227
Chris Lattner7d2b1102007-09-26 05:44:21 +0000228<li>Duncan contributed support for trampolines (taking the address of a nested
Duncan Sands1827fa62007-09-26 15:59:54 +0000229 function). Currently this is only supported on the X86 target.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000230
Chris Lattner7d2b1102007-09-26 05:44:21 +0000231<li>Lauro Ramos Venancio contributed support to encode alignment info in
232 load and store instructions, the foundation for other alignment-related
233 work.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000234</ul>
235
236</div>
237
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000238
239<!--=========================================================================-->
240<div class="doc_subsection">
241<a name="coreimprovements">LLVM Core Improvements</a>
242</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000243
244<div class="doc_text">
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000245<p>New features include:
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000246</p>
247
248<ul>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000249<li>Neil Booth contributed a new "APFloat" class, which ensures that floating
250 point representation and constant folding is not dependent on the host
251 architecture that builds the application. This support is the foundation
252 for "long double" support that will be wrapped up in LLVM 2.2.</li>
253
254<li>Based on the APFloat class, Dale redesigned the internals of the ConstantFP
255 class and has been working on extending the core and optimizer components to
256 support various target-specific 'long double's. We expect this work to be
257 completed in LLVM 2.2.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000258
Chris Lattner7d2b1102007-09-26 05:44:21 +0000259<li>LLVM now provides an LLVMBuilder class, which makes it significantly easier
260 to create LLVM IR instructions.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000261
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000262<li>Reid contributed support for intrinsics that take arbitrary integer typed
Chris Lattner7d2b1102007-09-26 05:44:21 +0000263 arguments. Dan Gohman and Chandler extended it to support arbitrary
264 floating point arguments and vectors.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000265</ul>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000266
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000267</div>
268
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000269<!--=========================================================================-->
270<div class="doc_subsection">
271<a name="otherimprovements">Other Improvements</a>
272</div>
273
274<div class="doc_text">
275<p>New features include:
276</p>
277
278<ul>
Chris Lattner7d2b1102007-09-26 05:44:21 +0000279<li>Sterling Stein contributed a new BrainF frontend, located in llvm/examples.
280 This shows a some of the more modern APIs for building a front-end, and
281 demonstrates JIT compiler support.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000282
Chris Lattner7d2b1102007-09-26 05:44:21 +0000283<li>David Green contributed a new <tt>--enable-expensive-checks</tt> configure
284 option which enables STL checking, and fixed several bugs exposed by
285 it.</li>
Chris Lattnerb0d6c502007-09-21 03:54:09 +0000286</ul>
287
288</div>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000289
290<!-- *********************************************************************** -->
291<div class="doc_section">
292 <a name="portability">Portability and Supported Platforms</a>
293</div>
294<!-- *********************************************************************** -->
295
296<div class="doc_text">
297
298<p>LLVM is known to work on the following platforms:</p>
299
300<ul>
301<li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD
302 (and probably other unix-like systems).</li>
303<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
304 64-bit modes.</li>
305<li>Intel and AMD machines running on Win32 using MinGW libraries (native)</li>
306<li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
307 support is available for native builds with Visual C++).</li>
308<li>Sun UltraSPARC workstations running Solaris 8.</li>
309<li>Alpha-based machines running Debian GNU/Linux.</li>
310<li>Itanium-based machines running Linux and HP-UX.</li>
311</ul>
312
313<p>The core LLVM infrastructure uses
314<a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
315to the machine and operating system on which it is built. However, minor
316porting may be required to get LLVM to work on new platforms. We welcome your
317portability patches and reports of successful builds or error messages.</p>
318
319</div>
320
321<!-- *********************************************************************** -->
322<div class="doc_section">
323 <a name="knownproblems">Known Problems</a>
324</div>
325<!-- *********************************************************************** -->
326
327<div class="doc_text">
328
329<p>This section contains all known problems with the LLVM system, listed by
330component. As new problems are discovered, they will be added to these
331sections. If you run into a problem, please check the <a
332href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
333there isn't already one.</p>
334
335</div>
336
337<!-- ======================================================================= -->
338<div class="doc_subsection">
339 <a name="experimental">Experimental features included with this release</a>
340</div>
341
342<div class="doc_text">
343
344<p>The following components of this LLVM release are either untested, known to
345be broken or unreliable, or are in early development. These components should
346not be relied on, and bugs should not be filed against them, but they may be
347useful to some people. In particular, if you would like to work on one of these
348components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
349
350<ul>
Bill Wendlingc3aa3502007-09-25 20:45:10 +0000351<li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in a
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000352 future release.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000353<li>The MSIL backend is experimental.</li>
354<li>The IA64 code generator is experimental.</li>
Chris Lattnere0194462007-09-26 06:01:35 +0000355<li>The Alpha backend is experimental.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000356<li>"<tt>-filetype=asm</tt>" (the default) is the only supported value for the
357 <tt>-filetype</tt> llc option.</li>
358</ul>
359
360</div>
361
362<!-- ======================================================================= -->
363<div class="doc_subsection">
364 <a name="x86-be">Known problems with the X86 back-end</a>
365</div>
366
367<div class="doc_text">
368
369<ul>
370<li>The X86 backend does not yet support <a href="http://llvm.org/PR879">inline
371 assembly that uses the X86 floating point stack</a>.</li>
Chris Lattnere0194462007-09-26 06:01:35 +0000372<li>The X86 backend occasionally has <a href="http://llvm.org/PR1649">alignment
373 problems</a> on operating systems that don't require 16-byte stack alignment
374 (including most non-darwin OS's like linux).</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000375</ul>
376
377</div>
378
379<!-- ======================================================================= -->
380<div class="doc_subsection">
381 <a name="ppc-be">Known problems with the PowerPC back-end</a>
382</div>
383
384<div class="doc_text">
385
386<ul>
387<li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
388implement ordered FP comparisons</a>.</li>
389<li>The Linux PPC32/ABI support needs testing for the interpreter and static
390compilation, and lacks support for debug information.</li>
391</ul>
392
393</div>
394
395<!-- ======================================================================= -->
396<div class="doc_subsection">
397 <a name="arm-be">Known problems with the ARM back-end</a>
398</div>
399
400<div class="doc_text">
401
402<ul>
403<li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
Duncan Sands1827fa62007-09-26 15:59:54 +0000404processors, thumb programs can crash or produce wrong
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000405results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
406<li>Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested.
407</li>
408<li>There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute
409programs compiled with LLVM. Please use more recent versions of QEMU.</li>
410</ul>
411
412</div>
413
414<!-- ======================================================================= -->
415<div class="doc_subsection">
416 <a name="sparc-be">Known problems with the SPARC back-end</a>
417</div>
418
419<div class="doc_text">
420
421<ul>
422<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
423 support the 64-bit SPARC ABI (-m64).</li>
424</ul>
425
426</div>
427
428<!-- ======================================================================= -->
429<div class="doc_subsection">
430 <a name="alpha-be">Known problems with the Alpha back-end</a>
431</div>
432
433<div class="doc_text">
434
435<ul>
436
437<li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
438appropriate nops inserted to ensure restartability.</li>
439
440</ul>
441</div>
442
443<!-- ======================================================================= -->
444<div class="doc_subsection">
445 <a name="ia64-be">Known problems with the IA64 back-end</a>
446</div>
447
448<div class="doc_text">
449
450<ul>
451
452<li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
453made where the argument is not 16-byte aligned, as required on IA64. (Strictly
454speaking this is not a bug in the IA64 back-end; it will also be encountered
455when building C++ programs using the C back-end.)</li>
456
457<li>The C++ front-end does not use <a href="http://llvm.org/PR406">IA64
458ABI compliant layout of v-tables</a>. In particular, it just stores function
459pointers instead of function descriptors in the vtable. This bug prevents
460mixing C++ code compiled with LLVM with C++ objects compiled by other C++
461compilers.</li>
462
463<li>There are a few ABI violations which will lead to problems when mixing LLVM
464output with code built with other compilers, particularly for floating-point
465programs.</li>
466
467<li>Defining vararg functions is not supported (but calling them is ok).</li>
468
469<li>The Itanium backend has bitrotted somewhat.</li>
470</ul>
471
472</div>
473
474<!-- ======================================================================= -->
475<div class="doc_subsection">
476 <a name="c-be">Known problems with the C back-end</a>
477</div>
478
479<div class="doc_text">
480
481<ul>
482<li><a href="http://llvm.org/PR802">The C backend does not support inline
483 assembly code</a>.</li>
Chris Lattnere0194462007-09-26 06:01:35 +0000484<li><a href="http://llvm.org/PR1126">The C backend does not support vectors
485 yet</a>.</li>
Chris Lattnere0194462007-09-26 06:01:35 +0000486<li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common
487 C++ programs</a>, preventing intermixing between C++ compiled by the CBE and
488 C++ code compiled with LLC or native compilers.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000489</ul>
490
491</div>
492
493
494<!-- ======================================================================= -->
495<div class="doc_subsection">
496 <a name="c-fe">Known problems with the C front-end</a>
497</div>
498
499<!-- _______________________________________________________________________ -->
500<div class="doc_subsubsection">Bugs</div>
501
502<div class="doc_text">
503
504<p>llvm-gcc4 does not currently support <a href="http://llvm.org/PR869">Link-Time
505Optimization</a> on most platforms "out-of-the-box". Please inquire on the
506llvmdev mailing list if you are interested.</p>
507
508</div>
509
510<!-- _______________________________________________________________________ -->
511<div class="doc_subsubsection">
512 Notes
513</div>
514
515<div class="doc_text">
516<ul>
517
518<li><p>"long double" is silently transformed by the front-end into "double". There
519is no support for floating point data types of any size other than 32 and 64
520bits.</p></li>
521
522<li><p>llvm-gcc does <b>not</b> support <tt>__builtin_apply</tt> yet.
523 See <a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</p>
524</li>
525
526<li><p>llvm-gcc <b>partially</b> supports these GCC extensions:</p>
527 <ol>
Duncan Sands1827fa62007-09-26 15:59:54 +0000528 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>:
529
530 As in Algol and Pascal, lexical scoping of functions.
531 Nested functions are supported, but llvm-gcc does not support
532 taking the address of a nested function (except on the X86 target)
533 or non-local gotos.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000534
535 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
536
537 Declaring that functions have no side effects or that they can never
538 return.<br>
539
540 <b>Supported:</b> <tt>alias</tt>, <tt>always_inline</tt>, <tt>cdecl</tt>,
541 <tt>constructor</tt>, <tt>destructor</tt>,
542 <tt>deprecated</tt>, <tt>fastcall</tt>, <tt>format</tt>,
Chris Lattner519219c2007-09-26 06:04:15 +0000543 <tt>format_arg</tt>, <tt>non_null</tt>, <tt>noinline</tt>, <tt>noreturn</tt>, <tt>regparm</tt>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000544 <tt>section</tt>, <tt>stdcall</tt>, <tt>unused</tt>, <tt>used</tt>,
545 <tt>visibility</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
546
Chris Lattner519219c2007-09-26 06:04:15 +0000547 <b>Ignored:</b> <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000548 <tt>malloc</tt>, <tt>no_instrument_function</tt></li>
549 </ol>
550</li>
551
552<li><p>llvm-gcc supports the vast majority of GCC extensions, including:</p>
553
554 <ol>
555 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
556 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
557 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
558 Other built-in functions.</li>
559 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
560 Specifying attributes of variables.</li>
561 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>: Specifying attributes of types.</li>
562 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
563 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
564 Arrays whose length is computed at run time.</li>
565 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li>
566 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>: Putting statements and declarations inside expressions.</li>
567 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof">Typeof</a>: <code>typeof</code>: referring to the type of an expression.</li>
568 <li><a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
569 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
570 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
571 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>: Data types for complex numbers.</li>
572 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
573 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
574 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
575 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic%20Macros">Variadic Macros</a>: Macros with a variable number of arguments.</li>
576 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>: Slightly looser rules for escaped newlines.</li>
577 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
578 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
579 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
580 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
581 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
582 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>: Built-in functions specific to particular targets.</li>
583 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
584 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
585 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
586 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
587or arrays as values.</li>
588 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
589 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Cast-to-Union.html#Cast%20to%20Union">Cast to Union</a>: Casting to union type from any member of the union.</li>
590 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
591 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
592 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
593 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Comments.html#C_002b_002b-Comments">C++ Comments</a>: C++ comments are recognized.</li>
594 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
595 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Character-Escapes.html#Character%20Escapes">Character Escapes</a>: <code>\e</code> stands for the character &lt;ESC&gt;.</li>
596 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
597 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
598 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html#Alternate%20Keywords">Alternate Keywords</a>:<code>__const__</code>, <code>__asm__</code>, etc., for header files.</li>
599 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html#Incomplete%20Enums">Incomplete Enums</a>: <code>enum foo;</code>, with details to follow.</li>
600 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html#Function%20Names">Function Names</a>: Printable strings which are the name of the current function.</li>
601 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html#Return%20Address">Return Address</a>: Getting the return or frame address of a function.</li>
602 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed%20Fields">Unnamed Fields</a>: Unnamed struct/union fields within structs/unions.</li>
603 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
604 </ol></li>
605
606</ul>
607
608<p>If you run into GCC extensions which have not been included in any of these
609lists, please let us know (also including whether or not they work).</p>
610
611</div>
612
613<!-- ======================================================================= -->
614<div class="doc_subsection">
615 <a name="c++-fe">Known problems with the C++ front-end</a>
616</div>
617
618<div class="doc_text">
619
620<p>The C++ front-end is considered to be fully
621tested and works for a number of non-trivial programs, including LLVM
622itself, Qt, Mozilla, etc.</p>
623
624<ul>
Duncan Sands1827fa62007-09-26 15:59:54 +0000625<li>Exception handling only works well on the linux/x86-32 target.
626In some cases, illegally throwing an exception does not result
627in a call to terminate.</li>
Dan Gohmanf17a25c2007-07-18 16:29:46 +0000628
629<!-- NO EH Support!
630
631<li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
632 performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
633 function and in the <tt>setjmp</tt> receiver function may not be run.
634 Objects in intervening stack frames will be destroyed, however (which is
635 better than most compilers).</li>
636
637<li>The LLVM C++ front-end follows the <a
638 href="http://www.codesourcery.com/cxx-abi">Itanium C++ ABI</a>.
639 This document, which is not Itanium specific, specifies a standard for name
640 mangling, class layout, v-table layout, RTTI formats, and other C++
641 representation issues. Because we use this API, code generated by the LLVM
642 compilers should be binary compatible with machine code generated by other
643 Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
644 <i>However</i>, the exception handling mechanism used by llvm-gcc3 is very
645 different from the model used in the Itanium ABI, so <b>exceptions will not
646 interact correctly</b>. </li>
647-->
648</ul>
649
650</div>
651
652
653
654<!-- *********************************************************************** -->
655<div class="doc_section">
656 <a name="additionalinfo">Additional Information</a>
657</div>
658<!-- *********************************************************************** -->
659
660<div class="doc_text">
661
662<p>A wide variety of additional information is available on the <a
663href="http://llvm.org">LLVM web page</a>, in particular in the <a
664href="http://llvm.org/docs/">documentation</a> section. The web page also
665contains versions of the API documentation which is up-to-date with the
666Subversion version of the source code.
667You can access versions of these documents specific to this release by going
668into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
669
670<p>If you have any questions or comments about LLVM, please feel free to contact
671us via the <a href="http://llvm.org/docs/#maillist"> mailing
672lists</a>.</p>
673
674</div>
675
676<!-- *********************************************************************** -->
677
678<hr>
679<address>
680 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
681 src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
682 <a href="http://validator.w3.org/check/referer"><img
683 src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
684
685 <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
686 Last modified: $Date$
687</address>
688
689</body>
690</html>