Document the subtarget features better, make sure that 64-bit mode, 64-bit
[oota-llvm.git] / docs / ReleaseNotes.html
1 <!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">
7   <title>LLVM 1.7 Release Notes</title>
8 </head>
9 <body>
10
11 <div class="doc_title">LLVM 1.7 Release Notes</div>
12  
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
35 infrastructure, release 1.7.  Here we describe the status of LLVM, including any
36 known problems and major improvements from the previous release.  The most
37 up-to-date version of this document can be found on the <a
38 href="http://llvm.org/releases/">LLVM releases web site</a>.  If you are
39 not reading this on the LLVM web pages, you should probably go there because
40 this document may be updated after the release.</p>
41
42 <p>For more information about LLVM, including information about the latest
43 release, please check out the <a href="http://llvm.org/">main LLVM
44 web site</a>.  If you have questions or comments, the <a
45 href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
46 list</a> is a good place to send them.</p>
47
48 <p>Note that if you are reading this file from CVS or the main LLVM web page,
49 this document applies to the <i>next</i> release, not the current one.  To see
50 the release notes for the current or previous releases, see the <a
51 href="http://llvm.org/releases/">releases page</a>.</p>
52
53 </div>
54
55 <!-- *********************************************************************** -->
56 <div class="doc_section">
57   <a name="whatsnew">What's New?</a>
58 </div>
59 <!-- *********************************************************************** -->
60
61 <div class="doc_text">
62
63 <p>This is the eighth public release of the LLVM Compiler Infrastructure. This
64 release incorporates a large number of enhancements and new features,
65 including vector support (Intel SSE and Altivec), a new GCC4.0-based
66 C/C++ front-end, Objective C/C++ support, inline assembly support, and many
67 other big features.
68 </p>
69
70 </div>
71
72 <!--=========================================================================-->
73 <div class="doc_subsection">
74 <a name="newfeatures">New Features in LLVM 1.7</a>
75 </div>
76
77 <!--_________________________________________________________________________-->
78 <div class="doc_subsubsection"><a name="llvmgcc4">GCC4.0-based llvm-gcc
79 front-end</a></div>
80
81 <div class="doc_text">
82
83 <p>LLVM 1.7 includes a brand new llvm-gcc, based on GCC 4.0.1.  This version
84 of llvm-gcc solves many serious long-standing problems with llvm-gcc, including
85 all of those blocked by the <a href="http://llvm.org/PR498">llvm-gcc 4 meta 
86 bug</a>.  In addition, llvm-gcc4 implements support for many new features, 
87 including GCC inline assembly, generic vector support, SSE and Altivec
88 intrinsics, and several new GCC attributes.  Finally, llvm-gcc4 is
89 significantly faster than llvm-gcc3, respects -O options, its -c/-S options
90 correspond to GCC's (they emit native code), supports Objective C/C++, and 
91 it has debugging support well underway.</p>
92
93 <p>If you can use it, llvm-gcc4 offers significant new functionality, and we
94 hope that it will replace llvm-gcc3 completely in a future release.  
95 Unfortunately, it does not currently support C++ exception handling at all, and
96 it only works on Apple Mac OS/X machines with X86 or PowerPC processors.
97 </p>
98
99 </div>
100
101 <!--_________________________________________________________________________-->
102 <div class="doc_subsubsection"><a name="inlineasm">Inline Assembly
103 Support</a></div>
104
105 <div class="doc_text">
106
107 <p>The LLVM IR and llvm-gcc4 front-end now fully support arbitrary GCC <a 
108 href="LangRef.html#inlineasm">inline assembly</a>.  The LLVM X86 and PowerPC
109 code generators have initial support for it,
110 being able to compile basic statements, but are missing some features.  Please
111 report any inline asm statements that crash the compiler or that are miscompiled
112 as bugs.</p>
113
114 </div>
115
116 <!--_________________________________________________________________________-->
117 <div class="doc_subsubsection"><a name="newsparc">New SPARC backend</a></div>
118
119 <div class="doc_text">
120
121 <p>LLVM 1.7 includes a new, fully functional, SPARC backend built in the
122 target-independent code generator.  This SPARC backend includes support for 
123 SPARC V8 and SPARC V9 subtargets (controlling whether V9 features can be used),
124 and targets the 32-bit SPARC ABI.</p>
125
126 <p>The LLVM 1.7 release is the last release that will include the LLVM "SparcV9"
127 backend, which was the very first LLVM native code generator.  It will
128 be removed in LLVM 1.8, being replaced with the new SPARC backend.</p>
129
130 </div>
131
132 <!--_________________________________________________________________________-->
133 <div class="doc_subsubsection"><a name="genvector">Generic Vector Support
134 </a></div>
135
136 <div class="doc_text">
137
138 <p>LLVM now includes significantly extended support for SIMD vectors in its
139 core instruction set.  It now includes three new instructions for manipulating
140 vectors: <a href="LangRef.html#i_extractelement"><tt>extractelement</tt></a>,
141 <a href="LangRef.html#i_insertelement"><tt>insertelement</tt></a>, and
142 <a href="LangRef.html#i_shufflevector"><tt>shufflevector</tt></a>.  Further,
143 many bugs in vector handling have been fixed, and vectors are now supported by
144 the target-independent code generator.  For example, if a vector operation is
145 not supported by a particular target, it will be correctly broken down and
146 executed as scalar operations.</p>
147
148 <p>Because llvm-gcc3 does not support GCC generic vectors or vector intrinsics,
149 llvm-gcc4 must be used.</p>
150 </div>
151
152
153 <!--_________________________________________________________________________-->
154 <div class="doc_subsubsection"><a name="ssealtivec">Intel SSE and PowerPC 
155 Altivec support
156 </a></div>
157
158 <div class="doc_text">
159
160 <p>The LLVM X86 backend now supports Intel SSE 1, 2, and 3, and now uses scalar
161 SSE operations to implement scalar floating point math when the target supports
162 SSE1 (for floats) or SSE2 (for doubles).  Vector SSE instructions are generated
163 by llvm-gcc4 when the generic vector mechanism or specific SSE intrinsics are 
164 used.
165 </p>
166
167 <p>The LLVM PowerPC backend now supports the Altivec instruction set, including
168 both GCC -maltivec and -faltivec modes.  Altivec instructions are generated
169 by llvm-gcc4 when the generic vector mechanism or specific Altivec intrinsics
170 are used.
171 </p>
172
173 </div>
174
175 <!--_________________________________________________________________________-->
176 <div class="doc_subsubsection"><a name="optimizernew">Optimizer 
177 Improvements</a></div>
178
179 <div class="doc_text">
180 <ul>
181 <li>The Loop Unswitching pass (<tt>-loop-unswitch</tt>) has had several bugs
182     fixed, has several new features, and is enabled by default in llvmgcc3
183     now.</li>
184 <li>The Loop Strength Reduction pass (<tt>-loop-reduce</tt>) is now enabled for
185     the X86 and Alpha backends.</li>
186 <li>The Instruction Combining pass (<tt>-instcombine</tt>) now includes a
187     framework and implementation for simplifying code based on whether computed
188     bits are demanded or not.</li>
189 <li>The Scalar Replacement of Aggregates pass (<tt>-scalarrepl</tt>) can now
190     promote simple unions to registers.</li>
191 <li>The Reassociation pass (<tt>-reassociate</tt>) can now
192     factor expressions, e.g. turning "A*A+A*B" into "A*(A+B)".</li>
193 <li>Several LLVM passes are <a href="http://llvm.org/PR681">significantly
194 faster</a>.</li>
195 </ul>
196 </div>
197
198 <!--_________________________________________________________________________-->
199 <div class="doc_subsubsection"><a name="codgennew">Code Generator 
200 Improvements</a></div>
201
202 <div class="doc_text">
203 <ul>
204 <li>LLVM has a new prepass (before register allocation) list scheduler, which
205     supports bottom-up and top-down scheduling, pluggable priority functions and
206     pluggable hazard recognizers.  The X86 backend uses this to reduce register
207     pressure and RISC targets schedule based on operation latency.</li>
208 <li>The tblgen-based target description framework introduced in LLVM 1.6 has
209     several new features, useful for targets that can fold loads and stores into
210     operations, and features that make the .td files more expressive.</li>
211 <li>The instruction selector is significantly faster in 1.7 than in 1.6.</li>
212 <li>The X86, Alpha and Itanium backends use new DAG-DAG instruction selectors,
213     making them easier to maintain and generate slightly better code.</li>
214 <li>The X86 backend now supports generation of Scalar SSE code for scalar FP
215     expressions.  LLVM provides significantly better performance with Scalar SSE
216     instructions than it does with the Intel floating point stack 
217     instructions.</li>
218 <li>The Itanium backend now has a bundling pass, which improves performance
219     by ~10% and reduces code size (previously it unconditionally inserted a stop
220     bit after every instruction).</li>
221 </ul>
222 </div>
223
224 <!--_________________________________________________________________________-->
225 <div class="doc_subsubsection"><a name="othernew">Other New Features</a></div>
226
227 <div class="doc_text">
228 <ul>
229 <li>The Mac OS/X PowerPC and X86 backends now have initial support for
230     Darwin DWARF
231     debugging information, however, debug info generation has been disabled for
232     the 1.7 release in llvmgcc4.</li>
233 <li>LLVM includes the new <a href="docs/CommandGuide/html/llvm-config.html">
234     llvm-config</a> utility, which makes it easier to build and link programs
235     against the LLVM libraries when not using the LLVM makefiles.</li>
236 <li>LLVM now supports first class global ctor/dtor initialization lists, no
237     longer forcing targets to use "__main".</li>
238 <li>LLVM supports assigning globals and functions to a particular section
239     in the result executable using the GCC section attribute.</li>
240 <li><a href="ExtendingLLVM.html">Adding intrinsics to LLVM</a> is now
241      significantly easier.</li>
242 <li>llvmgcc4 now fully supports C99 Variable Length Arrays, including dynamic
243     stack deallocation.</li>
244
245 </ul>
246 </div>
247
248
249 <!--=========================================================================-->
250 <div class="doc_subsection">
251 <a name="changes">Significant Changes in LLVM 1.7</a>
252 </div>
253
254 <div class="doc_text">
255 <ul>
256 <li>The official LLVM URL is now <a href="http://llvm.org/">
257     http://llvm.org/</a>.</li>
258 <li>The LLVM intrinsics used to be overloaded based on type: for example,
259     <a href="LangRef.html#int_ctpop"><tt>llvm.ctpop</tt></a> could work with any
260     integer datatype.  They are now separated into different intrinsics with
261     suffixes to denote their argument type (e.g. <tt>llvm.ctpop.i32</tt>)).  Old
262     LLVM .ll and .bc files that use these intrinsics will continue to work with
263     new LLVM versions (they are transparently upgraded by the parsers), but will
264     cause a warning to be emitted.</li>
265 <li>The <tt>llvm.readport</tt>, <tt>llvm.writeport</tt>, <tt>llvm.readio</tt>,
266     and <tt>llvm.writeio</tt> intrinsics have been removed.  The first two
267     were ever only supported by the X86 backend, the last two were never
268     correctly supported by any target, and none were accessible through the
269     C front-end.  Inline assembly support can now be used to
270     implement these operations.</li>
271 <li>The <tt>llvm-db</tt> tool had basic support for stepping through code, which
272     used the JIT.  This code has been removed, and DWARF emission support added
273     instead.  <tt>llvm-db</tt> still exists in CVS if someone wanted to write a
274     <tt>ptrace</tt> backend for it.</li>
275 </ul>
276 </div>
277
278
279 <!-- *********************************************************************** -->
280 <div class="doc_section">
281   <a name="portability">Portability and Supported Platforms</a>
282 </div>
283 <!-- *********************************************************************** -->
284
285 <div class="doc_text">
286
287 <p>LLVM is known to work on the following platforms:</p>
288
289 <ul>
290   <li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD 
291       (and probably other unix-like systems).</li>
292 <li>Sun UltraSPARC workstations running Solaris 8.</li>
293 <li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
294     support is available for native builds with Visual C++).</li>
295 <li>PowerPC and X86-based Mac OS X systems, running 10.2 and above.</li>
296 <li>Alpha-based machines running Debian GNU/Linux.</li>
297 <li>Itanium-based machines running Linux and HP-UX.</li>
298 </ul>
299
300 <p>The core LLVM infrastructure uses
301 <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
302 to the machine and operating system on which it is built.  However, minor
303 porting may be required to get LLVM to work on new platforms.  We welcome your
304 portability patches and reports of successful builds or error messages.</p>
305
306 </div>
307
308 <!-- *********************************************************************** -->
309 <div class="doc_section">
310   <a name="knownproblems">Known Problems</a>
311 </div>
312 <!-- *********************************************************************** -->
313
314 <div class="doc_text">
315
316 <p>This section contains all known problems with the LLVM system, listed by
317 component.  As new problems are discovered, they will be added to these
318 sections.  If you run into a problem, please check the <a
319 href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
320 there isn't already one.</p>
321
322 </div>
323
324 <!-- ======================================================================= -->
325 <div class="doc_subsection">
326   <a name="experimental">Experimental features included with this release</a>
327 </div>
328
329 <div class="doc_text">
330
331 <p>The following components of this LLVM release are either untested, known to
332 be broken or unreliable, or are in early development.  These components should
333 not be relied on, and bugs should not be filed against them, but they may be
334 useful to some people.  In particular, if you would like to work on one of these
335 components, please contact us on the llvmdev list.</p>
336
337 <ul>
338 <li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in in a 
339     future release.</li>
340 <li>The IA64 code generator is experimental.</li>
341 <li>The Alpha JIT is experimental.</li>
342 <li>"<tt>-filetype=asm</tt>" (the default) is the only supported value for the 
343     <tt>-filetype</tt> llc option.</li>
344 </ul>
345
346 </div>
347
348 <!-- ======================================================================= -->
349 <div class="doc_subsection">
350   <a name="build">Known problems with the Build System</a>
351 </div>
352
353 <div class="doc_text">
354
355 <ul>
356 <li>none yet</li>
357 </ul>
358 </div>
359
360
361 <!-- ======================================================================= -->
362 <div class="doc_subsection">
363   <a name="core">Known problems with the LLVM Core</a>
364 </div>
365
366 <div class="doc_text">
367
368 <ul>
369   <li>In the JIT, <tt>dlsym()</tt> on a symbol compiled by the JIT will not
370   work.</li>
371 </ul>
372 </div>
373
374 <!-- ======================================================================= -->
375 <div class="doc_subsection">
376   <a name="c-fe">Known problems with the C front-end</a>
377 </div>
378
379 <!-- _______________________________________________________________________ -->
380 <div class="doc_subsubsection">Bugs</div>
381
382 <div class="doc_text">
383
384 <p>
385 llvm-gcc3 has many significant problems that are fixed by llvm-gcc4.  See
386     those blocked on the <a href="http://llvm.org/PR498">llvm-gcc4 meta bug</a>.
387 Two major ones include:</p>
388
389 <ul>
390 <li>With llvm-gcc3, 
391     C99 variable sized arrays do not release stack memory when they go out of 
392     scope.  Thus, the following program may run out of stack space:
393 <pre>
394     for (i = 0; i != 1000000; ++i) {
395       int X[n];
396       foo(X);
397     }
398 </pre></li>
399
400 <li>With llvm-gcc3, Initialization of global union variables can only be done <a
401 href="http://llvm.org/PR162">with the largest union member</a>.</li>
402
403 </ul>
404 </div>
405
406 <!-- _______________________________________________________________________ -->
407 <div class="doc_subsubsection">
408   Notes
409 </div>
410
411 <div class="doc_text">
412
413 <ul>
414
415 <li>"long double" is transformed by the front-end into "double".  There is no
416 support for floating point data types of any size other than 32 and 64
417 bits.</li>
418     
419 <li>The following Unix system functionality has not been tested and may not
420 work:
421   <ol>
422   <li><tt>sigsetjmp</tt>, <tt>siglongjmp</tt> - These are not turned into the
423       appropriate <tt>invoke</tt>/<tt>unwind</tt> instructions.  Note that
424       <tt>setjmp</tt> and <tt>longjmp</tt> <em>are</em> compiled correctly.
425   <li><tt>getcontext</tt>, <tt>setcontext</tt>, <tt>makecontext</tt>
426       - These functions have not been tested.
427   </ol></li>
428
429 <li>Although many GCC extensions are supported, some are not.  In particular,
430     the following extensions are known to <b>not be</b> supported:
431   <ol>
432   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
433   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.</li>
434   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</li>
435   <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>
436   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
437   <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>
438   <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>
439   <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>
440   <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>
441   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
442   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
443   </ol>
444
445   <p>The following GCC extensions are <b>partially</b> supported.  An ignored
446   attribute means that the LLVM compiler ignores the presence of the attribute,
447   but the code should still work.  An unsupported attribute is one which is
448   ignored by the LLVM compiler and will cause a different interpretation of
449   the program.</p>
450
451   <ol>
452   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
453       Arrays whose length is computed at run time.<br>
454       Supported, but allocated stack space is not freed until the function returns (noted above).</li>
455
456   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
457
458       Declaring that functions have no side effects or that they can never
459       return.<br>
460
461       <b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
462       <tt>noreturn</tt>, <tt>constructor</tt>, <tt>destructor</tt>,
463       <tt>unused</tt>, <tt>used</tt>,
464       <tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
465
466       <b>Ignored:</b> <tt>noinline</tt>,
467       <tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
468       <tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
469
470       <b>Unsupported:</b> <tt>section</tt>, <tt>alias</tt>,
471       <tt>visibility</tt>, <tt>regparm</tt>, <tt>stdcall</tt>,
472       <tt>fastcall</tt>, all other target specific attributes</li>
473    
474   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
475       Specifying attributes of variables.<br>
476       <b>Supported:</b> <tt>cleanup</tt>, <tt>common</tt>, <tt>nocommon</tt>,
477                         <tt>deprecated</tt>, <tt>transparent_union</tt>,
478                         <tt>unused</tt>, <tt>used</tt>, <tt>weak</tt><br>
479
480       <b>Unsupported:</b> <tt>aligned</tt>, <tt>mode</tt>, <tt>packed</tt>,
481                         <tt>section</tt>, <tt>shared</tt>, <tt>tls_model</tt>,
482                         <tt>vector_size</tt>, <tt>dllimport</tt>, 
483                         <tt>dllexport</tt>, all target specific attributes.</li>
484
485   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>:   Specifying attributes of types.<br>
486       <b>Supported:</b> <tt>transparent_union</tt>, <tt>unused</tt>,
487                         <tt>deprecated</tt>, <tt>may_alias</tt><br>
488
489       <b>Unsupported:</b> <tt>aligned</tt>, <tt>packed</tt>, 
490                         all target specific attributes.</li>
491
492   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
493       Other built-in functions.<br>
494       We support all builtins which have a C language equivalent (e.g., 
495          <tt>__builtin_cos</tt>),  <tt>__builtin_alloca</tt>, 
496          <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
497          <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt>
498          (currently ignored).  We also support builtins for ISO C99 floating
499          point comparison macros (e.g., <tt>__builtin_islessequal</tt>), 
500          <tt>__builtin_prefetch</tt>, <tt>__builtin_popcount[ll]</tt>,
501          <tt>__builtin_clz[ll]</tt>, and <tt>__builtin_ctz[ll]</tt>.</li>
502   </ol>
503
504   <p>The following extensions <b>are</b> known to be supported:</p>
505
506   <ol>
507   <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>
508   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>:   Putting statements and declarations inside expressions.</li>
509   <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>
510   <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>
511   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
512   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
513   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>:   Data types for complex numbers.</li>
514   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
515   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
516   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
517   <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>
518   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>:  Slightly looser rules for escaped newlines.</li>
519   <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>
520   <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>
521   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
522   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
523 or arrays as values.</li>
524   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
525   <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>
526   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
527   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
528   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
529   <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>
530   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
531   <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>
532   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
533   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
534   <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>
535   <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>
536   <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>
537   <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>
538   <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>
539   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
540   </ol></li>
541
542 </ul>
543
544 <p>If you run into GCC extensions which have not been included in any of these
545 lists, please let us know (also including whether or not they work).</p>
546
547 </div>
548
549 <!-- ======================================================================= -->
550 <div class="doc_subsection">
551   <a name="c++-fe">Known problems with the C++ front-end</a>
552 </div>
553
554 <div class="doc_text">
555
556 <p>For this release, the C++ front-end is considered to be fully
557 tested and works for a number of non-trivial programs, including LLVM
558 itself.</p>
559
560 </div>
561
562 <!-- _______________________________________________________________________ -->
563 <div class="doc_subsubsection">Bugs</div>
564
565 <div class="doc_text">
566
567 <ul>
568 <li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
569     front-end</a>.</li>
570
571 </ul>
572
573 </div>
574
575 <!-- _______________________________________________________________________ -->
576 <div class="doc_subsubsection">
577   Notes
578 </div>
579
580 <div class="doc_text">
581
582 <ul>
583
584 <li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
585     performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
586     function and in the <tt>setjmp</tt> receiver function may not be run.
587     Objects in intervening stack frames will be destroyed, however (which is
588     better than most compilers).</li>
589
590 <li>The LLVM C++ front-end follows the <a
591     href="http://www.codesourcery.com/cxx-abi">Itanium C++ ABI</a>.
592     This document, which is not Itanium specific, specifies a standard for name
593     mangling, class layout, v-table layout, RTTI formats, and other C++
594     representation issues.  Because we use this API, code generated by the LLVM
595     compilers should be binary compatible with machine code generated by other
596     Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
597     <i>However</i>, the exception handling mechanism used by LLVM is very
598     different from the model used in the Itanium ABI, so <b>exceptions will not
599     interact correctly</b>. </li>
600
601 </ul>
602
603 </div>
604
605 <!-- ======================================================================= -->
606 <div class="doc_subsection">
607   <a name="c-be">Known problems with the C back-end</a>
608 </div>
609
610 <div class="doc_text">
611
612 <ul>
613
614 <li>The C back-end produces code that violates the ANSI C Type-Based Alias
615 Analysis rules.  As such, special options may be necessary to compile the code
616 (for example, GCC requires the <tt>-fno-strict-aliasing</tt> option).  This
617 problem probably cannot be fixed.</li>
618
619 <li><a href="http://llvm.org/PR56">Zero arg vararg functions are not 
620 supported</a>.  This should not affect LLVM produced by the C or C++ 
621 frontends.</li>
622
623 <li>The C backend does not correctly implement the <a 
624 href="LangRef.html#i_stacksave"><tt>llvm.stacksave</tt></a> or
625 <a href="LangRef.html#i_stackrestore"><tt>llvm.stackrestore</tt></a> 
626 intrinsics.  This means that some code compiled by it can run out of stack
627 space if they depend on these (e.g. C99 varargs).</li>
628
629 </ul>
630
631 </div>
632
633 <!-- ======================================================================= -->
634 <div class="doc_subsection">
635   <a name="x86-be">Known problems with the X86 back-end</a>
636 </div>
637
638 <div class="doc_text">
639
640 <ul>
641 <li><a href="http://llvm.org/PR736">Indirect calls crash JIT on 
642 Darwin/x86</a>.</li>
643 </ul>
644
645 </div>
646
647 <!-- ======================================================================= -->
648 <div class="doc_subsection">
649   <a name="ppc-be">Known problems with the PowerPC back-end</a>
650 </div>
651
652 <div class="doc_text">
653
654 <ul>
655 <li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
656 implement ordered FP comparisons</a>.</li>
657 </ul>
658
659 </div>
660
661 <!-- ======================================================================= -->
662 <div class="doc_subsection">
663   <a name="alpha-be">Known problems with the Alpha back-end</a>
664 </div>
665
666 <div class="doc_text">
667
668 <ul>
669
670 <li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
671 appropriate nops inserted to ensure restartability.</li>
672
673 </ul>
674
675 </div>
676
677 <!-- ======================================================================= -->
678 <div class="doc_subsection">
679   <a name="ia64-be">Known problems with the IA64 back-end</a>
680 </div>
681
682 <div class="doc_text">
683
684 <ul>
685
686 <li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
687 made where the argument is not 16-byte aligned, as required on IA64. (Strictly
688 speaking this is not a bug in the IA64 back-end; it will also be encountered
689 when building C++ programs using the C back-end.)</li>
690
691 <li>The C++ front-end does not use <a href="http://llvm.org/PR406">IA64
692 ABI compliant layout of v-tables</a>.  In particular, it just stores function
693 pointers instead of function descriptors in the vtable.  This bug prevents
694 mixing C++ code compiled with LLVM with C++ objects compiled by other C++
695 compilers.</li>
696
697 <li>There are a few ABI violations which will lead to problems when mixing LLVM
698 output with code built with other compilers, particularly for floating-point
699 programs.</li>
700
701 <li>Defining vararg functions is not supported (but calling them is ok).</li>
702
703 </ul>
704
705 </div>
706
707 <!-- ======================================================================= -->
708 <div class="doc_subsection">
709   <a name="sparc-be">Known problems with the SPARC back-end</a>
710 </div>
711
712 <div class="doc_text">
713
714 <ul>
715 <li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
716     support the 64-bit SPARC ABI (-m64).</li>
717 </ul>
718
719 </div>
720
721
722 <!-- ======================================================================= -->
723 <div class="doc_subsection">
724   <a name="sparcv9-be">Known problems with the SparcV9 back-end</a>
725 </div>
726
727 <div class="doc_text">
728
729 <ul>
730 <li><a href="http://llvm.org/PR60">[sparcv9] SparcV9 backend miscompiles
731 several programs in the LLVM test suite</a></li>
732 <li>The SparcV9 backend is slated to be removed before the LLVM 1.8 
733     release.</li>
734 </ul>
735
736 </div>
737
738 <!-- *********************************************************************** -->
739 <div class="doc_section">
740   <a name="additionalinfo">Additional Information</a>
741 </div>
742 <!-- *********************************************************************** -->
743
744 <div class="doc_text">
745
746 <p>A wide variety of additional information is available on the <a
747 href="http://llvm.org">LLVM web page</a>, including <a
748 href="http://llvm.org/docs/">documentation</a> and <a
749 href="http://llvm.org/pubs/">publications describing algorithms and
750 components implemented in LLVM</a>.  The web page also contains versions of the
751 API documentation which is up-to-date with the CVS version of the source code.
752 You can access versions of these documents specific to this release by going
753 into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
754
755 <p>If you have any questions or comments about LLVM, please feel free to contact
756 us via the <a href="http://llvm.org/docs/#maillist"> mailing
757 lists</a>.</p>
758
759 </div>
760
761 <!-- *********************************************************************** -->
762
763 <hr>
764 <address>
765   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
766   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
767   <a href="http://validator.w3.org/check/referer"><img
768   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
769
770   <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
771   Last modified: $Date$
772 </address>
773
774 </body>
775 </html>