Add a natural stack alignment field to TargetData, and prevent InstCombine from
[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 3.0 Release Notes</title>
8 </head>
9 <body>
10
11 <h1>LLVM 3.0 Release Notes</h1>
12
13 <img align=right src="http://llvm.org/img/DragonSmall.png"
14     width="136" height="136" alt="LLVM Dragon Logo">
15
16 <ol>
17   <li><a href="#intro">Introduction</a></li>
18   <li><a href="#subproj">Sub-project Status Update</a></li>
19   <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>
21   <li><a href="GettingStarted.html">Installation Instructions</a></li>
22   <li><a href="#knownproblems">Known Problems</a></li>
23   <li><a href="#additionalinfo">Additional Information</a></li>
24 </ol>
25
26 <div class="doc_author">
27   <p>Written by the <a href="http://llvm.org/">LLVM Team</a></p>
28 </div>
29
30 <!--
31 <h1 style="color:red">These are in-progress notes for the upcoming LLVM 3.0
32 release.<br>
33 You may prefer the
34 <a href="http://llvm.org/releases/2.9/docs/ReleaseNotes.html">LLVM 2.9
35 Release Notes</a>.</h1>
36  -->
37
38 <!-- *********************************************************************** -->
39 <h2>
40   <a name="intro">Introduction</a>
41 </h2>
42 <!-- *********************************************************************** -->
43
44 <div>
45
46 <p>This document contains the release notes for the LLVM Compiler
47 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 the <a
50 href="http://llvm.org/releases/">LLVM releases web site</a>.</p>
51
52 <p>For more information about LLVM, including information about the latest
53 release, please check out the <a href="http://llvm.org/">main LLVM
54 web site</a>.  If you have questions or comments, the <a
55 href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM Developer's
56 Mailing List</a> is a good place to send them.</p>
57
58 <p>Note that if you are reading this file from a Subversion checkout or the
59 main 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>
62
63 </div>
64    
65 <!-- Features that need text if they're finished for 3.1:
66   ARM EHABI
67   combiner-aa?
68   strong phi elim
69   loop dependence analysis
70   CorrelatedValuePropagation
71   lib/Transforms/IPO/MergeFunctions.cpp => consider for 3.1.
72  -->
73  
74 <!-- *********************************************************************** -->
75 <h2>
76   <a name="subproj">Sub-project Status Update</a>
77 </h2>
78 <!-- *********************************************************************** -->
79
80 <div>
81 <p>
82 The LLVM 3.0 distribution currently consists of code from the core LLVM
83 repository (which roughly includes the LLVM optimizers, code generators
84 and 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 in
86 development.  Here we include updates on these subprojects.
87 </p>
88
89 <!--=========================================================================-->
90 <h3>
91 <a name="clang">Clang: C/C++/Objective-C Frontend Toolkit</a>
92 </h3>
93
94 <div>
95
96 <p><a href="http://clang.llvm.org/">Clang</a> is an LLVM front end for the C,
97 C++, and Objective-C languages. Clang aims to provide a better user experience
98 through expressive diagnostics, a high level of conformance to language
99 standards, fast compilation, and low memory use. Like LLVM, Clang provides a
100 modular, library-based architecture that makes it suitable for creating or
101 integrating with other development tools. Clang is considered a
102 production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
103 (32- and 64-bit), and for darwin/arm targets.</p>
104
105 <p>In the LLVM 3.0 time-frame, the Clang team has made many improvements:</p>
106   
107 <p>If Clang rejects your code but another compiler accepts it, please take a
108 look at the <a href="http://clang.llvm.org/compatibility.html">language
109 compatibility</a> guide to make sure this is not intentional or a known issue.
110 </p>
111
112 </div>
113
114 <!--=========================================================================-->
115 <h3>
116 <a name="dragonegg">DragonEgg: GCC front-ends, LLVM back-end</a>
117 </h3>
118
119 <div>
120 <p>
121 <a href="http://dragonegg.llvm.org/">DragonEgg</a> is a
122 <a href="http://gcc.gnu.org/wiki/plugins">gcc plugin</a> that replaces GCC's
123 optimizers and code generators with LLVM's.
124 Currently it requires a patched version of gcc-4.5.
125 The plugin can target the x86-32 and x86-64 processor families and has been
126 used successfully on the Darwin, FreeBSD and Linux platforms.
127 The Ada, C, C++ and Fortran languages work well.
128 The plugin is capable of compiling plenty of Obj-C, Obj-C++ and Java but it is
129 not known whether the compiled code actually works or not!
130 </p>
131
132 <p>
133 The 3.0 release has the following notable changes:
134 <ul>
135 <!--
136 <li></li>
137 -->
138 </ul>
139
140 </div>
141
142 <!--=========================================================================-->
143 <h3>
144 <a name="compiler-rt">compiler-rt: Compiler Runtime Library</a>
145 </h3>
146
147 <div>
148 <p>
149 The new LLVM <a href="http://compiler-rt.llvm.org/">compiler-rt project</a>
150 is a simple library that provides an implementation of the low-level
151 target-specific hooks required by code generation and other runtime components.
152 For example, when compiling for a 32-bit target, converting a double to a 64-bit
153 unsigned integer is compiled into a runtime call to the "__fixunsdfdi"
154 function. The compiler-rt library provides highly optimized implementations of
155 this and other low-level routines (some are 3x faster than the equivalent
156 libgcc routines).</p>
157
158 <p>In the LLVM 3.0 timeframe,</p>
159
160 </div>
161
162 <!--=========================================================================-->
163 <h3>
164 <a name="lldb">LLDB: Low Level Debugger</a>
165 </h3>
166
167 <div>
168 <p>
169 <a href="http://lldb.llvm.org/">LLDB</a> is a brand new member of the LLVM
170 umbrella of projects. LLDB is a next generation, high-performance debugger. It
171 is built as a set of reusable components which highly leverage existing
172 libraries in the larger LLVM Project, such as the Clang expression parser, the
173 LLVM disassembler and the LLVM JIT.</p>
174
175 <p>
176 LLDB is has advanced by leaps and bounds in the 3.0 timeframe.  It is
177 dramatically more stable and useful, and includes both a new <a 
178 href="http://lldb.llvm.org/tutorial.html">tutorial</a> and a <a
179 href="http://lldb.llvm.org/lldb-gdb.html">side-by-side comparison with 
180 GDB</a>.</p>
181
182 </div>
183
184 <!--=========================================================================-->
185 <h3>
186 <a name="libc++">libc++: C++ Standard Library</a>
187 </h3>
188
189 <div>
190 <p>
191 <a href="http://libcxx.llvm.org/">libc++</a> is another new member of the LLVM
192 family.  It is an implementation of the C++ standard library, written from the
193 ground up to specifically target the forthcoming C++'0X standard and focus on
194 delivering great performance.</p>
195
196 <p>
197 In the LLVM 3.0 timeframe,</p>
198   
199 <p>
200 Like compiler_rt, libc++ is now <a href="DeveloperPolicy.html#license">dual
201   licensed</a> under the MIT and UIUC license, allowing it to be used more
202   permissively.
203 </p>
204
205 </div>
206
207
208 <!--=========================================================================-->
209 <h3>
210 <a name="LLBrowse">LLBrowse: IR Browser</a>
211 </h3>
212
213 <div>
214 <p>
215 <a href="http://llvm.org/svn/llvm-project/llbrowse/trunk/doc/LLBrowse.html">
216   LLBrowse</a> is an interactive viewer for LLVM modules. It can load any LLVM
217   module and displays its contents as an expandable tree view, facilitating an
218   easy way to inspect types, functions, global variables, or metadata nodes. It
219   is fully cross-platform, being based on the popular wxWidgets GUI toolkit.
220 </p>
221 </div>
222
223 <!--=========================================================================-->
224 <h3>
225 <a name="vmkit">VMKit</a>
226 </h3>
227
228 <div>
229 <p>The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation
230   of a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and
231   just-in-time compilation. As of LLVM 3.0, VMKit now supports generational
232   garbage collectors. The garbage collectors are provided by the MMTk framework,
233   and VMKit can be configured to use one of the numerous implemented collectors
234   of MMTk.
235 </p>
236 </div>
237   
238   
239 <!--=========================================================================-->
240 <!--
241 <h3>
242 <a name="klee">KLEE: A Symbolic Execution Virtual Machine</a>
243 </h3>
244
245 <div>
246 <p>
247 <a href="http://klee.llvm.org/">KLEE</a> is a symbolic execution framework for
248 programs in LLVM bitcode form. KLEE tries to symbolically evaluate "all" paths
249 through the application and records state transitions that lead to fault
250 states. This allows it to construct testcases that lead to faults and can even
251 be used to verify some algorithms.
252 </p>
253
254 <p>UPDATE!</p>
255 </div>-->
256
257 </div>
258
259 <!-- *********************************************************************** -->
260 <h2>
261   <a name="externalproj">External Open Source Projects Using LLVM 3.0</a>
262 </h2>
263 <!-- *********************************************************************** -->
264
265 <div>
266
267 <p>An exciting aspect of LLVM is that it is used as an enabling technology for
268    a lot of other language and tools projects.  This section lists some of the
269    projects that have already been updated to work with LLVM 3.0.</p>
270
271 <!--=========================================================================-->
272 <h3>Crack Programming Language</h3>
273
274 <div>
275 <p>
276 <a href="http://code.google.com/p/crack-language/">Crack</a> aims to provide the
277 ease of development of a scripting language with the performance of a compiled
278 language. The language derives concepts from C++, Java and Python, incorporating
279 object-oriented programming, operator overloading and strong typing.</p>
280 </div>
281   
282   
283 <!--=========================================================================-->
284 <h3>TTA-based Codesign Environment (TCE)</h3>
285   
286 <div>
287 <p>TCE is a toolset for designing application-specific processors (ASP) based on
288 the Transport triggered architecture (TTA). The toolset provides a complete
289 co-design flow from C/C++ programs down to synthesizable VHDL and parallel
290 program binaries. Processor customization points include the register files,
291 function units, supported operations, and the interconnection network.</p>
292   
293 <p>TCE uses Clang and LLVM for C/C++ language support, target independent
294 optimizations and also for parts of code generation. It generates new LLVM-based
295 code generators "on the fly" for the designed TTA processors and loads them in
296 to the compiler backend as runtime libraries to avoid per-target recompilation
297 of larger parts of the compiler chain.</p>
298 </div>
299
300
301   
302 <!--=========================================================================-->
303 <h3>PinaVM</h3>
304   
305 <div>
306 <p><a href="http://gitorious.org/pinavm/pages/Home">PinaVM</a> is an open
307 source, <a href="http://www.systemc.org/">SystemC</a> front-end. Unlike many
308 other front-ends, PinaVM actually executes the elaboration of the
309 program analyzed using LLVM's JIT infrastructure. It later enriches the
310 bitcode with SystemC-specific information.</p>
311 </div>
312
313 <!--=========================================================================-->
314 <h3>Pure</h3>
315   
316 <div>
317 <p><a href="http://pure-lang.googlecode.com/">Pure</a> is an
318   algebraic/functional
319   programming language based on term rewriting. Programs are collections
320   of equations which are used to evaluate expressions in a symbolic
321   fashion. The interpreter uses LLVM as a backend to JIT-compile Pure
322   programs to fast native code. Pure offers dynamic typing, eager and lazy
323   evaluation, lexical closures, a hygienic macro system (also based on
324   term rewriting), built-in list and matrix support (including list and
325   matrix comprehensions) and an easy-to-use interface to C and other
326   programming languages (including the ability to load LLVM bitcode
327   modules, and inline C, C++, Fortran and Faust code in Pure programs if
328   the corresponding LLVM-enabled compilers are installed).</p>
329   
330 <p>Pure version 0.47 has been tested and is known to work with LLVM 3.0
331   (and continues to work with older LLVM releases &gt;= 2.5).</p>
332 </div>
333
334 <!--=========================================================================-->
335 <h3 id="icedtea">IcedTea Java Virtual Machine Implementation</h3>
336
337 <div>
338 <p>
339 <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea</a> provides a
340 harness to build OpenJDK using only free software build tools and to provide
341 replacements for the not-yet free parts of OpenJDK.  One of the extensions that
342 IcedTea provides is a new JIT compiler named <a
343 href="http://icedtea.classpath.org/wiki/ZeroSharkFaq">Shark</a> which uses LLVM
344 to provide native code generation without introducing processor-dependent
345 code.
346 </p>
347
348 <p> OpenJDK 7 b112, IcedTea6 1.9 and IcedTea7 1.13 and later have been tested
349 and are known to work with LLVM 3.0 (and continue to work with older LLVM
350 releases &gt;= 2.6 as well).</p>
351 </div>
352
353 <!--=========================================================================-->
354 <h3>Glasgow Haskell Compiler (GHC)</h3>
355   
356 <div>
357 <p>GHC is an open source, state-of-the-art programming suite for Haskell,
358 a standard lazy functional programming language. It includes an
359 optimizing static compiler generating good code for a variety of
360 platforms, together with an interactive system for convenient, quick
361 development.</p>
362
363 <p>In addition to the existing C and native code generators, GHC 7.0 now
364 supports an LLVM code generator. GHC supports LLVM 2.7 and later.</p>
365 </div>
366
367 <!--=========================================================================-->
368 <h3>Polly - Polyhedral optimizations for LLVM</h3>
369   
370 <div>
371 <p>Polly is a project that aims to provide advanced memory access optimizations
372 to better take advantage of SIMD units, cache hierarchies, multiple cores or
373 even vector accelerators for LLVM. Built around an abstract mathematical
374 description based on Z-polyhedra, it provides the infrastructure to develop
375 advanced optimizations in LLVM and to connect complex external optimizers. In
376 its first year of existence Polly already provides an exact value-based
377 dependency analysis as well as basic SIMD and OpenMP code generation support.
378 Furthermore, Polly can use PoCC(Pluto) an advanced optimizer for data-locality
379 and parallelism.</p>
380 </div>
381
382 <!--=========================================================================-->
383 <h3>Rubinius</h3>
384
385 <div>
386   <p><a href="http://github.com/evanphx/rubinius">Rubinius</a> is an environment
387   for running Ruby code which strives to write as much of the implementation in
388   Ruby as possible. Combined with a bytecode interpreting VM, it uses LLVM to
389   optimize and compile ruby code down to machine code. Techniques such as type
390   feedback, method inlining, and deoptimization are all used to remove dynamism
391   from ruby execution and increase performance.</p>
392 </div>
393
394
395 <!--=========================================================================-->
396 <h3>
397 <a name="FAUST">FAUST Real-Time Audio Signal Processing Language</a>
398 </h3>
399
400 <div>
401 <p>
402 <a href="http://faust.grame.fr">FAUST</a> is a compiled language for real-time
403 audio signal processing. The name FAUST stands for Functional AUdio STream. Its
404 programming model combines two approaches: functional programming and block
405 diagram composition. In addition with the C, C++, JAVA output formats, the
406 Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7-3.0.</p>
407
408 </div>
409   
410 </div>
411
412 <!-- *********************************************************************** -->
413 <h2>
414   <a name="whatsnew">What's New in LLVM 3.0?</a>
415 </h2>
416 <!-- *********************************************************************** -->
417
418 <div>
419
420 <p>This release includes a huge number of bug fixes, performance tweaks and
421 minor improvements.  Some of the major improvements and new features are listed
422 in this section.
423 </p>
424
425 <!--=========================================================================-->
426 <h3>
427 <a name="majorfeatures">Major New Features</a>
428 </h3>
429
430 <div>
431
432 <p>LLVM 3.0 includes several major new capabilities:</p>
433
434 <ul>
435
436 <!--
437 <li></li>
438 -->
439   
440 </ul>
441   
442 </div>
443
444 <!--=========================================================================-->
445 <h3>
446 <a name="coreimprovements">LLVM IR and Core Improvements</a>
447 </h3>
448
449 <div>
450 <p>LLVM IR has several new features for better support of new targets and that
451 expose new optimization opportunities:</p>
452
453 <ul>
454 <!--
455 <li></li>
456 -->
457 </ul>
458
459 </div>
460
461 <!--=========================================================================-->
462 <h3>
463 <a name="optimizer">Optimizer Improvements</a>
464 </h3>
465
466 <div>
467
468 <p>In addition to a large array of minor performance tweaks and bug fixes, this
469 release includes a few major enhancements and additions to the optimizers:</p>
470
471 <ul>
472 <!--
473 <li></li>
474 -->
475 </li>
476   
477 </ul>
478
479 </div>
480
481 <!--=========================================================================-->
482 <h3>
483 <a name="mc">MC Level Improvements</a>
484 </h3>
485
486 <div>
487 <p>
488 The LLVM Machine Code (aka MC) subsystem was created to solve a number
489 of problems in the realm of assembly, disassembly, object file format handling,
490 and a number of other related areas that CPU instruction-set level tools work
491 in.</p>
492
493 <ul>
494 <!--
495 <li></li>
496 -->
497 </ul>
498
499 <p>For more information, please see the <a
500 href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the
501 LLVM MC Project Blog Post</a>.
502 </p>
503
504 </div>
505
506 <!--=========================================================================-->
507 <h3>
508 <a name="codegen">Target Independent Code Generator Improvements</a>
509 </h3>
510
511 <div>
512
513 <p>We have put a significant amount of work into the code generator
514 infrastructure, which allows us to implement more aggressive algorithms and make
515 it run faster:</p>
516
517 <ul>
518 <!--
519 <li></li>
520 -->
521 </ul>
522 </div>
523
524 <!--=========================================================================-->
525 <h3>
526 <a name="x86">X86-32 and X86-64 Target Improvements</a>
527 </h3>
528
529 <div>
530 <p>New features and major changes in the X86 target include:
531 </p>
532
533 <ul>
534 <li>The CRC32 intrinsics have been renamed.  The intrinsics were previously
535   @llvm.x86.sse42.crc32.[8|16|32] and @llvm.x86.sse42.crc64.[8|64].  They have
536   been renamed to @llvm.x86.sse42.crc32.32.[8|16|32] and 
537   @llvm.x86.sse42.crc32.64.[8|64].</li>
538
539 </ul>
540
541 </div>
542
543 <!--=========================================================================-->
544 <h3>
545 <a name="ARM">ARM Target Improvements</a>
546 </h3>
547
548 <div>
549 <p>New features of the ARM target include:
550 </p>
551
552 <ul>
553 <!--
554 <li></li>
555 -->
556 </ul>
557 </div>
558   
559 <!--=========================================================================-->
560 <h3>
561 <a name="OtherTS">Other Target Specific Improvements</a>
562 </h3>
563
564 <div>
565 <ul>
566 <!--
567 <li></li>
568 -->
569 </ul>
570 </div>
571
572 <!--=========================================================================-->
573 <h3>
574 <a name="changes">Major Changes and Removed Features</a>
575 </h3>
576
577 <div>
578
579 <p>If you're already an LLVM user or developer with out-of-tree changes based on
580    LLVM 2.9, this section lists some "gotchas" that you may run into upgrading
581    from the previous release.</p>
582
583 <ul>
584   <li>The <code>LLVMC</code> front end code was removed while separating
585       out language independence.</li>
586   <li>The <code>LowerSetJmp</code> pass wasn't used effectively by any
587       target and has been removed.</li>
588   <li>The old <code>TailDup</code> pass was not used in the standard pipeline
589       and was unable to update ssa form, so it has been removed.
590   <li>The syntax of volatile loads and stores in IR has been changed to
591       "<code>load volatile</code>"/"<code>store volatile</code>".  The old
592       syntax ("<code>volatile load</code>"/"<code>volatile store</code>")
593       is still accepted, but is now considered deprecated.</li>
594 </ul>
595
596 <h4>Windows (32-bit)</h4>
597 <div>
598 <ul>
599   <li>On Win32(MinGW32 and MSVC), Windows 2000 will not be supported.
600       Windows XP or higher is required.</li>
601 </ul>
602 </div>
603
604 </div>
605
606 <!--=========================================================================-->
607 <h3>
608 <a name="api_changes">Internal API Changes</a>
609 </h3>
610
611 <div>
612
613 <p>In addition, many APIs have changed in this release.  Some of the major
614    LLVM API changes are:</p>
615
616 <ul>
617 <li>The biggest and most pervasive change is that llvm::Type's are no longer
618     returned or accepted as 'const' values.  Instead, just pass around non-const
619     Type's.</li>
620   
621 <li><code>PHINode::reserveOperandSpace</code> has been removed. Instead, you
622   must specify how many operands to reserve space for when you create the
623   PHINode, by passing an extra argument into <code>PHINode::Create</code>.</li>
624
625 <li>PHINodes no longer store their incoming BasicBlocks as operands. Instead,
626   the list of incoming BasicBlocks is stored separately, and can be accessed
627   with new functions <code>PHINode::block_begin</code>
628   and <code>PHINode::block_end</code>.</li>
629
630 <li>Various functions now take an <code>ArrayRef</code> instead of either a pair
631   of pointers (or iterators) to the beginning and end of a range, or a pointer
632   and a length. Others now return an <code>ArrayRef</code> instead of a
633   reference to a <code>SmallVector</code> or <code>std::vector</code>. These
634   include:
635 <ul>
636 <!-- Please keep this list sorted. -->
637 <li><code>CallInst::Create</code></li>
638 <li><code>ComputeLinearIndex</code> (in <code>llvm/CodeGen/Analysis.h</code>)</li>
639 <li><code>ConstantArray::get</code></li>
640 <li><code>ConstantExpr::getExtractElement</code></li>
641 <li><code>ConstantExpr::getGetElementPtr</code></li>
642 <li><code>ConstantExpr::getInBoundsGetElementPtr</code></li>
643 <li><code>ConstantExpr::getIndices</code></li>
644 <li><code>ConstantExpr::getInsertElement</code></li>
645 <li><code>ConstantExpr::getWithOperands</code></li>
646 <li><code>ConstantFoldCall</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li>
647 <li><code>ConstantFoldInstOperands</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li>
648 <li><code>ConstantVector::get</code></li>
649 <li><code>DIBuilder::createComplexVariable</code></li>
650 <li><code>DIBuilder::getOrCreateArray</code></li>
651 <li><code>ExtractValueInst::Create</code></li>
652 <li><code>ExtractValueInst::getIndexedType</code></li>
653 <li><code>ExtractValueInst::getIndices</code></li>
654 <li><code>FindInsertedValue</code> (in <code>llvm/Analysis/ValueTracking.h</code>)</li>
655 <li><code>gep_type_begin</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li>
656 <li><code>gep_type_end</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li>
657 <li><code>GetElementPtrInst::Create</code></li>
658 <li><code>GetElementPtrInst::CreateInBounds</code></li>
659 <li><code>GetElementPtrInst::getIndexedType</code></li>
660 <li><code>InsertValueInst::Create</code></li>
661 <li><code>InsertValueInst::getIndices</code></li>
662 <li><code>InvokeInst::Create</code></li>
663 <li><code>IRBuilder::CreateCall</code></li>
664 <li><code>IRBuilder::CreateExtractValue</code></li>
665 <li><code>IRBuilder::CreateGEP</code></li>
666 <li><code>IRBuilder::CreateInBoundsGEP</code></li>
667 <li><code>IRBuilder::CreateInsertValue</code></li>
668 <li><code>IRBuilder::CreateInvoke</code></li>
669 <li><code>MDNode::get</code></li>
670 <li><code>MDNode::getIfExists</code></li>
671 <li><code>MDNode::getTemporary</code></li>
672 <li><code>MDNode::getWhenValsUnresolved</code></li>
673 <li><code>SimplifyGEPInst</code> (in <code>llvm/Analysis/InstructionSimplify.h</code>)</li>
674 <li><code>TargetData::getIndexedOffset</code></li>
675 </ul></li>
676
677 <li>All forms of <code>StringMap::getOrCreateValue</code> have been remove
678   except for the one which takes a <code>StringRef</code>.</li>
679
680 <li>The <code>LLVMBuildUnwind</code> function from the C API was removed. The
681     LLVM <code>unwind</code> instruction has been deprecated for a long time and
682     isn't used by the current front-ends. So this was removed during the
683     exception handling rewrite.</li>
684
685 <li>The <code>LLVMAddLowerSetJmpPass</code> function from the C API was removed
686     because the <code>LowerSetJmp</code> pass was removed.</li>
687
688 <li>The <code>DIBuilder</code> interface used by front ends to encode debugging 
689     information in the LLVM IR now expects clients to use <code>DIBuilder::finalize()</code>
690     at the end of translation unit to complete debugging information encoding.</li>
691
692 <li>The way the type system works has been rewritten: <code>PATypeHolder</code>
693 and <code>OpaqueType</code> are gone, and all APIs deal with <code>Type*</code>
694 instead of <code>const Type*</code>.
695 If you need to create recursive structures, then create a named structure,
696 and use <code>setBody()</code> when all its elements are built.
697 Type merging and refining is gone too: named structures are not
698 merged with other structures, even if their layout is identical.
699 (of course anonymous structures are still uniqued by layout).
700 </li>
701
702 <li>TargetSelect.h moved to Support/ from Target/</li>
703
704 <li>UpgradeIntrinsicCall no longer upgrades pre-2.9 intrinsic calls
705 (for example <code>llvm.memset.i32</code>).</li>
706
707 <li>It is mandatory to initialize all out-of-tree passes too and their dependencies now with
708 <code>INITIALIZE_PASS{BEGIN,END,}</code> and <code>INITIALIZE_{PASS,AG}_DEPENDENCY</code>.</li>
709
710 </ul>
711 </div>
712
713 </div>
714
715 <!-- *********************************************************************** -->
716 <h2>
717   <a name="knownproblems">Known Problems</a>
718 </h2>
719 <!-- *********************************************************************** -->
720
721 <div>
722
723 <p>This section contains significant known problems with the LLVM system,
724 listed by component.  If you run into a problem, please check the <a
725 href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
726 there isn't already one.</p>
727
728 <!-- ======================================================================= -->
729 <h3>
730   <a name="experimental">Experimental features included with this release</a>
731 </h3>
732
733 <div>
734
735 <p>The following components of this LLVM release are either untested, known to
736 be broken or unreliable, or are in early development.  These components should
737 not be relied on, and bugs should not be filed against them, but they may be
738 useful to some people.  In particular, if you would like to work on one of these
739 components, please contact us on the <a
740 href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
741
742 <ul>
743 <li>The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ
744     and XCore backends are experimental.</li>
745 <li><tt>llc</tt> "<tt>-filetype=obj</tt>" is experimental on all targets
746     other than darwin and ELF X86 systems.</li>
747     
748 </ul>
749
750 </div>
751
752 <!-- ======================================================================= -->
753 <h3>
754   <a name="x86-be">Known problems with the X86 back-end</a>
755 </h3>
756
757 <div>
758
759 <ul>
760   <li>The X86 backend does not yet support
761     all <a href="http://llvm.org/PR879">inline assembly that uses the X86
762     floating point stack</a>.  It supports the 'f' and 't' constraints, but not
763     'u'.</li>
764   <li>The X86-64 backend does not yet support the LLVM IR instruction
765       <tt>va_arg</tt>. Currently, front-ends support variadic
766       argument constructs on X86-64 by lowering them manually.</li>
767   <li>Windows x64 (aka Win64) code generator has a few issues.
768     <ul>
769       <li>llvm-gcc cannot build the mingw-w64 runtime currently
770        due to lack of support for the 'u' inline assembly
771        constraint and for X87 floating point inline assembly.</li>
772       <li>On mingw-w64, you will see unresolved symbol <tt>__chkstk</tt>
773        due to <a href="http://llvm.org/bugs/show_bug.cgi?id=8919">Bug 8919</a>.
774        It is fixed in <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110321/118499.html">r128206</a>.</li>
775       <li>Miss-aligned MOVDQA might crash your program. It is due to
776        <a href="http://llvm.org/bugs/show_bug.cgi?id=9483">Bug 9483</a>,
777        lack of handling aligned internal globals.</li>
778       </ul>
779   </li>
780
781 </ul>
782
783 </div>
784
785 <!-- ======================================================================= -->
786 <h3>
787   <a name="ppc-be">Known problems with the PowerPC back-end</a>
788 </h3>
789
790 <div>
791
792 <ul>
793 <li>The Linux PPC32/ABI support needs testing for the interpreter and static
794 compilation, and lacks support for debug information.</li>
795 </ul>
796
797 </div>
798
799 <!-- ======================================================================= -->
800 <h3>
801   <a name="arm-be">Known problems with the ARM back-end</a>
802 </h3>
803
804 <div>
805
806 <ul>
807 <li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
808 processors, thumb programs can crash or produce wrong
809 results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
810 <li>Compilation for ARM Linux OABI (old ABI) is supported but not fully tested.
811 </li>
812 </ul>
813
814 </div>
815
816 <!-- ======================================================================= -->
817 <h3>
818   <a name="sparc-be">Known problems with the SPARC back-end</a>
819 </h3>
820
821 <div>
822
823 <ul>
824 <li>The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not
825     support the 64-bit SPARC ABI (-m64).</li>
826 </ul>
827
828 </div>
829
830 <!-- ======================================================================= -->
831 <h3>
832   <a name="mips-be">Known problems with the MIPS back-end</a>
833 </h3>
834
835 <div>
836
837 <ul>
838 <li>64-bit MIPS targets are not supported yet.</li>
839 </ul>
840
841 </div>
842
843 <!-- ======================================================================= -->
844 <h3>
845   <a name="alpha-be">Known problems with the Alpha back-end</a>
846 </h3>
847
848 <div>
849
850 <ul>
851
852 <li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
853 appropriate nops inserted to ensure restartability.</li>
854
855 </ul>
856 </div>
857
858 <!-- ======================================================================= -->
859 <h3>
860   <a name="c-be">Known problems with the C back-end</a>
861 </h3>
862
863 <div>
864
865 <p>The C backend has numerous problems and is not being actively maintained.
866 Depending on it for anything serious is not advised.</p>
867
868 <ul>
869 <li><a href="http://llvm.org/PR802">The C backend has only basic support for
870     inline assembly code</a>.</li>
871 <li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common
872     C++ programs</a>, preventing intermixing between C++ compiled by the CBE and
873     C++ code compiled with <tt>llc</tt> or native compilers.</li>
874 <li>The C backend does not support all exception handling constructs.</li>
875 <li>The C backend does not support arbitrary precision integers.</li>
876 </ul>
877
878 </div>
879
880
881 <!-- ======================================================================= -->
882 <h3>
883   <a name="llvm-gcc">Known problems with the llvm-gcc front-end</a>
884 </h3>
885
886 <div>
887
888 <p><b>LLVM 3.0 will be the last release of llvm-gcc.</b></p>
889
890 <p>llvm-gcc is generally very stable for the C family of languages.  The only
891    major language feature of GCC not supported by llvm-gcc is the
892    <tt>__builtin_apply</tt> family of builtins.   However, some extensions
893    are only supported on some targets.  For example, trampolines are only
894    supported on some targets (these are used when you take the address of a
895    nested function).</p>
896
897 <p>Fortran support generally works, but there are still several unresolved bugs
898    in <a href="http://llvm.org/bugs/">Bugzilla</a>.  Please see the
899    tools/gfortran component for details.  Note that llvm-gcc is missing major
900    Fortran performance work in the frontend and library that went into GCC after
901    4.2.  If you are interested in Fortran, we recommend that you consider using
902    <a href="#dragonegg">dragonegg</a> instead.</p>
903
904 <p>The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being
905 actively maintained.  If you are interested in Ada, we recommend that you
906 consider using <a href="#dragonegg">dragonegg</a> instead.</p>
907 </div>
908
909 </div>
910
911 <!-- *********************************************************************** -->
912 <h2>
913   <a name="additionalinfo">Additional Information</a>
914 </h2>
915 <!-- *********************************************************************** -->
916
917 <div>
918
919 <p>A wide variety of additional information is available on the <a
920 href="http://llvm.org/">LLVM web page</a>, in particular in the <a
921 href="http://llvm.org/docs/">documentation</a> section.  The web page also
922 contains versions of the API documentation which is up-to-date with the
923 Subversion version of the source code.
924 You can access versions of these documents specific to this release by going
925 into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
926
927 <p>If you have any questions or comments about LLVM, please feel free to contact
928 us via the <a href="http://llvm.org/docs/#maillist"> mailing
929 lists</a>.</p>
930
931 </div>
932
933 <!-- *********************************************************************** -->
934
935 <hr>
936 <address>
937   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
938   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
939   <a href="http://validator.w3.org/check/referer"><img
940   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
941
942   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
943   Last modified: $Date$
944 </address>
945
946 </body>
947 </html>