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