X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=c3108007306eb60f6f59b868e86515e6af49b6a5;hb=1ad92131abbed3d2992d5996969274a8e1ae9a6b;hp=d119e5ae737556b16c6bf533c38f8fe66c7e09b1;hpb=7d5b621f77c2fe9fe82d195acd4bad6b4240ba5f;p=oota-llvm.git diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index d119e5ae737..c3108007306 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -44,21 +44,21 @@ Release Notes.

This document contains the release notes for the LLVM Compiler -Infrastructure, release 3.0. Here we describe the status of LLVM, including -major improvements from the previous release and significant known problems. -All LLVM releases may be downloaded from the LLVM releases web site.

+ Infrastructure, release 3.0. Here we describe the status of LLVM, including + major improvements from the previous release and significant known problems. + All LLVM releases may be downloaded from + the LLVM releases web site.

For more information about LLVM, including information about the latest -release, please check out the main LLVM -web site. If you have questions or comments, the LLVM Developer's -Mailing List is a good place to send them.

+ release, please check out the main LLVM web + site. If you have questions or comments, + the LLVM + Developer's Mailing List is a good place to send them.

-

Note that if you are reading this file from a Subversion checkout or the -main LLVM web page, this document applies to the next release, not the -current one. To see the release notes for a specific release, please see the -releases page.

+

Note that if you are reading this file from a Subversion checkout or the main + LLVM web page, this document applies to the next release, not the + current one. To see the release notes for a specific release, please see the + releases page.

@@ -78,13 +78,12 @@ current one. To see the release notes for a specific release, please see the
-

-The LLVM 3.0 distribution currently consists of code from the core LLVM -repository (which roughly includes the LLVM optimizers, code generators -and supporting tools), the Clang repository and the llvm-gcc repository. In -addition to this code, the LLVM Project includes other sub-projects that are in -development. Here we include updates on these subprojects. -

+ +

The LLVM 3.0 distribution currently consists of code from the core LLVM + repository (which roughly includes the LLVM optimizers, code generators and + supporting tools), the Clang repository and the llvm-gcc repository. In + addition to this code, the LLVM Project includes other sub-projects that are + in development. Here we include updates on these subprojects.

@@ -94,35 +93,47 @@ development. Here we include updates on these subprojects.

Clang is an LLVM front end for the C, -C++, and Objective-C languages. Clang aims to provide a better user experience -through expressive diagnostics, a high level of conformance to language -standards, fast compilation, and low memory use. Like LLVM, Clang provides a -modular, library-based architecture that makes it suitable for creating or -integrating with other development tools. Clang is considered a -production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86 -(32- and 64-bit), and for darwin/arm targets.

+ C++, and Objective-C languages. Clang aims to provide a better user + experience through expressive diagnostics, a high level of conformance to + language standards, fast compilation, and low memory use. Like LLVM, Clang + provides a modular, library-based architecture that makes it suitable for + creating or integrating with other development tools. Clang is considered a + production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86 + (32- and 64-bit), and for darwin/arm targets.

In the LLVM 3.0 time-frame, the Clang team has made many improvements:

    -
  • Greatly improved support for building C++ applications, with greater stability and better diagnostics.
  • +
  • Greatly improved support for building C++ applications, with greater + stability and better diagnostics.
  • -
  • Improved support for the C++ 2011 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.
  • - -
  • Implemented support for some features of the upcoming C1x standard, including static assertions and generic selections.
  • +
  • Improved support for + the C++ + 2011 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.
  • + +
  • Implemented support for some features of the upcoming C1x standard, + including static assertions and generic selections.
  • -
  • Better detection of include and linking paths for system headers and libraries, especially for Linux distributions.
  • +
  • Better detection of include and linking paths for system headers and + libraries, especially for Linux distributions.
  • -
  • Implemented support for Automatic Reference Counting for Objective-C.
  • +
  • Implemented support + for Automatic + Reference Counting for Objective-C.
  • -
  • Implemented a number of optimizations in libclang, the Clang C interface, to improve the performance of code completion and the mapping from source locations to abstract syntax tree nodes.
  • +
  • Implemented a number of optimizations in libclang, the Clang C + interface, to improve the performance of code completion and the mapping + from source locations to abstract syntax tree nodes.

