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 >= 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 >= 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 580 on LLVM 2.9, this section lists some "gotchas" that you may run into upgrading 581 from the previous release.</p> 582 583 <ul> 584 <!-- 585 <li></li> 586 --> 587 </ul> 588 589 </div> 590 591 <!--=========================================================================--> 592 <h3> 593 <a name="api_changes">Internal API Changes</a> 594 </h3> 595 596 <div> 597 598 <p>In addition, many APIs have changed in this release. Some of the major 599 LLVM API changes are:</p> 600 601 <ul> 602 <li>The biggest and most pervasive change is that llvm::Type's are no longer 603 returned or accepted as 'const' values. Instead, just pass around non-const 604 Type's.</li> 605 606 <li><code>PHINode::reserveOperandSpace</code> has been removed. Instead, you 607 must specify how many operands to reserve space for when you create the 608 PHINode, by passing an extra argument into <code>PHINode::Create</code>.</li> 609 610 <li>PHINodes no longer store their incoming BasicBlocks as operands. Instead, 611 the list of incoming BasicBlocks is stored separately, and can be accessed 612 with new functions <code>PHINode::block_begin</code> 613 and <code>PHINode::block_end</code>.</li> 614 615 <li>Various functions now take an <code>ArrayRef</code> instead of either a pair 616 of pointers (or iterators) to the beginning and end of a range, or a pointer 617 and a length. Others now return an <code>ArrayRef</code> instead of a 618 reference to a <code>SmallVector</code> or <code>std::vector</code>. These 619 include: 620 <ul> 621 <!-- Please keep this list sorted. --> 622 <li><code>CallInst::Create</code></li> 623 <li><code>ComputeLinearIndex</code> (in <code>llvm/CodeGen/Analysis.h</code>)</li> 624 <li><code>ConstantArray::get</code></li> 625 <li><code>ConstantExpr::getExtractElement</code></li> 626 <li><code>ConstantExpr::getIndices</code></li> 627 <li><code>ConstantExpr::getInsertElement</code></li> 628 <li><code>ConstantExpr::getWithOperands</code></li> 629 <li><code>ConstantFoldCall</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li> 630 <li><code>ConstantFoldInstOperands</code> (in <code>llvm/Analysis/ConstantFolding.h</code>)</li> 631 <li><code>ConstantVector::get</code></li> 632 <li><code>DIBuilder::createComplexVariable</code></li> 633 <li><code>DIBuilder::getOrCreateArray</code></li> 634 <li><code>ExtractValueInst::Create</code></li> 635 <li><code>ExtractValueInst::getIndexedType</code></li> 636 <li><code>ExtractValueInst::getIndices</code></li> 637 <li><code>FindInsertedValue</code> (in <code>llvm/Analysis/ValueTracking.h</code>)</li> 638 <li><code>gep_type_begin</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li> 639 <li><code>gep_type_end</code> (in <code>llvm/Support/GetElementPtrTypeIterator.h</code>)</li> 640 <li><code>IRBuilder::CreateCall</code></li> 641 <li><code>IRBuilder::CreateExtractValue</code></li> 642 <li><code>IRBuilder::CreateInsertValue</code></li> 643 <li><code>IRBuilder::CreateInvoke</code></li> 644 <li><code>InsertValueInst::Create</code></li> 645 <li><code>InsertValueInst::getIndices</code></li> 646 <li><code>InvokeInst::Create</code></li> 647 <li><code>MDNode::get</code></li> 648 <li><code>MDNode::getIfExists</code></li> 649 <li><code>MDNode::getTemporary</code></li> 650 <li><code>MDNode::getWhenValsUnresolved</code></li> 651 <li><code>SimplifyGEPInst</code> (in <code>llvm/Analysis/InstructionSimplify.h</code>)</li> 652 <li><code>TargetData::getIndexedOffset</code></li> 653 </ul></li> 654 655 <li>All forms of <code>StringMap::getOrCreateValue</code> have been remove 656 except for the one which takes a <code>StringRef</code>.</li> 657 658 </ul> 659 </div> 660 661 </div> 662 663 <!-- *********************************************************************** --> 664 <h2> 665 <a name="knownproblems">Known Problems</a> 666 </h2> 667 <!-- *********************************************************************** --> 668 669 <div> 670 671 <p>This section contains significant known problems with the LLVM system, 672 listed by component. If you run into a problem, please check the <a 673 href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if 674 there isn't already one.</p> 675 676 <!-- ======================================================================= --> 677 <h3> 678 <a name="experimental">Experimental features included with this release</a> 679 </h3> 680 681 <div> 682 683 <p>The following components of this LLVM release are either untested, known to 684 be broken or unreliable, or are in early development. These components should 685 not be relied on, and bugs should not be filed against them, but they may be 686 useful to some people. In particular, if you would like to work on one of these 687 components, please contact us on the <a 688 href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p> 689 690 <ul> 691 <li>The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ 692 and XCore backends are experimental.</li> 693 <li><tt>llc</tt> "<tt>-filetype=obj</tt>" is experimental on all targets 694 other than darwin and ELF X86 systems.</li> 695 696 </ul> 697 698 </div> 699 700 <!-- ======================================================================= --> 701 <h3> 702 <a name="x86-be">Known problems with the X86 back-end</a> 703 </h3> 704 705 <div> 706 707 <ul> 708 <li>The X86 backend does not yet support 709 all <a href="http://llvm.org/PR879">inline assembly that uses the X86 710 floating point stack</a>. It supports the 'f' and 't' constraints, but not 711 'u'.</li> 712 <li>The X86-64 backend does not yet support the LLVM IR instruction 713 <tt>va_arg</tt>. Currently, front-ends support variadic 714 argument constructs on X86-64 by lowering them manually.</li> 715 <li>Windows x64 (aka Win64) code generator has a few issues. 716 <ul> 717 <li>llvm-gcc cannot build the mingw-w64 runtime currently 718 due to lack of support for the 'u' inline assembly 719 constraint and for X87 floating point inline assembly.</li> 720 <li>On mingw-w64, you will see unresolved symbol <tt>__chkstk</tt> 721 due to <a href="http://llvm.org/bugs/show_bug.cgi?id=8919">Bug 8919</a>. 722 It is fixed in <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110321/118499.html">r128206</a>.</li> 723 <li>Miss-aligned MOVDQA might crash your program. It is due to 724 <a href="http://llvm.org/bugs/show_bug.cgi?id=9483">Bug 9483</a>, 725 lack of handling aligned internal globals.</li> 726 </ul> 727 </li> 728 729 </ul> 730 731 </div> 732 733 <!-- ======================================================================= --> 734 <h3> 735 <a name="ppc-be">Known problems with the PowerPC back-end</a> 736 </h3> 737 738 <div> 739 740 <ul> 741 <li>The Linux PPC32/ABI support needs testing for the interpreter and static 742 compilation, and lacks support for debug information.</li> 743 </ul> 744 745 </div> 746 747 <!-- ======================================================================= --> 748 <h3> 749 <a name="arm-be">Known problems with the ARM back-end</a> 750 </h3> 751 752 <div> 753 754 <ul> 755 <li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6 756 processors, thumb programs can crash or produce wrong 757 results (<a href="http://llvm.org/PR1388">PR1388</a>).</li> 758 <li>Compilation for ARM Linux OABI (old ABI) is supported but not fully tested. 759 </li> 760 </ul> 761 762 </div> 763 764 <!-- ======================================================================= --> 765 <h3> 766 <a name="sparc-be">Known problems with the SPARC back-end</a> 767 </h3> 768 769 <div> 770 771 <ul> 772 <li>The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not 773 support the 64-bit SPARC ABI (-m64).</li> 774 </ul> 775 776 </div> 777 778 <!-- ======================================================================= --> 779 <h3> 780 <a name="mips-be">Known problems with the MIPS back-end</a> 781 </h3> 782 783 <div> 784 785 <ul> 786 <li>64-bit MIPS targets are not supported yet.</li> 787 </ul> 788 789 </div> 790 791 <!-- ======================================================================= --> 792 <h3> 793 <a name="alpha-be">Known problems with the Alpha back-end</a> 794 </h3> 795 796 <div> 797 798 <ul> 799 800 <li>On 21164s, some rare FP arithmetic sequences which may trap do not have the 801 appropriate nops inserted to ensure restartability.</li> 802 803 </ul> 804 </div> 805 806 <!-- ======================================================================= --> 807 <h3> 808 <a name="c-be">Known problems with the C back-end</a> 809 </h3> 810 811 <div> 812 813 <p>The C backend has numerous problems and is not being actively maintained. 814 Depending on it for anything serious is not advised.</p> 815 816 <ul> 817 <li><a href="http://llvm.org/PR802">The C backend has only basic support for 818 inline assembly code</a>.</li> 819 <li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common 820 C++ programs</a>, preventing intermixing between C++ compiled by the CBE and 821 C++ code compiled with <tt>llc</tt> or native compilers.</li> 822 <li>The C backend does not support all exception handling constructs.</li> 823 <li>The C backend does not support arbitrary precision integers.</li> 824 </ul> 825 826 </div> 827 828 829 <!-- ======================================================================= --> 830 <h3> 831 <a name="llvm-gcc">Known problems with the llvm-gcc front-end</a> 832 </h3> 833 834 <div> 835 836 <p><b>LLVM 3.0 will be the last release of llvm-gcc.</b></p> 837 838 <p>llvm-gcc is generally very stable for the C family of languages. The only 839 major language feature of GCC not supported by llvm-gcc is the 840 <tt>__builtin_apply</tt> family of builtins. However, some extensions 841 are only supported on some targets. For example, trampolines are only 842 supported on some targets (these are used when you take the address of a 843 nested function).</p> 844 845 <p>Fortran support generally works, but there are still several unresolved bugs 846 in <a href="http://llvm.org/bugs/">Bugzilla</a>. Please see the 847 tools/gfortran component for details. Note that llvm-gcc is missing major 848 Fortran performance work in the frontend and library that went into GCC after 849 4.2. If you are interested in Fortran, we recommend that you consider using 850 <a href="#dragonegg">dragonegg</a> instead.</p> 851 852 <p>The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being 853 actively maintained. If you are interested in Ada, we recommend that you 854 consider using <a href="#dragonegg">dragonegg</a> instead.</p> 855 </div> 856 857 </div> 858 859 <!-- *********************************************************************** --> 860 <h2> 861 <a name="additionalinfo">Additional Information</a> 862 </h2> 863 <!-- *********************************************************************** --> 864 865 <div> 866 867 <p>A wide variety of additional information is available on the <a 868 href="http://llvm.org/">LLVM web page</a>, in particular in the <a 869 href="http://llvm.org/docs/">documentation</a> section. The web page also 870 contains versions of the API documentation which is up-to-date with the 871 Subversion version of the source code. 872 You can access versions of these documents specific to this release by going 873 into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p> 874 875 <p>If you have any questions or comments about LLVM, please feel free to contact 876 us via the <a href="http://llvm.org/docs/#maillist"> mailing 877 lists</a>.</p> 878 879 </div> 880 881 <!-- *********************************************************************** --> 882 883 <hr> 884 <address> 885 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img 886 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> 887 <a href="http://validator.w3.org/check/referer"><img 888 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> 889 890 <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br> 891 Last modified: $Date$ 892 </address> 893 894 </body> 895 </html> 896