Outline some clang 3.1 highlights off the top of my head.
[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="_static/llvm.css" type="text/css">
7   <title>LLVM 3.1 Release Notes</title>
8 </head>
9 <body>
10
11 <h1>LLVM 3.1 Release Notes</h1>
12
13 <div>
14 <img style="float:right" src="http://llvm.org/img/DragonSmall.png"
15      width="136" height="136" alt="LLVM Dragon Logo">
16 </div>
17
18 <ol>
19   <li><a href="#intro">Introduction</a></li>
20   <li><a href="#subproj">Sub-project Status Update</a></li>
21   <li><a href="#externalproj">External Projects Using LLVM 3.1</a></li>
22   <li><a href="#whatsnew">What's New in LLVM?</a></li>
23   <li><a href="GettingStarted.html">Installation Instructions</a></li>
24   <li><a href="#knownproblems">Known Problems</a></li>
25   <li><a href="#additionalinfo">Additional Information</a></li>
26 </ol>
27
28 <div class="doc_author">
29   <p>Written by the <a href="http://llvm.org/">LLVM Team</a></p>
30 </div>
31
32 <h1 style="color:red">These are in-progress notes for the upcoming LLVM 3.1
33 release.<br>
34 You may prefer the
35 <a href="http://llvm.org/releases/3.0/docs/ReleaseNotes.html">LLVM 3.0
36 Release Notes</a>.</h1>
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.1.  Here we describe the status of LLVM, including
48    major improvements from the previous release, improvements in various
49    subprojects of LLVM, and some of the current users of the code.
50    All LLVM releases may be downloaded from
51    the <a href="http://llvm.org/releases/">LLVM releases web site</a>.</p>
52
53 <p>For more information about LLVM, including information about the latest
54    release, please check out the <a href="http://llvm.org/">main LLVM web
55    site</a>.  If you have questions or comments,
56    the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM
57    Developer's Mailing List</a> is a good place to send them.</p>
58
59 <p>Note that if you are reading this file from a Subversion checkout or the main
60    LLVM web page, this document applies to the <i>next</i> release, not the
61    current one.  To see the release notes for a specific release, please see the
62    <a href="http://llvm.org/releases/">releases page</a>.</p>
63
64 </div>
65
66
67 <!-- *********************************************************************** -->
68 <h2>
69   <a name="subproj">Sub-project Status Update</a>
70 </h2>
71 <!-- *********************************************************************** -->
72
73 <div>
74
75 <p>The LLVM 3.1 distribution currently consists of code from the core LLVM
76    repository (which roughly includes the LLVM optimizers, code generators and
77    supporting tools), and the Clang repository.  In
78    addition to this code, the LLVM Project includes other sub-projects that are
79    in development.  Here we include updates on these subprojects.</p>
80
81 <!--=========================================================================-->
82 <h3>
83 <a name="clang">Clang: C/C++/Objective-C Frontend Toolkit</a>
84 </h3>
85
86 <div>
87
88 <p><a href="http://clang.llvm.org/">Clang</a> is an LLVM front end for the C,
89    C++, and Objective-C languages. Clang aims to provide a better user
90    experience through expressive diagnostics, a high level of conformance to
91    language standards, fast compilation, and low memory use. Like LLVM, Clang
92    provides a modular, library-based architecture that makes it suitable for
93    creating or integrating with other development tools. Clang is considered a
94    production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
95    (32- and 64-bit), and for Darwin/ARM targets.</p>
96
97 <p>In the LLVM 3.1 time-frame, the Clang team has made many improvements.
98    Highlights include:</p>
99 <ul>
100   <li>Greatly expanded <a href="http://clang.llvm.org/cxx_status.html">C++11
101       support</a> including lambdas, initializer lists, constexpr, user-defined
102       literals, and atomics.</li>
103   <li>A new <a href="http://clang.llvm.org/docs/Tooling.html">tooling</a>
104       library to ease building of clang-based standalone tools.</li>
105   <li>Extended support for
106       <a href="http://clang.llvm.org/docs/ObjectiveCLiterals.html">literals in
107       Objective C</a>.</li>
108 </ul>
109
110   <p>For more details about the changes to Clang since the 3.0 release, see the
111 <a href="http://clang.llvm.org/docs/ReleaseNotes.html">Clang release notes</a>
112 </p>
113
114
115 <p>If Clang rejects your code but another compiler accepts it, please take a
116    look at the <a href="http://clang.llvm.org/compatibility.html">language
117    compatibility</a> guide to make sure this is not intentional or a known
118    issue.</p>
119
120 </div>
121
122 <!--=========================================================================-->
123 <h3>
124 <a name="dragonegg">DragonEgg: GCC front-ends, LLVM back-end</a>
125 </h3>
126
127 <div>
128 <p><a href="http://dragonegg.llvm.org/">DragonEgg</a> is a
129    <a href="http://gcc.gnu.org/wiki/plugins">gcc plugin</a> that replaces GCC's
130    optimizers and code generators with LLVM's. It works with gcc-4.5 and gcc-4.6
131    (and partially with gcc-4.7), can target the x86-32/x86-64 and ARM processor
132    families, and has been successfully used on the Darwin, FreeBSD, KFreeBSD,
133    Linux and OpenBSD platforms.  It fully supports Ada, C, C++ and Fortran.  It
134    has partial support for Go, Java, Obj-C and Obj-C++.</p>
135
136 <p>The 3.1 release has the following notable changes:</p>
137
138   <ul>
139
140   <li>Partial support for gcc-4.7. Ada support is poor, but other languages work
141       fairly well.</li>
142
143   <li>Support for ARM processors. Some essential gcc headers that are needed to
144       build DragonEgg for ARM are not installed by gcc. To work around this,
145       copy the missing headers from the gcc source tree.</li>
146
147   <li>Better optimization for Fortran by exploiting the fact that Fortran scalar
148       arguments have 'restrict' semantics.</li>
149
150   <li>Better optimization for all languages by passing information about type
151       aliasing and type ranges to the LLVM optimizers.</li>
152
153   <li>A regression test-suite was added.</li>
154
155 </ul>
156
157 </div>
158
159 <!--=========================================================================-->
160 <h3>
161 <a name="compiler-rt">compiler-rt: Compiler Runtime Library</a>
162 </h3>
163
164 <div>
165
166 <p>The new LLVM <a href="http://compiler-rt.llvm.org/">compiler-rt project</a>
167    is a simple library that provides an implementation of the low-level
168    target-specific hooks required by code generation and other runtime
169    components.  For example, when compiling for a 32-bit target, converting a
170    double to a 64-bit unsigned integer is compiled into a runtime call to the
171    "__fixunsdfdi" function. The compiler-rt library provides highly optimized
172    implementations of this and other low-level routines (some are 3x faster than
173    the equivalent libgcc routines).</p>
174
175 <p>....</p>
176
177 </div>
178
179 <!--=========================================================================-->
180 <h3>
181 <a name="lldb">LLDB: Low Level Debugger</a>
182 </h3>
183
184 <div>
185
186 <p><a href="http://lldb.llvm.org">LLDB</a> is a ground-up implementation of a
187    command line debugger, as well as a debugger API that can be used from other
188    applications.  LLDB makes use of the Clang parser to provide high-fidelity
189    expression parsing (particularly for C++) and uses the LLVM JIT for target
190    support.</p>
191
192 <p>...</p>
193
194 </div>
195
196 <!--=========================================================================-->
197 <h3>
198 <a name="libc++">libc++: C++ Standard Library</a>
199 </h3>
200
201 <div>
202
203 <p>Like compiler_rt, libc++ is now <a href="DeveloperPolicy.html#license">dual
204    licensed</a> under the MIT and UIUC license, allowing it to be used more
205    permissively.</p>
206
207 <p>...</p>
208
209 </div>
210
211 <!--=========================================================================-->
212 <h3>
213 <a name="vmkit">VMKit</a>
214 </h3>
215
216 <div>
217
218   <p>The <a href="http://vmkit.llvm.org/">VMKit project</a> is an
219   implementation of a Java Virtual Machine (Java VM or JVM) that uses LLVM for
220   static and just-in-time compilation.
221
222   <p>In the LLVM 3.1 time-frame, VMKit has had significant improvements on both
223   runtime and startup performance:</p>
224
225   <ul>
226   <li>...</li>
227   </ul>
228
229 </div>
230
231
232 <!--=========================================================================-->
233 <h3>
234 <a name="Polly">Polly: Polyhedral Optimizer</a>
235 </h3>
236
237 <div>
238
239   <p><a href="http://polly.llvm.org/">Polly</a> is an <em>experimental</em>
240   optimizer for data locality and parallelism. It currently provides high-level
241   loop optimizations and automatic parallelisation (using the OpenMP run time).
242   Work in the area of automatic SIMD and accelerator code generation was
243   started.
244
245   <p>Within the LLVM 3.1 time-frame there were the following highlights:</p>
246
247   <ul>
248   <li>Polly became an official LLVM project</li>
249   <li>Polly can be loaded directly into clang (Enabled by '-O3 -mllvm -polly'
250   )</li>
251   <li>An automatic scheduling optimizer (derived from <a
252   href="http://pluto-compiler.sourceforge.net/">Pluto</a>) was integrated. It
253   performs loop transformations to optimize for data-locality and parallelism.
254   The transformations include, but are not limited to interchange, fusion,
255   fission, skewing and tiling.
256   </li>
257   </ul>
258
259 </div>
260
261 </div>
262
263 <!-- *********************************************************************** -->
264 <h2>
265   <a name="externalproj">External Open Source Projects Using LLVM 3.1</a>
266 </h2>
267 <!-- *********************************************************************** -->
268
269 <div>
270
271 <p>An exciting aspect of LLVM is that it is used as an enabling technology for
272    a lot of other language and tools projects.  This section lists some of the
273    projects that have already been updated to work with LLVM 3.1.</p>
274
275 <h3>FAUST</h3>
276
277 <div>
278
279 <p><a href="http://faust.grame.fr/">FAUST</a> is a compiled language for
280    real-time audio signal processing. The name FAUST stands for Functional
281    AUdio STream. Its programming model combines two approaches: functional
282    programming and block diagram composition. In addition with the C, C++, Java,
283    JavaScript output formats, the Faust compiler can generate LLVM bitcode, and
284    works with LLVM 2.7-3.1.</p>
285
286 </div>
287
288 <h3>Glasgow Haskell Compiler (GHC)</h3>
289
290 <div>
291
292 <p><a href="http://www.haskell.org/ghc/">GHC</a> is an open source compiler and
293    programming suite for Haskell, a lazy functional programming language. It
294    includes an optimizing static compiler generating good code for a variety of
295    platforms, together with an interactive system for convenient, quick
296    development.</p>
297
298 <p>GHC 7.0 and onwards include an LLVM code generator, supporting LLVM 2.8 and
299    later.</p>
300
301 </div>
302
303 <h3>LLVM D Compiler</h3>
304
305 <div>
306
307 <p><a href="https://github.com/ldc-developers/ldc">LLVM D Compiler</a> (LDC) is
308    a compiler for the D programming Language. It is based on the DMD frontend
309    and uses LLVM as backend.</p>
310
311 </div>
312
313 <h3>Open Shading Language</h3>
314
315 <div>
316
317 <p><a href="https://github.com/imageworks/OpenShadingLanguage/">Open Shading
318    Language (OSL)</a> is a small but rich language for programmable shading in
319    advanced global illumination renderers and other applications, ideal for
320    describing materials, lights, displacement, and pattern generation. It uses
321    LLVM to JIT complex shader networks to x86 code at runtime.</p>
322
323 <p>OSL was developed by Sony Pictures Imageworks for use in its in-house
324    renderer used for feature film animation and visual effects, and is
325    distributed as open source software with the "New BSD" license.</p>
326
327 </div>
328
329 <h3>Portable OpenCL (pocl)</h3>
330
331 <div>
332
333 <p>In addition to producing an easily portable open source OpenCL
334    implementation, another major goal of <a href="http://pocl.sourceforge.net/">
335    pocl</a> is improving performance portability of OpenCL programs with
336    compiler optimizations, reducing the need for target-dependent manual
337    optimizations. An important part of pocl is a set of LLVM passes used to
338    statically parallelize multiple work-items with the kernel compiler, even in
339    the presence of work-group barriers. This enables static parallelization of
340    the fine-grained static concurrency in the work groups in multiple ways
341    (SIMD, VLIW, superscalar,...).</p>
342
343 </div>
344
345 <h3>Pure</h3>
346
347 <div>
348
349 <p><a href="http://pure-lang.googlecode.com/">Pure</a> is an
350    algebraic/functional programming language based on term rewriting. Programs
351    are collections of equations which are used to evaluate expressions in a
352    symbolic fashion. The interpreter uses LLVM as a backend to JIT-compile Pure
353    programs to fast native code. Pure offers dynamic typing, eager and lazy
354    evaluation, lexical closures, a hygienic macro system (also based on term
355    rewriting), built-in list and matrix support (including list and matrix
356    comprehensions) and an easy-to-use interface to C and other programming
357    languages (including the ability to load LLVM bitcode modules, and inline C,
358    C++, Fortran and Faust code in Pure programs if the corresponding
359    LLVM-enabled compilers are installed).</p>
360
361 <p>Pure version 0.54 has been tested and is known to work with LLVM 3.1 (and
362    continues to work with older LLVM releases >= 2.5).</p>
363
364 </div>
365
366 <h3>TTA-based Co-design Environment (TCE)</h3>
367
368 <div>
369
370 <p><a href="http://tce.cs.tut.fi/">TCE</a> is a toolset for designing
371    application-specific processors (ASP) based on the Transport triggered
372    architecture (TTA). The toolset provides a complete co-design flow from C/C++
373    programs down to synthesizable VHDL/Verilog and parallel program binaries.
374    Processor customization points include the register files, function units,
375    supported operations, and the interconnection network.</p>
376
377 <p>TCE uses Clang and LLVM for C/C++ language support, target independent
378    optimizations and also for parts of code generation. It generates new
379    LLVM-based code generators "on the fly" for the designed TTA processors and
380    loads them in to the compiler backend as runtime libraries to avoid
381    per-target recompilation of larger parts of the compiler chain.</p>
382
383 </div>
384
385 </div>
386
387 <!-- *********************************************************************** -->
388 <h2>
389   <a name="whatsnew">What's New in LLVM 3.1?</a>
390 </h2>
391 <!-- *********************************************************************** -->
392
393 <div>
394
395 <p>This release includes a huge number of bug fixes, performance tweaks and
396    minor improvements.  Some of the major improvements and new features are
397    listed in this section.</p>
398
399 <!--=========================================================================-->
400 <h3>
401 <a name="majorfeatures">Major New Features</a>
402 </h3>
403
404 <div>
405
406   <!-- Features that need text if they're finished for 3.1:
407    ARM EHABI
408    combiner-aa?
409    strong phi elim
410    loop dependence analysis
411    CorrelatedValuePropagation
412    lib/Transforms/IPO/MergeFunctions.cpp => consider for 3.1.
413    Integrated assembler on by default for arm/thumb?
414
415    -->
416
417   <!-- Near dead:
418    Analysis/RegionInfo.h + Dom Frontiers
419    SparseBitVector: used in LiveVar.
420    llvm/lib/Archive - replace with lib object?
421    -->
422
423 <p>LLVM 3.1 includes several major changes and big features:</p>
424
425 <ul>
426   <li><a href="../tools/clang/docs/AddressSanitizer.html">AddressSanitizer</a>,
427       a fast memory error detector.</li>
428   <li><a href="CodeGenerator.html#machineinstrbundle">MachineInstr Bundles</a>,
429       Support to model instruction bundling / packing.</li>
430   <li><a href="#armintegratedassembler">ARM Integrated Assembler</a>,
431       A full featured assembler and direct-to-object support for ARM.</li>
432   <li><a href="#blockplacement">Basic Block Placement</a>
433       Probability driven basic block placement.</li>
434   <li>....</li>
435 </ul>
436
437 </div>
438
439
440 <!--=========================================================================-->
441 <h3>
442 <a name="coreimprovements">LLVM IR and Core Improvements</a>
443 </h3>
444
445 <div>
446
447 <p>LLVM IR has several new features for better support of new targets and that
448    expose new optimization opportunities:</p>
449
450   <ul>
451     <li>IR support for half float</li>
452     <li>IR support for vectors of pointers, including vector GEPs.</li>
453     <li>Module flags have been introduced. They convey information about the
454         module as a whole to LLVM subsystems.</li>
455     <li>Loads can now have range metadata attached to them to describe the
456         possible values being loaded.</li>
457     <li>Inline cost heuristics have been completely overhauled and now closely
458         model constant propagation through call sites, disregard trivially dead
459         code costs, and can model C++ STL iterator patterns.</li>
460     <li>....</li>
461   </ul>
462 </div>
463
464 <!--=========================================================================-->
465 <h3>
466 <a name="optimizer">Optimizer Improvements</a>
467 </h3>
468
469 <div>
470
471 <p>In addition to many minor performance tweaks and bug fixes, this
472    release includes a few major enhancements and additions to the
473    optimizers:</p>
474
475 <ul>
476   <li>The loop unroll pass now is able to unroll loops with run-time trip counts.
477       This feature is turned off by default, and is enabled with the
478       <code>-unroll-runtime</code> flag.</li>
479   <li>A new basic-block autovectorization pass is available. Pass
480       <code>-vectorize</code> to run this pass along with some associated
481       post-vectorization cleanup passes. For more information, see the EuroLLVM
482       2012 slides: <a href="http://llvm.org/devmtg/2012-04-12/Slides/Hal_Finkel.pdf">
483       Autovectorization with LLVM</a>.</li>
484   <li>....</li>
485 </ul>
486
487 </div>
488
489 <!--=========================================================================-->
490 <h3>
491 <a name="mc">MC Level Improvements</a>
492 </h3>
493
494 <div>
495
496 <p>The LLVM Machine Code (aka MC) subsystem was created to solve a number of
497    problems in the realm of assembly, disassembly, object file format handling,
498    and a number of other related areas that CPU instruction-set level tools work
499    in. For more information, please see
500   the <a href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro
501     to the LLVM MC Project Blog Post</a>.</p>
502
503 <ul>
504   <li>....</li>
505 </ul>
506
507 </div>
508
509 <!--=========================================================================-->
510 <h3>
511 <a name="codegen">Target Independent Code Generator Improvements</a>
512 </h3>
513
514 <div>
515
516 <p>We have changed the way that the Type Legalizer legalizes vectors. The type
517    legalizer now attempts to promote integer elements.  This enabled the
518    implementation of vector-select.  Additionally, we see a performance boost on
519    workloads which use vectors of chars and shorts, since they are now promoted
520    to 32-bit types, which are better supported by the SIMD instruction set.
521    Floating point types are still widened as before.</p>
522
523
524 <p>We have put a significant amount of work into the code generator
525    infrastructure, which allows us to implement more aggressive algorithms and
526    make it run faster:</p>
527
528 <ul>
529   <li>TableGen can now synthesize register classes that are only needed to
530       represent combinations of constraints from instructions and sub-registers.
531       The synthetic register classes inherit most of their properties form their
532       closest user-defined super-class.</li>
533   <li><code>MachineRegisterInfo</code> now allows the reserved registers to be
534       frozen when register allocation starts.  Target hooks should use the
535       <code>MRI-&gt;canReserveReg(FramePtr)</code> method to avoid accidentally
536       disabling frame pointer elimination during register allocation.</li>
537   <li>A new kind of <code>MachineOperand</code> provides a compact
538       representation of large clobber lists on call instructions.  The register
539       mask operand references a bit mask of preserved registers. Everything else
540       is clobbered.</li>
541 </ul>
542
543 <p> We added new TableGen infrastructure to support bundling for
544     Very Long Instruction Word (VLIW) architectures. TableGen can now
545     automatically generate a deterministic finite automaton from a VLIW
546     target's schedule description which can be queried to determine
547     legal groupings of instructions in a bundle.</p>
548
549 <p> We have added a new target independent VLIW packetizer based on the
550     DFA infrastructure to group machine instructions into bundles.</p>
551
552 </div>
553
554 <h4>
555 <a name="blockplacement">Basic Block Placement</a>
556 </h4>
557 <div>
558 <p>A probability based block placement and code layout algorithm was added to
559 LLVM's code generator. This layout pass supports probabilities derived from
560 static heuristics as well as source code annotations such as
561 <code>__builtin_expect</code>.</p>
562 </div>
563
564 <!--=========================================================================-->
565 <h3>
566 <a name="x86">X86-32 and X86-64 Target Improvements</a>
567 </h3>
568
569 <div>
570
571 <p>New features and major changes in the X86 target include:</p>
572
573 <ul>
574   <li>Bug fixes and improved support for AVX1</li>
575   <li>Support for AVX2 (still incomplete at this point)</li>
576   <li>Call instructions use the new register mask operands for faster compile
577   times and better support for different calling conventions.  The old WINCALL
578   instructions are no longer needed.</li>
579   <li>DW2 Exception Handling is enabled on Cygwin and MinGW.</li>
580   <li>Support for implicit TLS model used with MS VC runtime</li>
581 </ul>
582
583 </div>
584
585 <!--=========================================================================-->
586 <h3>
587 <a name="ARM">ARM Target Improvements</a>
588 </h3>
589
590 <div>
591
592 <p>New features of the ARM target include:</p>
593
594 <ul>
595   <li>The constant island pass now supports basic block and constant pool entry
596   alignments greater than 4 bytes.</li>
597   <li>On Darwin, the ARM target now has a full-featured integrated assembler.
598   </li>
599 </ul>
600
601 <h4>
602 <a name="armintegratedassembler">ARM Integrated Assembler</a>
603 </h4>
604 <div>
605 <p>The ARM target now includes a full featured macro assembler, including
606 direct-to-object module support for clang. The assembler is currently enabled
607 by default for Darwin only pending testing and any additional necessary
608 platform specific support for Linux.</p>
609
610 <p>Full support is included for Thumb1, Thumb2 and ARM modes, along with
611 subtarget and CPU specific extensions for VFP2, VFP3 and NEON.</p>
612
613 <p>The assembler is Unified Syntax only (see ARM Architecural Reference Manual
614 for details). While there is some, and growing, support for pre-unfied (divided)
615 syntax, there are still significant gaps in that support.</p>
616 </div>
617
618 </div>
619 <!--=========================================================================-->
620 <h3>
621 <a name="MIPS">MIPS Target Improvements</a>
622 </h3>
623
624 <div>
625
626 <p>This release has seen major new work on just about every aspect of the MIPS
627   backend.  Some of the major new features include:</p>
628
629 <ul>
630   <li>....</li>
631 </ul>
632 </div>
633
634 <!--=========================================================================-->
635 <h3>
636 <a name="OtherTS">Other Target Specific Improvements</a>
637 </h3>
638
639 <div>
640
641 <p>Support for Qualcomm's Hexagon VLIW processor has been added.</p>
642
643 <ul>
644   <li>....</li>
645
646
647 </ul>
648
649 </div>
650
651 <!--=========================================================================-->
652 <h3>
653 <a name="changes">Major Changes and Removed Features</a>
654 </h3>
655
656 <div>
657
658 <p>If you're already an LLVM user or developer with out-of-tree changes based on
659    LLVM 3.1, this section lists some "gotchas" that you may run into upgrading
660    from the previous release.</p>
661
662 <ul>
663   <li>LLVM 3.1 removes support for reading LLVM 2.9 bitcode files. Going
664       forward, we aim for all future versions of LLVM to read bitcode files and
665       <tt>.ll</tt> files produced by LLVM 3.0 and later.</li>
666   <li>The <tt>unwind</tt> instruction is now gone. With the introduction of the
667       new exception handling system in LLVM 3.0, the <tt>unwind</tt> instruction
668       became obsolete.</li>
669   <li>LLVM 3.0 and earlier automatically added the returns_twice fo functions
670       like setjmp based on the name. This functionality was removed in 3.1.
671       This affects Clang users, if -ffreestanding is used.</li>
672   <li>....</li>
673 </ul>
674
675 </div>
676
677 <!--=========================================================================-->
678 <h3>
679 <a name="api_changes">Internal API Changes</a>
680 </h3>
681
682 <div>
683
684 <p>In addition, many APIs have changed in this release.  Some of the major
685    LLVM API changes are:</p>
686
687 <ul>
688   <li>Target specific options have been moved from global variables to members
689       on the new <code>TargetOptions</code> class, which is local to each
690       <code>TargetMachine</code>. As a consequence, the associated flags will
691       no longer be accepted by <tt>clang -mllvm</tt>. This includes:
692 <ul>
693 <li><code>llvm::PrintMachineCode</code></li>
694 <li><code>llvm::NoFramePointerElim</code></li>
695 <li><code>llvm::NoFramePointerElimNonLeaf</code></li>
696 <li><code>llvm::DisableFramePointerElim(const MachineFunction &)</code></li>
697 <li><code>llvm::LessPreciseFPMADOption</code></li>
698 <li><code>llvm::LessPrecideFPMAD()</code></li>
699 <li><code>llvm::NoExcessFPPrecision</code></li>
700 <li><code>llvm::UnsafeFPMath</code></li>
701 <li><code>llvm::NoInfsFPMath</code></li>
702 <li><code>llvm::NoNaNsFPMath</code></li>
703 <li><code>llvm::HonorSignDependentRoundingFPMathOption</code></li>
704 <li><code>llvm::HonorSignDependentRoundingFPMath()</code></li>
705 <li><code>llvm::UseSoftFloat</code></li>
706 <li><code>llvm::FloatABIType</code></li>
707 <li><code>llvm::NoZerosInBSS</code></li>
708 <li><code>llvm::JITExceptionHandling</code></li>
709 <li><code>llvm::JITEmitDebugInfo</code></li>
710 <li><code>llvm::JITEmitDebugInfoToDisk</code></li>
711 <li><code>llvm::GuaranteedTailCallOpt</code></li>
712 <li><code>llvm::StackAlignmentOverride</code></li>
713 <li><code>llvm::RealignStack</code></li>
714 <li><code>llvm::DisableJumpTables</code></li>
715 <li><code>llvm::EnableFastISel</code></li>
716 <li><code>llvm::getTrapFunctionName()</code></li>
717 <li><code>llvm::EnableSegmentedStacks</code></li>
718 </ul></li>
719   <li>The MDBuilder class has been added to simplify the creation of
720       metadata.</li>
721   <li>....</li>
722 </ul>
723
724 </div>
725
726 <!--=========================================================================-->
727 <h3>
728 <a name="tools_changes">Tools Changes</a>
729 </h3>
730
731 <div>
732
733 <p>In addition, some tools have changed in this release. Some of the changes
734    are:</p>
735
736
737 <ul>
738   <li>llvm-stress is a command line tool for generating random .ll files to fuzz
739       different LLVM components. </li>
740   <li>llvm-ld has been removed.  Use llvm-link or Clang instead.</li>
741   <li>....</li>
742 </ul>
743
744 <ul>
745   <li>....</li>
746 </ul>
747
748 </div>
749
750
751 <!--=========================================================================-->
752 <h3>
753 <a name="python">Python Bindings</a>
754 </h3>
755
756 <div>
757
758 <p>Officially supported Python bindings have been added! Feature support is far
759 from complete. The current bindings support interfaces to:</p>
760 <ul>
761   <li>Object File Interface</li>
762   <li>Disassembler</li>
763 </ul>
764
765 <p>Using the Object File Interface, it is possible to inspect binary object files.
766 Think of it as a Python version of readelf or llvm-objdump.</p>
767
768 <p>Support for additional features is currently being developed by community
769 contributors. If you are interested in shaping the direction of the Python
770 bindings, please express your intent on IRC or the developers list.</p>
771
772 </div>
773
774 </div>
775
776 <!-- *********************************************************************** -->
777 <h2>
778   <a name="knownproblems">Known Problems</a>
779 </h2>
780 <!-- *********************************************************************** -->
781
782 <div>
783
784 <p>LLVM is generally a production quality compiler, and is used by a broad range
785    of applications and shipping in many products.  That said, not every
786    subsystem is as mature as the aggregate, particularly the more obscure
787    targets.  If you run into a problem, please check the <a
788    href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
789    there isn't already one or ask on the <a
790     href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev
791     list</a>.</p>
792
793   <p>Known problem areas include:</p>
794
795 <ul>
796   <li>The Alpha, Blackfin, CellSPU, MSP430, PTX, SystemZ and
797       XCore backends are experimental, and the Alpha, Blackfin and SystemZ
798       targets have already been removed from mainline.</li>
799
800   <li>The integrated assembler, disassembler, and JIT is not supported by
801       several targets.  If an integrated assembler is not supported, then a
802       system assembler is required.  For more details, see the <a
803       href="CodeGenerator.html#targetfeatures">Target Features Matrix</a>.
804   </li>
805
806   <li>The C backend has numerous problems and is not being actively maintained.
807     Depending on it for anything serious is not advised.</li>
808 </ul>
809
810 </div>
811
812 <!-- *********************************************************************** -->
813 <h2>
814   <a name="additionalinfo">Additional Information</a>
815 </h2>
816 <!-- *********************************************************************** -->
817
818 <div>
819
820 <p>A wide variety of additional information is available on
821    the <a href="http://llvm.org/">LLVM web page</a>, in particular in
822    the <a href="http://llvm.org/docs/">documentation</a> section.  The web page
823    also contains versions of the API documentation which is up-to-date with the
824    Subversion version of the source code.  You can access versions of these
825    documents specific to this release by going into the "<tt>llvm/doc/</tt>"
826    directory in the LLVM tree.</p>
827
828 <p>If you have any questions or comments about LLVM, please feel free to contact
829    us via the <a href="http://llvm.org/docs/#maillist"> mailing lists</a>.</p>
830
831 </div>
832
833 <!-- *********************************************************************** -->
834
835 <hr>
836 <address>
837   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
838   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
839   <a href="http://validator.w3.org/check/referer"><img
840   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
841
842   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
843   Last modified: $Date$
844 </address>
845
846 </body>
847 </html>