If Clang rejects your code but another compiler accepts it, please take a -look at the language -compatibility guide to make sure this is not intentional or a known issue. -

+ look at the language + compatibility guide to make sure this is not intentional or a known + issue.

@@ -132,20 +143,30 @@ compatibility guide to make sure this is not intentional or a known issue.

-

-DragonEgg is a -gcc plugin that replaces GCC's -optimizers and code generators with LLVM's. -Currently it requires a patched version of gcc-4.5. -The plugin can target the x86-32 and x86-64 processor families and has been -used successfully on the Darwin, FreeBSD and Linux platforms. -The Ada, C, C++ and Fortran languages work well. -The plugin is capable of compiling plenty of Obj-C, Obj-C++ and Java but it is -not known whether the compiled code actually works or not! -

+

DragonEgg is a + gcc plugin that replaces GCC's + optimizers and code generators with LLVM's. It works with gcc-4.5 or gcc-4.6, + targets the x86-32 and x86-64 processor families, and has been successfully + used on the Darwin, FreeBSD, KFreeBSD, Linux and OpenBSD platforms. It fully + supports Ada, C, C++ and Fortran. It has partial support for Go, Java, Obj-C + and Obj-C++.

+ +

The 3.0 release has the following notable changes:

+ +
  • GCC version 4.6 is now fully supported.
  • + +
  • Patching and building GCC is no longer required: the plugin should work + with your system GCC (version 4.5 or 4.6; on Debian/Ubuntu systems the + gcc-4.5-plugin-dev or gcc-4.6-plugin-dev package is also needed).
  • + +
  • The -fplugin-arg-dragonegg-enable-gcc-optzns option, which runs + GCC's optimizers as well as LLVM's, now works much better. This is the + option to use if you want ultimate performance! It not yet completely + stable: it may cause the plugin to crash.
  • + +
  • The type and constant conversion logic has been almost entirely rewritten, + fixing a multitude of obscure bugs.
  • -

    -The 3.0 release has the following notable changes:

    + +

    Renderscript

    + +
    + +

    Renderscript + is Android's advanced 3D graphics rendering and compute API. It provides a + portable C99-based language with extensions to facilitate common use cases + for enhancing graphics and thread level parallelism. The Renderscript + compiler frontend is based on Clang/LLVM. It emits a portable bitcode format + for the actual compiled script code, as well as reflects a Java interface for + developers to control the execution of the compiled bitcode. Executable + machine code is then generated from this bitcode by an LLVM backend on the + device. Renderscript is thus able to provide a mechanism by which Android + developers can improve performance of their applications while retaining + portability.

    + +
    +

    SAFECode

    @@ -371,6 +557,17 @@ object-oriented programming, operator overloading and strong typing.

    + +

    The Stupid D Compiler (SDC)

    + +
    + +

    The Stupid D Compiler is a + project seeking to write a self-hosting compiler for the D programming + language without using the frontend of the reference compiler (DMD).

    + +
    +

    TTA-based Co-design Environment (TCE)

    @@ -381,14 +578,14 @@ object-oriented programming, operator overloading and strong typing.

    co-design flow from C/C++ programs down to synthesizable VHDL and parallel program binaries. Processor customization points include the register files, function units, supported operations, and the interconnection network.

    - +

    TCE uses Clang and LLVM for C/C++ language support, target independent optimizations and also for parts of code generation. It generates new - LLVM-based code generators on the fly for the designed TTA processors - and loads them in to the compiler backend as runtime libraries to avoid + LLVM-based code generators "on the fly" for the designed TTA processors and + loads them in to the compiler backend as runtime libraries to avoid per-target recompilation of larger parts of the compiler chain.

    - +

    Tart Programming Language

    @@ -411,6 +608,38 @@ object-oriented programming, operator overloading and strong typing.

    + +

    ThreadSanitizer

    + +
    + +

    ThreadSanitizer is a + data race detector for (mostly) C and C++ code, available for Linux, Mac OS + and Windows. On different systems, we use binary instrumentation frameworks + (Valgrind and Pin) as frontends that generate the program events for the race + detection algorithm. On Linux, there's an option of using LLVM-based + compile-time instrumentation.

    + +
    + + +

    The ZooLib C++ Cross-Platform Application Framework

    + +
    + +

    ZooLib is Open Source under the MIT + License. It provides GUI, filesystem access, TCP networking, thread-safe + memory management, threading and locking for Mac OS X, Classic Mac OS, + Microsoft Windows, POSIX operating systems with X11, BeOS, Haiku, Apple's iOS + and Research in Motion's BlackBerry.

    + +

    My current work is to use CLang's static analyzer to improve ZooLib's code + quality. I also plan to set up LLVM compiles of the demo programs and test + programs using CLang and LLVM on all the platforms that CLang, LLVM and + ZooLib all support.

    + +
    + - - -

    @@ -550,15 +762,144 @@ in this section.

    +

    LLVM IR has several new features for better support of new targets and that -expose new optimization opportunities:

    + expose new optimization opportunities:

    + +

    One of the biggest changes is that 3.0 has a new exception handling + system. The old system used LLVM intrinsics to convey the exception handling + information to the code generator. It worked in most cases, but not + all. Inlining was especially difficult to get right. Also, the intrinsics + could be moved away from the invoke instruction, making it hard + to recover that information.

    + +

    The new EH system makes exception handling a first-class member of the IR. It + adds two new instructions:

    +

    Converting from the old EH API to the new EH API is rather simple, because a + lot of complexity has been removed. The two intrinsics, + @llvm.eh.exception and @llvm.eh.selector have been + superceded by the landingpad instruction. Instead of generating + a call to @llvm.eh.exception and @llvm.eh.selector: + +

    +
    +Function *ExcIntr = Intrinsic::getDeclaration(TheModule,
    +                                              Intrinsic::eh_exception);
    +Function *SlctrIntr = Intrinsic::getDeclaration(TheModule,
    +                                                Intrinsic::eh_selector);
    +
    +// The exception pointer.
    +Value *ExnPtr = Builder.CreateCall(ExcIntr, "exc_ptr");
    +
    +std::vector<Value*> Args;
    +Args.push_back(ExnPtr);
    +Args.push_back(Builder.CreateBitCast(Personality,
    +                                     Type::getInt8PtrTy(Context)));
    +
    +// Add selector clauses to Args.
    +
    +// The selector call.
    +Builder.CreateCall(SlctrIntr, Args, "exc_sel");
    +
    +
    + +

    You should instead generate a landingpad instruction, that + returns an exception object and selector value:

    + +
    +
    +LandingPadInst *LPadInst =
    +  Builder.CreateLandingPad(StructType::get(Int8PtrTy, Int32Ty, NULL),
    +                           Personality, 0);
    +
    +Value *LPadExn = Builder.CreateExtractValue(LPadInst, 0);
    +Builder.CreateStore(LPadExn, getExceptionSlot());
    +
    +Value *LPadSel = Builder.CreateExtractValue(LPadInst, 1);
    +Builder.CreateStore(LPadSel, getEHSelectorSlot());
    +
    +
    + +

    It's now trivial to add the individual clauses to the landingpad + instruction.

    + +
    +
    +// Adding a catch clause
    +Constant *TypeInfo = getTypeInfo();
    +LPadInst->addClause(TypeInfo);
    +
    +// Adding a C++ catch-all
    +LPadInst->addClause(Constant::getNullValue(Builder.getInt8PtrTy()));
    +
    +// Adding a cleanup
    +LPadInst->setCleanup(true);
    +
    +// Adding a filter clause
    +std::vector<Constant*> TypeInfos;
    +Constant *TypeInfo = getFilterTypeInfo();
    +TypeInfos.push_back(Builder.CreateBitCast(TypeInfo, Builder.getInt8PtrTy()));
    +
    +ArrayType *FilterTy = ArrayType::get(Int8PtrTy, TypeInfos.size());
    +LPadInst->addClause(ConstantArray::get(FilterTy, TypeInfos));
    +
    +
    + +

    Converting from using the @llvm.eh.resume intrinsic to + the resume instruction is trivial. It takes the exception + pointer and exception selector values returned by + the landingpad instruction:

    + +
    +
    +Type *UnwindDataTy = StructType::get(Builder.getInt8PtrTy(),
    +                                     Builder.getInt32Ty(), NULL);
    +Value *UnwindData = UndefValue::get(UnwindDataTy);
    +Value *ExcPtr = Builder.CreateLoad(getExceptionObjSlot());
    +Value *ExcSel = Builder.CreateLoad(getExceptionSelSlot());
    +UnwindData = Builder.CreateInsertValue(UnwindData, ExcPtr, 0, "exc_ptr");
    +UnwindData = Builder.CreateInsertValue(UnwindData, ExcSel, 1, "exc_sel");
    +Builder.CreateResume(UnwindData);
    +
    +
    + +
    + + +

    +Loop Optimization Improvements +

    + +
    +

    The induction variable simplification pass in 3.0 only modifies + induction variables when profitable. Sign and zero extension + elimination, linear function test replacement, loop unrolling, and + other simplifications that require induction variable analysis have + been generalized so they no longer require loops to be rewritten in a + typically suboptimal form prior to optimization. This new design + preserves more IR level information, avoids undoing earlier loop + optimizations (particularly hand-optimized loops), and no longer + strongly depends on the code generator rewriting loops a second time + in a now optimal form--an intractable problem.

    + +

    The original behavior can be restored with -mllvm -enable-iv-rewrite; + however, support for this mode will be short lived. As such, bug + reports should be filed for any significant performance regressions + when moving from -mllvm -enable-iv-rewrite to the 3.0 default mode.

    @@ -569,7 +910,8 @@ expose new optimization opportunities:

    In addition to a large array of minor performance tweaks and bug fixes, this -release includes a few major enhancements and additions to the optimizers:

    + release includes a few major enhancements and additions to the + optimizers:

    -

    For more information, please see the Intro to the -LLVM MC Project Blog Post. -

    +

    For more information, please see + the Intro + to the LLVM MC Project Blog Post.

    @@ -614,8 +955,8 @@ LLVM MC Project Blog Post.

    We have put a significant amount of work into the code generator -infrastructure, which allows us to implement more aggressive algorithms and make -it run faster:

    + infrastructure, which allows us to implement more aggressive algorithms and + make it run faster:

    +
    @@ -694,14 +1042,19 @@ it run faster:

    "load volatile"/"store volatile". The old syntax ("volatile load"/"volatile store") is still accepted, but is now considered deprecated. +
  • The old atomic intrinscs (llvm.memory.barrier and + llvm.atomic.*) are now gone. Please use the new atomic + instructions, described in the atomics guide.

    Windows (32-bit)

    + +
    @@ -717,24 +1070,25 @@ it run faster:

    LLVM API changes are:

    + @@ -827,10 +1182,10 @@ merged with other structures, even if their layout is identical.
    -

    This section contains significant known problems with the LLVM system, -listed by component. If you run into a problem, please check the LLVM bug database and submit a bug if -there isn't already one.

    +

    This section contains significant known problems with the LLVM system, listed + by component. If you run into a problem, please check + the LLVM bug database and submit a bug if + there isn't already one.

    @@ -840,18 +1195,19 @@ there isn't already one.

    The following components of this LLVM release are either untested, known to -be broken or unreliable, or are in early development. These components should -not be relied on, and bugs should not be filed against them, but they may be -useful to some people. In particular, if you would like to work on one of these -components, please contact us on the LLVMdev list.

    + be broken or unreliable, or are in early development. These components + should not be relied on, and bugs should not be filed against them, but they + may be useful to some people. In particular, if you would like to work on + one of these components, please contact us on + the LLVMdev + list.

      -
    • The Alpha, CellSPU, MicroBlaze, MSP430, MIPS, PTX, - and XCore backends are experimental.
    • -
    • llc "-filetype=obj" is experimental on all targets - other than darwin and ELF X86 systems.
    • - +
    • The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ and + XCore backends are experimental.
    • + +
    • llc "-filetype=obj" is experimental on all targets other + than darwin and ELF X86 systems.
    @@ -865,23 +1221,28 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list.

    • The X86 backend does not yet support - all inline assembly that uses the X86 - floating point stack. It supports the 'f' and 't' constraints, but not - 'u'.
    • + all inline assembly that uses the X86 + floating point stack. It supports the 'f' and 't' constraints, but + not 'u'. +
    • The X86-64 backend does not yet support the LLVM IR instruction - va_arg. Currently, front-ends support variadic - argument constructs on X86-64 by lowering them manually.
    • + va_arg. Currently, front-ends support variadic argument + constructs on X86-64 by lowering them manually. +
    • Windows x64 (aka Win64) code generator has a few issues.
        -
      • llvm-gcc cannot build the mingw-w64 runtime currently - due to lack of support for the 'u' inline assembly - constraint and for X87 floating point inline assembly.
      • -
      • On mingw-w64, you will see unresolved symbol __chkstk - due to Bug 8919. - It is fixed in r128206.
      • +
      • llvm-gcc cannot build the mingw-w64 runtime currently due to lack of + support for the 'u' inline assembly constraint and for X87 floating + point inline assembly.
      • + +
      • On mingw-w64, you will see unresolved symbol __chkstk due + to Bug 8919. + It is fixed + in r128206.
      • +
      • Miss-aligned MOVDQA might crash your program. It is due to - Bug 9483, - lack of handling aligned internal globals.
      • + Bug 9483, lack + of handling aligned internal globals.
    • @@ -897,8 +1258,7 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list.

        -
      • The Linux PPC32/ABI support needs testing for the interpreter and static -compilation, and lacks support for debug information.
      • +
      • The PPC32/ELF support lacks PIC support.
      @@ -911,11 +1271,12 @@ compilation, and lacks support for debug information.
        -
      • Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6 -processors, thumb programs can crash or produce wrong -results (PR1388).
      • -
      • Compilation for ARM Linux OABI (old ABI) is supported but not fully tested. -
      • +
      • Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6 + processors, thumb programs can crash or produce wrong results + (PR1388).
      • + +
      • Compilation for ARM Linux OABI (old ABI) is supported but not fully + tested.
      @@ -928,8 +1289,8 @@ results (PR1388).
        -
      • The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not - support the 64-bit SPARC ABI (-m64).
      • +
      • The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not + support the 64-bit SPARC ABI (-m64).
      @@ -942,7 +1303,7 @@ results (PR1388).
        -
      • 64-bit MIPS targets are not supported yet.
      • +
      • 64-bit MIPS targets are not supported yet.
      @@ -955,11 +1316,10 @@ results (PR1388).
        - -
      • On 21164s, some rare FP arithmetic sequences which may trap do not have the -appropriate nops inserted to ensure restartability.
      • - +
      • On 21164s, some rare FP arithmetic sequences which may trap do not have + the appropriate nops inserted to ensure restartability.
      +
      @@ -970,16 +1330,19 @@ appropriate nops inserted to ensure restartability.

      The C backend has numerous problems and is not being actively maintained. -Depending on it for anything serious is not advised.

      + Depending on it for anything serious is not advised.

      @@ -992,7 +1355,7 @@ Depending on it for anything serious is not advised.

      -

      LLVM 3.0 will be the last release of llvm-gcc.

      +

      LLVM 2.9 was the last release of llvm-gcc.

      llvm-gcc is generally very stable for the C family of languages. The only major language feature of GCC not supported by llvm-gcc is the @@ -1009,8 +1372,9 @@ Depending on it for anything serious is not advised.

      dragonegg instead.

      The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being -actively maintained. If you are interested in Ada, we recommend that you -consider using dragonegg instead.

      + actively maintained. If you are interested in Ada, we recommend that you + consider using dragonegg instead.

      +

    @@ -1023,17 +1387,16 @@ consider using dragonegg instead.

    -

    A wide variety of additional information is available on the LLVM web page, in particular in the documentation section. The web page also -contains versions of the API documentation which is up-to-date with the -Subversion version of the source code. -You can access versions of these documents specific to this release by going -into the "llvm/doc/" directory in the LLVM tree.

    +

    A wide variety of additional information is available on + the LLVM web page, in particular in + the documentation section. The web page + also contains versions of the API documentation which is up-to-date with the + Subversion version of the source code. You can access versions of these + documents specific to this release by going into the "llvm/doc/" + directory in the LLVM tree.

    If you have any questions or comments about LLVM, please feel free to contact -us via the mailing -lists.

    + us via the mailing lists.