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.2 Release Notes</title> 8 </head> 9 <body> 10 11 <h1>LLVM 3.2 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.2</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.2 33 release.<br> 34 You may prefer the 35 <a href="http://llvm.org/releases/3.1/docs/ReleaseNotes.html">LLVM 3.1 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.2. 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. All LLVM 50 releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM 51 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.2 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 addition to this code, the 78 LLVM Project includes other sub-projects that are in development. Here we 79 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.2 time-frame, the Clang team has made many improvements. 98 Highlights include:</p> 99 <ul> 100 <li>...</li> 101 </ul> 102 103 <p>For more details about the changes to Clang since the 3.1 release, see the 104 <a href="http://clang.llvm.org/docs/ReleaseNotes.html">Clang release 105 notes.</a></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 110 issue.</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 121 <p><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. It works with gcc-4.5 and gcc-4.6 124 (and partially with gcc-4.7), can target the x86-32/x86-64 and ARM processor 125 families, and has been successfully used on the Darwin, FreeBSD, KFreeBSD, 126 Linux and OpenBSD platforms. It fully supports Ada, C, C++ and Fortran. It 127 has partial support for Go, Java, Obj-C and Obj-C++.</p> 128 129 <p>The 3.2 release has the following notable changes:</p> 130 131 <ul> 132 <li>...</li> 133 </ul> 134 135 </div> 136 137 <!--=========================================================================--> 138 <h3> 139 <a name="compiler-rt">compiler-rt: Compiler Runtime Library</a> 140 </h3> 141 142 <div> 143 144 <p>The new LLVM <a href="http://compiler-rt.llvm.org/">compiler-rt project</a> 145 is a simple library that provides an implementation of the low-level 146 target-specific hooks required by code generation and other runtime 147 components. For example, when compiling for a 32-bit target, converting a 148 double to a 64-bit unsigned integer is compiled into a runtime call to the 149 <code>__fixunsdfdi</code> function. The compiler-rt library provides highly 150 optimized implementations of this and other low-level routines (some are 3x 151 faster than the equivalent libgcc routines).</p> 152 153 <p>The 3.2 release has the following notable changes:</p> 154 155 <ul> 156 <li>...</li> 157 </ul> 158 159 </div> 160 161 <!--=========================================================================--> 162 <h3> 163 <a name="lldb">LLDB: Low Level Debugger</a> 164 </h3> 165 166 <div> 167 168 <p><a href="http://lldb.llvm.org">LLDB</a> is a ground-up implementation of a 169 command line debugger, as well as a debugger API that can be used from other 170 applications. LLDB makes use of the Clang parser to provide high-fidelity 171 expression parsing (particularly for C++) and uses the LLVM JIT for target 172 support.</p> 173 174 <p>The 3.2 release has the following notable changes:</p> 175 176 <ul> 177 <li>...</li> 178 </ul> 179 180 </div> 181 182 <!--=========================================================================--> 183 <h3> 184 <a name="libc++">libc++: C++ Standard Library</a> 185 </h3> 186 187 <div> 188 189 <p>Like compiler_rt, libc++ is now <a href="DeveloperPolicy.html#license">dual 190 licensed</a> under the MIT and UIUC license, allowing it to be used more 191 permissively.</p> 192 193 <p>Within the LLVM 3.2 time-frame there were the following highlights:</p> 194 195 <ul> 196 <li>...</li> 197 </ul> 198 199 </div> 200 201 <!--=========================================================================--> 202 <h3> 203 <a name="vmkit">VMKit</a> 204 </h3> 205 206 <div> 207 208 <p>The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation 209 of a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and 210 just-in-time compilation.</p> 211 212 <p>The 3.2 release has the following notable changes:</p> 213 214 <ul> 215 <li>...</li> 216 </ul> 217 218 </div> 219 220 221 <!--=========================================================================--> 222 <h3> 223 <a name="Polly">Polly: Polyhedral Optimizer</a> 224 </h3> 225 226 <div> 227 228 <p><a href="http://polly.llvm.org/">Polly</a> is an <em>experimental</em> 229 optimizer for data locality and parallelism. It currently provides high-level 230 loop optimizations and automatic parallelisation (using the OpenMP run time). 231 Work in the area of automatic SIMD and accelerator code generation was 232 started.</p> 233 234 <p>Within the LLVM 3.2 time-frame there were the following highlights:</p> 235 236 <ul> 237 <li>...</li> 238 </ul> 239 240 </div> 241 242 </div> 243 244 <!-- *********************************************************************** --> 245 <h2> 246 <a name="externalproj">External Open Source Projects Using LLVM 3.2</a> 247 </h2> 248 <!-- *********************************************************************** --> 249 250 <div> 251 252 <p>An exciting aspect of LLVM is that it is used as an enabling technology for 253 a lot of other language and tools projects. This section lists some of the 254 projects that have already been updated to work with LLVM 3.2.</p> 255 256 <h3>Crack</h3> 257 258 <div> 259 260 <p><a href="http://code.google.com/p/crack-language/">Crack</a> aims to provide 261 the ease of development of a scripting language with the performance of a 262 compiled language. The language derives concepts from C++, Java and Python, 263 incorporating object-oriented programming, operator overloading and strong 264 typing.</p> 265 266 </div> 267 268 <h3>FAUST</h3> 269 270 <div> 271 272 <p><a href="http://faust.grame.fr/">FAUST</a> is a compiled language for 273 real-time audio signal processing. The name FAUST stands for Functional 274 AUdio STream. Its programming model combines two approaches: functional 275 programming and block diagram composition. In addition with the C, C++, Java, 276 JavaScript output formats, the Faust compiler can generate LLVM bitcode, and 277 works with LLVM 2.7-3.1.</p> 278 279 </div> 280 281 <h3>Glasgow Haskell Compiler (GHC)</h3> 282 283 <div> 284 285 <p><a href="http://www.haskell.org/ghc/">GHC</a> is an open source compiler and 286 programming suite for Haskell, a lazy functional programming language. It 287 includes an optimizing static compiler generating good code for a variety of 288 platforms, together with an interactive system for convenient, quick 289 development.</p> 290 291 <p>GHC 7.0 and onwards include an LLVM code generator, supporting LLVM 2.8 and 292 later.</p> 293 294 </div> 295 296 <h3>Julia</h3> 297 298 <div> 299 300 <p><a href="https://github.com/JuliaLang/julia">Julia</a> is a high-level, 301 high-performance dynamic language for technical computing. It provides a 302 sophisticated compiler, distributed parallel execution, numerical accuracy, 303 and an extensive mathematical function library. The compiler uses type 304 inference to generate fast code without any type declarations, and uses 305 LLVM's optimization passes and JIT compiler. The 306 <a href="http://julialang.org/"> Julia Language</a> is designed 307 around multiple dispatch, giving programs a large degree of flexibility. It 308 is ready for use on many kinds of problems.</p> 309 310 </div> 311 312 <h3>LLVM D Compiler</h3> 313 314 <div> 315 316 <p><a href="https://github.com/ldc-developers/ldc">LLVM D Compiler</a> (LDC) is 317 a compiler for the D programming Language. It is based on the DMD frontend 318 and uses LLVM as backend.</p> 319 320 </div> 321 322 <h3>Open Shading Language</h3> 323 324 <div> 325 326 <p><a href="https://github.com/imageworks/OpenShadingLanguage/">Open Shading 327 Language (OSL)</a> is a small but rich language for programmable shading in 328 advanced global illumination renderers and other applications, ideal for 329 describing materials, lights, displacement, and pattern generation. It uses 330 LLVM to JIT complex shader networks to x86 code at runtime.</p> 331 332 <p>OSL was developed by Sony Pictures Imageworks for use in its in-house 333 renderer used for feature film animation and visual effects, and is 334 distributed as open source software with the "New BSD" license.</p> 335 336 </div> 337 338 <h3>Portable OpenCL (pocl)</h3> 339 340 <div> 341 342 <p>In addition to producing an easily portable open source OpenCL 343 implementation, another major goal of <a href="http://pocl.sourceforge.net/"> 344 pocl</a> is improving performance portability of OpenCL programs with 345 compiler optimizations, reducing the need for target-dependent manual 346 optimizations. An important part of pocl is a set of LLVM passes used to 347 statically parallelize multiple work-items with the kernel compiler, even in 348 the presence of work-group barriers. This enables static parallelization of 349 the fine-grained static concurrency in the work groups in multiple ways 350 (SIMD, VLIW, superscalar,...).</p> 351 352 </div> 353 354 <h3>Pure</h3> 355 356 <div> 357 358 <p><a href="http://pure-lang.googlecode.com/">Pure</a> is an 359 algebraic/functional programming language based on term rewriting. Programs 360 are collections of equations which are used to evaluate expressions in a 361 symbolic fashion. The interpreter uses LLVM as a backend to JIT-compile Pure 362 programs to fast native code. Pure offers dynamic typing, eager and lazy 363 evaluation, lexical closures, a hygienic macro system (also based on term 364 rewriting), built-in list and matrix support (including list and matrix 365 comprehensions) and an easy-to-use interface to C and other programming 366 languages (including the ability to load LLVM bitcode modules, and inline C, 367 C++, Fortran and Faust code in Pure programs if the corresponding 368 LLVM-enabled compilers are installed).</p> 369 370 <p>Pure version 0.54 has been tested and is known to work with LLVM 3.1 (and 371 continues to work with older LLVM releases >= 2.5).</p> 372 373 </div> 374 375 <h3>TTA-based Co-design Environment (TCE)</h3> 376 377 <div> 378 379 <p><a href="http://tce.cs.tut.fi/">TCE</a> is a toolset for designing 380 application-specific processors (ASP) based on the Transport triggered 381 architecture (TTA). The toolset provides a complete co-design flow from C/C++ 382 programs down to synthesizable VHDL/Verilog and parallel program binaries. 383 Processor customization points include the register files, function units, 384 supported operations, and the interconnection network.</p> 385 386 <p>TCE uses Clang and LLVM for C/C++ language support, target independent 387 optimizations and also for parts of code generation. It generates new 388 LLVM-based code generators "on the fly" for the designed TTA processors and 389 loads them in to the compiler backend as runtime libraries to avoid 390 per-target recompilation of larger parts of the compiler chain.</p> 391 392 </div> 393 394 </div> 395 396 <!-- *********************************************************************** --> 397 <h2> 398 <a name="whatsnew">What's New in LLVM 3.2?</a> 399 </h2> 400 <!-- *********************************************************************** --> 401 402 <div> 403 404 <p>This release includes a huge number of bug fixes, performance tweaks and 405 minor improvements. Some of the major improvements and new features are 406 listed in this section.</p> 407 408 <!--=========================================================================--> 409 <h3> 410 <a name="majorfeatures">Major New Features</a> 411 </h3> 412 413 <div> 414 415 <!-- Features that need text if they're finished for 3.2: 416 ARM EHABI 417 combiner-aa? 418 strong phi elim 419 loop dependence analysis 420 CorrelatedValuePropagation 421 lib/Transforms/IPO/MergeFunctions.cpp => consider for 3.2. 422 Integrated assembler on by default for arm/thumb? 423 424 --> 425 426 <!-- Near dead: 427 Analysis/RegionInfo.h + Dom Frontiers 428 SparseBitVector: used in LiveVar. 429 llvm/lib/Archive - replace with lib object? 430 --> 431 432 <p>LLVM 3.2 includes several major changes and big features:</p> 433 434 <ul> 435 <li>...</li> 436 </ul> 437 438 </div> 439 440 441 <!--=========================================================================--> 442 <h3> 443 <a name="coreimprovements">LLVM IR and Core Improvements</a> 444 </h3> 445 446 <div> 447 448 <p>LLVM IR has several new features for better support of new targets and that 449 expose new optimization opportunities:</p> 450 451 <ul> 452 <li>Thread local variables may have a specified TLS model. See the 453 <a href="LangRef.html#globalvars">Language Reference Manual</a>.</li> 454 <li>...</li> 455 </ul> 456 457 </div> 458 459 <!--=========================================================================--> 460 <h3> 461 <a name="optimizer">Optimizer Improvements</a> 462 </h3> 463 464 <div> 465 466 <p>In addition to many minor performance tweaks and bug fixes, this release 467 includes a few major enhancements and additions to the optimizers:</p> 468 469 <ul> 470 <li>...</li> 471 </ul> 472 473 </div> 474 475 <!--=========================================================================--> 476 <h3> 477 <a name="mc">MC Level Improvements</a> 478 </h3> 479 480 <div> 481 482 <p>The LLVM Machine Code (aka MC) subsystem was created to solve a number of 483 problems in the realm of assembly, disassembly, object file format handling, 484 and a number of other related areas that CPU instruction-set level tools work 485 in. For more information, please see the 486 <a href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro 487 to the LLVM MC Project Blog Post</a>.</p> 488 489 <ul> 490 <li>...</li> 491 </ul> 492 493 </div> 494 495 <!--=========================================================================--> 496 <h3> 497 <a name="codegen">Target Independent Code Generator Improvements</a> 498 </h3> 499 500 <div> 501 502 <p>Stack Coloring - We have implemented a new optimization pass 503 to merge stack objects which are used in disjoin areas of the code. 504 This optimization reduces the required stack space significantly, in cases 505 where it is clear to the optimizer that the stack slot is not shared. 506 We use the lifetime markers to tell the codegen that a certain alloca 507 is used within a region.</p> 508 509 <p>We have put a significant amount of work into the code generator 510 infrastructure, which allows us to implement more aggressive algorithms and 511 make it run faster:</p> 512 513 <ul> 514 <li>...</li> 515 </ul> 516 517 <p> We added new TableGen infrastructure to support bundling for 518 Very Long Instruction Word (VLIW) architectures. TableGen can now 519 automatically generate a deterministic finite automaton from a VLIW 520 target's schedule description which can be queried to determine 521 legal groupings of instructions in a bundle.</p> 522 523 <p> We have added a new target independent VLIW packetizer based on the 524 DFA infrastructure to group machine instructions into bundles.</p> 525 526 </div> 527 528 <h4> 529 <a name="blockplacement">Basic Block Placement</a> 530 </h4> 531 532 <div> 533 534 <p>A probability based block placement and code layout algorithm was added to 535 LLVM's code generator. This layout pass supports probabilities derived from 536 static heuristics as well as source code annotations such as 537 <code>__builtin_expect</code>.</p> 538 539 </div> 540 541 <!--=========================================================================--> 542 <h3> 543 <a name="x86">X86-32 and X86-64 Target Improvements</a> 544 </h3> 545 546 <div> 547 548 <p>New features and major changes in the X86 target include:</p> 549 550 <ul> 551 <li>...</li> 552 </ul> 553 554 </div> 555 556 <!--=========================================================================--> 557 <h3> 558 <a name="ARM">ARM Target Improvements</a> 559 </h3> 560 561 <div> 562 563 <p>New features of the ARM target include:</p> 564 565 <ul> 566 <li>...</li> 567 </ul> 568 569 <!--_________________________________________________________________________--> 570 571 <h4> 572 <a name="armintegratedassembler">ARM Integrated Assembler</a> 573 </h4> 574 575 <div> 576 577 <p>The ARM target now includes a full featured macro assembler, including 578 direct-to-object module support for clang. The assembler is currently enabled 579 by default for Darwin only pending testing and any additional necessary 580 platform specific support for Linux.</p> 581 582 <p>Full support is included for Thumb1, Thumb2 and ARM modes, along with 583 subtarget and CPU specific extensions for VFP2, VFP3 and NEON.</p> 584 585 <p>The assembler is Unified Syntax only (see ARM Architecural Reference Manual 586 for details). While there is some, and growing, support for pre-unfied 587 (divided) syntax, there are still significant gaps in that support.</p> 588 589 </div> 590 591 </div> 592 593 <!--=========================================================================--> 594 <h3> 595 <a name="MIPS">MIPS Target Improvements</a> 596 </h3> 597 598 <div> 599 600 <p>New features and major changes in the MIPS target include:</p> 601 602 <ul> 603 <li>...</li> 604 </ul> 605 606 </div> 607 608 <!--=========================================================================--> 609 <h3> 610 <a name="OtherTS">Other Target Specific Improvements</a> 611 </h3> 612 613 <div> 614 615 <ul> 616 <li>...</li> 617 </ul> 618 619 </div> 620 621 <!--=========================================================================--> 622 <h3> 623 <a name="changes">Major Changes and Removed Features</a> 624 </h3> 625 626 <div> 627 628 <p>If you're already an LLVM user or developer with out-of-tree changes based on 629 LLVM 3.2, this section lists some "gotchas" that you may run into upgrading 630 from the previous release.</p> 631 632 <ul> 633 <li>...</li> 634 </ul> 635 636 </div> 637 638 <!--=========================================================================--> 639 <h3> 640 <a name="api_changes">Internal API Changes</a> 641 </h3> 642 643 <div> 644 645 <p>In addition, many APIs have changed in this release. Some of the major 646 LLVM API changes are:</p> 647 648 <ul> 649 <li>...</li> 650 </ul> 651 652 </div> 653 654 <!--=========================================================================--> 655 <h3> 656 <a name="tools_changes">Tools Changes</a> 657 </h3> 658 659 <div> 660 661 <p>In addition, some tools have changed in this release. Some of the changes 662 are:</p> 663 664 <ul> 665 <li>...</li> 666 </ul> 667 668 </div> 669 670 671 <!--=========================================================================--> 672 <h3> 673 <a name="python">Python Bindings</a> 674 </h3> 675 676 <div> 677 678 <p>Officially supported Python bindings have been added! Feature support is far 679 from complete. The current bindings support interfaces to:</p> 680 681 <ul> 682 <li>...</li> 683 </ul> 684 685 </div> 686 687 </div> 688 689 <!-- *********************************************************************** --> 690 <h2> 691 <a name="knownproblems">Known Problems</a> 692 </h2> 693 <!-- *********************************************************************** --> 694 695 <div> 696 697 <p>LLVM is generally a production quality compiler, and is used by a broad range 698 of applications and shipping in many products. That said, not every 699 subsystem is as mature as the aggregate, particularly the more obscure 700 targets. If you run into a problem, please check 701 the <a href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if 702 there isn't already one or ask on 703 the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev 704 list</a>.</p> 705 706 <p>Known problem areas include:</p> 707 708 <ul> 709 <li>The CellSPU, MSP430, PTX and XCore backends are experimental.</li> 710 711 <li>The integrated assembler, disassembler, and JIT is not supported by 712 several targets. If an integrated assembler is not supported, then a 713 system assembler is required. For more details, see the <a 714 href="CodeGenerator.html#targetfeatures">Target Features Matrix</a>. 715 </li> 716 </ul> 717 718 </div> 719 720 <!-- *********************************************************************** --> 721 <h2> 722 <a name="additionalinfo">Additional Information</a> 723 </h2> 724 <!-- *********************************************************************** --> 725 726 <div> 727 728 <p>A wide variety of additional information is available on 729 the <a href="http://llvm.org/">LLVM web page</a>, in particular in 730 the <a href="http://llvm.org/docs/">documentation</a> section. The web page 731 also contains versions of the API documentation which is up-to-date with the 732 Subversion version of the source code. You can access versions of these 733 documents specific to this release by going into the "<tt>llvm/doc/</tt>" 734 directory in the LLVM tree.</p> 735 736 <p>If you have any questions or comments about LLVM, please feel free to contact 737 us via the <a href="http://llvm.org/docs/#maillist"> mailing lists</a>.</p> 738 739 </div> 740 741 <!-- *********************************************************************** --> 742 743 <hr> 744 <address> 745 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img 746 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> 747 <a href="http://validator.w3.org/check/referer"><img 748 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> 749 750 <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br> 751 Last modified: $Date$ 752 </address> 753 754 </body> 755 </html> 756