<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="stylesheet" href="llvm.css" type="text/css">
  <title>LLVM 2.0 Release Notes</title>
</head>
<body>

<div class="doc_title">LLVM 2.0 Release Notes</div>
 
<ol>
  <li><a href="#intro">Introduction</a></li>
  <li><a href="#whatsnew">What's New?</a></li>
  <li><a href="GettingStarted.html">Installation Instructions</a></li>
  <li><a href="#portability">Portability and Supported Platforms</a></li>
  <li><a href="#knownproblems">Known Problems</a>
  <li><a href="#additionalinfo">Additional Information</a></li>
</ol>

<div class="doc_author">
  <p>Written by the <a href="http://llvm.org">LLVM Team</a><p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="intro">Introduction</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This document contains the release notes for the LLVM compiler
infrastructure, release 2.0.  Here we describe the status of LLVM, including
major improvements from the previous release and any known problems.  All LLVM
releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM
releases web site</a>.</p>

<p>For more information about LLVM, including information about the latest
release, please check out the <a href="http://llvm.org/">main LLVM
web site</a>.  If you have questions or comments, the <a
href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
list</a> is a good place to send them.</p>

<p>Note that if you are reading this file from CVS or the main LLVM web page,
this document applies to the <i>next</i> release, not the current one.  To see
the release notes for the current or previous releases, see the <a
href="http://llvm.org/releases/">releases page</a>.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="whatsnew">What's New?</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This is the eleventh public release of the LLVM Compiler Infrastructure. 
Being the first major release since 1.0, this release is different in several
ways from our previous releases:</p>

<ol>
<li>We took this as an opportunity to
break backwards compatibility with the LLVM 1.x bytecode and .ll file format.
If you have LLVM 1.9 .ll files that you would like to upgrade to LLVM 2.x, we 
recommend the use of the stand alone <a href="#llvm-upgrade">llvm-upgrade</a>
tool (which is included with 2.0).  We intend to keep compatibility with .ll 
and .bc formats within the 2.x release series, like we did within the 1.x 
series.</li>
<li>There are several significant change to the LLVM IR and internal APIs, such
    as a major overhaul of the type system, the completely new bitcode file
    format, etc (described below).</li>
<li>We designed the release around a 6 month release cycle instead of the usual
    3-month cycle.  This gave us extra time to develop and test some of the
    more invasive features in this release.</li>
<li>LLVM 2.0 no longer supports the llvm-gcc3 front-end.  Users are required to
    upgrade to llvm-gcc4.  llvm-gcc4 includes many features over
    llvm-gcc3, is faster, and is <a href="CFEBuildInstrs.html">much easier to
    build from source</a>.</li>
</ol>

<p>Note that while this is a major version bump, this release has been
   extensively tested on a wide range of software.  It is easy to say that this
   is our best release yet, in terms of both features and correctness.  This is
   the first LLVM release to correctly compile and optimize major software like
   LLVM itself, Mozilla/Seamonkey, Qt 4.3rc1, kOffice, etc out of the box on
   linux/x86.
   </p>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="newfeatures">New Features in LLVM 2.0</a>
</div>

<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="majorchanges">Major Changes</a></div>
<div class="doc_text">

<p>Changes to the LLVM IR itself:</p>

<ul>

<li>Integer types are now completely signless. This means that we
    have types like i8/i16/i32 instead of ubyte/sbyte/short/ushort/int
    etc. LLVM operations that depend on sign have been split up into 
    separate instructions (<a href="http://llvm.org/PR950">PR950</a>).  This
    eliminates cast instructions that just change the sign of the operands (e.g.
    int -> uint), which reduces the size of the IR and makes optimizers
    simpler to write.</li>

<li>Integer types with arbitrary bitwidths (e.g. i13, i36, i42, i1057, etc) are
    now supported in the LLVM IR and optimizations (<a 
    href="http://llvm.org/PR1043">PR1043</a>).  However, neither llvm-gcc
    (<a href="http://llvm.org/PR1284">PR1284</a>) nor the native code generators
    (<a href="http://llvm.org/PR1270">PR1270</a>) support non-standard width
    integers yet.</li>

<li>'Type planes' have been removed (<a href="http://llvm.org/PR411">PR411</a>).
    It is no longer possible to have two values with the same name in the 
    same symbol table.  This simplifies LLVM internals, allowing significant 
    speedups.</li>

<li>Global variables and functions in .ll files are now prefixed with
    @ instead of % (<a href="http://llvm.org/PR645">PR645</a>).</li>

<li>The LLVM 1.x "bytecode" format has been replaced with a  
    completely new binary representation, named 'bitcode'. The <a
    href="BitCodeFormat.html">Bitcode Format</a> brings a
    number of advantages to the LLVM over the old bytecode format: it is denser  
    (files are smaller), more extensible, requires less memory to read,  
    is easier to keep backwards compatible (so LLVM 2.5 will read 2.0 .bc  
    files), and has many other nice features.</li>

<li>Load and store instructions now track the alignment of their pointer
    (<a href="http://www.llvm.org/PR400">PR400</a>).  This allows the IR to
    express loads that are not sufficiently aligned (e.g. due to '<tt>#pragma
    packed</tt>') or to capture extra alignment information.</li>
</ul>

<p>Major new features:</p>

<ul>

<li>A number of ELF features are now supported by LLVM, including 'visibility',
    extern weak linkage, Thread Local Storage (TLS) with the <tt>__thread</tt>
    keyword, and symbol aliases.
    Among other things, this means that many of the special options needed to
    configure llvm-gcc on linux are no longer needed, and special hacks to build
    large C++ libraries like Qt are not needed.</li>

<li>LLVM now has a new MSIL backend. <tt>llc -march=msil</tt> will now turn LLVM
    into MSIL (".net") bytecode.  This is still fairly early development 
    with a number of limitations.</li>

<li>A new <a href="CommandGuide/html/llvm-upgrade.html">llvm-upgrade</a> tool 
    exists to migrates LLVM 1.9 .ll files to LLVM 2.0 syntax.</li>
</ul>

</div>


<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="llvmgccfeatures">llvm-gcc
Improvements</a></div>
<div class="doc_text">
<p>New features include:
</p>

<ul>
<li>Precompiled Headers (PCH) are now supported.</li>

<li>"<tt>#pragma packed</tt>" is now supported, as are the various features
    described above (visibility, extern weak linkage, __thread, aliases,
    etc).</li>

<li>Tracking function parameter/result attributes is now possible.</li>

<li>Many internal enhancements have been added, such as improvements to
    NON_LVALUE_EXPR, arrays with non-zero base, structs with variable sized
    fields, VIEW_CONVERT_EXPR, CEIL_DIV_EXPR, nested functions, and many other
    things.  This is primarily to supports non-C GCC front-ends, like Ada.</li>

<li>It is simpler to configure llvm-gcc for linux.</li>

</ul>
  
</div>

<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="optimizer">Optimizer
Improvements</a></div>

<div class="doc_text">
<p>New features include:
</p>

<ul>
<li>The <a href="WritingAnLLVMPass.html">pass manager</a> has been entirely
    rewritten, making it significantly smaller, simpler, and more extensible.
    Support has been added to run <tt>FunctionPass</tt>es interlaced with
    <tt>CallGraphSCCPass</tt>es, we now support loop transformations
    explicitly with <tt>LoopPass</tt>, and <tt>ModulePass</tt>es may now use the
    result of <tt>FunctionPass</tt>es.</li>

<li>LLVM 2.0 includes a new loop rotation pass, which converts "for loops" into 
    "do/while loops", where the condition is at the bottom of the loop.</li>

<li>The Loop Strength Reduction pass has been improved, and we now support
    sinking expressions across blocks to reduce register pressure.</li>

<li>The <tt>-scalarrepl</tt> pass can now promote unions containing FP values
    into a register, it can also handle unions of vectors of the same
    size.</li>

<li>The [Post]DominatorSet classes have been removed from LLVM and clients
    switched to use the more-efficient ETForest class instead.</li>

<li>The ImmediateDominator class has also been removed, and clients have been
    switched to use DominatorTree instead.</li>

<li>The predicate simplifier pass has been improved, making it able to do 
    simple value range propagation and eliminate more conditionals.  However,
    note that predsimplify is not enabled by default in llvm-gcc.</li>

</ul>
  
</div>

<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="codegen">Code
Generator Enhancements</a></div>

<div class="doc_text">
<p>
New features include:
</p>

<ul>

<li>LLVM now supports software floating point, which allows LLVM to target
    chips that don't have hardware FPUs (e.g. ARM thumb mode).</li>

<li>A new register scavenger has been implemented, which is useful for
    finding free registers after register allocation.  This is useful when
    rewriting frame references on RISC targets, for example.</li>

<li>Heuristics have been added to avoid coalescing vregs with very large live 
    ranges to physregs.  This was bad because it effectively pinned the physical
    register for the entire lifetime of the virtual register (<a 
    href="http://llvm.org/PR711">PR711</a>).</li>

<li>Support now exists for very simple (but still very useful) 
    rematerialization the register allocator, enough to move  
    instructions like "load immediate" and constant pool loads.</li>

<li>Switch statement lowering is significantly better, improving codegen for 
    sparse switches that have dense subregions, and implemented support 
    for the shift/and trick.</li>

<li>LLVM now supports tracking physreg sub-registers and super-registers 
    in the code generator, and includes extensive register
    allocator changes to track them.</li>

<li>There is initial support for virtreg sub-registers 
    (<a href="http://llvm.org/PR1350">PR1350</a>).</li>

</ul>

<p>
Other improvements include:
</p>

<ul>

<li>Inline assembly support is much more solid that before.
    The two primary features still missing are support for 80-bit floating point
    stack registers on X86 (<a href="http://llvm.org/PR879">PR879</a>), and
    support for inline asm in the C backend (<a 
    href="http://llvm.org/PR802">PR802</a>).</li>

<li>DWARF debug information generation has been improved.  LLVM now passes 
    most of the GDB testsuite on MacOS and debug info is more dense.</li>

<li>Codegen support for Zero-cost DWARF exception handling has been added (<a 
    href="http://llvm.org/PR592">PR592</a>).  It is mostly
    complete and just in need of continued bug fixes and optimizations at 
    this point.  However, support in llvm-g++ is disabled with an
    #ifdef for the 2.0 release  (<a 
    href="http://llvm.org/PR870">PR870</a>).</li>

<li>The code generator now has more accurate and general hooks for  
    describing addressing modes ("isLegalAddressingMode") to  
    optimizations like loop strength reduction and code sinking.</li>

<li>Progress has been made on a direct Mach-o .o file writer. Many small 
    apps work, but it is still not quite complete.</li>

</ul>

<p>In addition, the LLVM target description format has itself been extended in
 several ways:</p>
 
<ul>
<li>TargetData now supports better target parameterization in
    the .ll/.bc files, eliminating the 'pointersize/endianness' attributes
    in the files (<a href="http://llvm.org/PR761">PR761</a>).</li>

<li>TargetData was generalized for finer grained alignment handling,
    handling of vector alignment, and handling of preferred alignment</li>

<li>LLVM now supports describing target calling conventions  
    explicitly in .td files, reducing the amount of C++ code that needs  
    to be written for a port.</li>

</ul>

</div>

<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="specifictargets">Target-Specific
Improvements</a></div>

<div class="doc_text">

<p>X86-specific Code Generator Enhancements:
</p>

<ul>
<li>The MMX instruction set is now supported through intrinsics.</li>
<li>The scheduler was improved to better reduce register pressure on  
    X86 and other targets that are register pressure sensitive.</li>
<li>Linux/x86-64 support is much better.</li>
<li>PIC support for linux/x86 has been added.</li>
<li>The X86 backend now supports the GCC regparm attribute.</li>
<li>LLVM now supports inline asm with multiple constraint letters per operand 
    (like "mri") which is common in X86 inline asms.</li>
</ul>

<p>ARM-specific Code Generator Enhancements:</p>

<ul>
<li>The ARM code generator is now stable and fully supported.</li>

<li>There are major new features, including support for ARM 
    v4-v6 chips, vfp support, soft float point support, pre/postinc support,
    load/store multiple generation, constant pool entry motion (to support
    large functions), inline asm support, weak linkage support, static
    ctor/dtor support and many bug fixes.</li>
    
<li>Added support for Thumb code generation (<tt>llc -march=thumb</tt>).</li>

<li>The ARM backend now supports the ARM AAPCS/EABI ABI and PIC codegen on 
    arm/linux.</li>

<li>Several bugs were fixed for DWARF debug info generation on arm/linux.</li>

</ul>

<p>PowerPC-specific Code Generator Enhancements:</p>

<ul>
<li>The PowerPC 64 JIT now supports addressing code loaded above the 2G
     boundary.</li>

<li>Improved support for the Linux/ppc ABI and the linux/ppc JIT is fully 
    functional now.  llvm-gcc and static compilation are not fully supported 
    yet though.</li>

<li>Many PowerPC 64 bug fixes.</li>

</ul>

</div>


<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="other">Other Improvements</a></div>
<div class="doc_text">

<p>More specific changes include:</p>

<ul>
<li>LLVM no longer relies on static destructors to shut itself down.  Instead,
    it lazily initializes itself and shuts down when <tt>llvm_shutdown()</tt> is 
    explicitly called.</li>

<li>LLVM now has significantly fewer static constructors, reducing startup time.
    </li>

<li>Several classes have been refactored to reduce the amount of code that
    gets linked into apps that use the JIT.</li>

<li>Construction of intrinsic function declarations has been simplified.</li>

<li>The gccas/gccld tools have been replaced with small shell scripts.</li>

<li>Support has been added to llvm-test for running on low-memory  
    or slow machines (make SMALL_PROBLEM_SIZE=1).</li>

</ul>
</div>

<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="apichanges">API Changes</a></div>
<div class="doc_text">

<p>LLVM 2.0 contains a revamp of the type system and several other significant
internal changes.  If you are programming to the C++ API, be aware of the
following major changes:</p>

<ul>
<li>Pass registration is slightly different in LLVM 2.0 (you now need an
   <tt>intptr_t</tt> in your constructor), as explained in the <a 
   href="WritingAnLLVMPass.html#basiccode">Writing an LLVM Pass</a>
   document.</li>
   
<li><tt>ConstantBool</tt>, <tt>ConstantIntegral</tt> and <tt>ConstantInt</tt>
    classes have been merged together, we now just have
    <tt>ConstantInt</tt>.</li>

<li><tt>Type::IntTy</tt>, <tt>Type::UIntTy</tt>, <tt>Type::SByteTy</tt>, ... are
    replaced by <tt>Type::Int8Ty</tt>, <tt>Type::Int16Ty</tt>, etc.  LLVM types
    have always corresponded to fixed size types
    (e.g. long was always 64-bits), but the type system no longer includes
    information about the sign of the type.  Also, the
    <tt>Type::isPrimitiveType()</tt> method now returns false for integers.</li>

<li>Several classes (<tt>CallInst</tt>, <tt>GetElementPtrInst</tt>,
    <tt>ConstantArray</tt>, etc), that once took <tt>std::vector</tt> as
     arguments now take ranges instead.   For example, you can create a
    <tt>GetElementPtrInst</tt> with code like:
    
    <pre>
      Value *Ops[] = { Op1, Op2, Op3 };
      GEP = new GetElementPtrInst(BasePtr, Ops, 3);
    </pre>
    
    This avoids creation of a temporary vector (and a call to malloc/free).  If
    you have an <tt>std::vector</tt>, use code like this:
    <pre>
      std::vector&lt;Value*&gt; Ops = ...;
      GEP = new GetElementPtrInst(BasePtr, &amp;Ops[0], Ops.size());
    </pre>

    </li>
    
<li><tt>CastInst</tt> is now abstract and its functionality is split into
    several parts, one for each of the <a href="LangRef.html#convertops">new
    cast instructions</a>.</li>

<li><tt>Instruction::getNext()/getPrev()</tt> are now private (along with
    <tt>BasicBlock::getNext</tt>, etc), for efficiency reasons (they are now no
    longer just simple pointers).  Please use <tt>BasicBlock::iterator</tt>, etc
    instead.
</li>

<li><tt>Module::getNamedFunction()</tt> is now called
    <tt>Module::getFunction()</tt>.</li>

<li><tt>SymbolTable.h</tt> has been split into <tt>ValueSymbolTable.h</tt> and 
<tt>TypeSymbolTable.h</tt>.</li>
</ul>
</div>


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="portability">Portability and Supported Platforms</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>LLVM is known to work on the following platforms:</p>

<ul>
<li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD 
      (and probably other unix-like systems).</li>
<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
    64-bit modes.</li>
<li>Intel and AMD machines running on Win32 using MinGW libraries (native)</li>
<li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
    support is available for native builds with Visual C++).</li>
<li>Sun UltraSPARC workstations running Solaris 8.</li>
<li>Alpha-based machines running Debian GNU/Linux.</li>
<li>Itanium-based machines running Linux and HP-UX.</li>
</ul>

<p>The core LLVM infrastructure uses
<a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
to the machine and operating system on which it is built.  However, minor
porting may be required to get LLVM to work on new platforms.  We welcome your
portability patches and reports of successful builds or error messages.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="knownproblems">Known Problems</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This section contains all known problems with the LLVM system, listed by
component.  As new problems are discovered, they will be added to these
sections.  If you run into a problem, please check the <a
href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
there isn't already one.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="experimental">Experimental features included with this release</a>
</div>

<div class="doc_text">

<p>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 <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>

<ul>
<li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in in a 
    future release.</li>
<li>C++ EH support is disabled for this release.</li>
<li>The MSIL backend is experimental.</li>
<li>The IA64 code generator is experimental.</li>
<li>The Alpha JIT is experimental.</li>
<li>"<tt>-filetype=asm</tt>" (the default) is the only supported value for the 
    <tt>-filetype</tt> llc option.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="x86-be">Known problems with the X86 back-end</a>
</div>

<div class="doc_text">

<ul>
<li>The X86 backend does not yet support <a href="http://llvm.org/PR879">inline
    assembly that uses the X86 floating point stack</a>.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ppc-be">Known problems with the PowerPC back-end</a>
</div>

<div class="doc_text">

<ul>
<li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
implement ordered FP comparisons</a>.</li>
<li>The Linux PPC32/ABI support needs testing for the interpreter and static
compilation, and lacks support for debug information.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arm-be">Known problems with the ARM back-end</a>
</div>

<div class="doc_text">

<ul>
<li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
processors, thumb program can crash or produces wrong
results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
<li>Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested.
</li>
<li>There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute
programs compiled with LLVM.  Please use more recent versions of QEMU.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="sparc-be">Known problems with the SPARC back-end</a>
</div>

<div class="doc_text">

<ul>
<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
    support the 64-bit SPARC ABI (-m64).</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="alpha-be">Known problems with the Alpha back-end</a>
</div>

<div class="doc_text">

<ul>

<li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
appropriate nops inserted to ensure restartability.</li>

</ul>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ia64-be">Known problems with the IA64 back-end</a>
</div>

<div class="doc_text">

<ul>

<li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
made where the argument is not 16-byte aligned, as required on IA64. (Strictly
speaking this is not a bug in the IA64 back-end; it will also be encountered
when building C++ programs using the C back-end.)</li>

<li>The C++ front-end does not use <a href="http://llvm.org/PR406">IA64
ABI compliant layout of v-tables</a>.  In particular, it just stores function
pointers instead of function descriptors in the vtable.  This bug prevents
mixing C++ code compiled with LLVM with C++ objects compiled by other C++
compilers.</li>

<li>There are a few ABI violations which will lead to problems when mixing LLVM
output with code built with other compilers, particularly for floating-point
programs.</li>

<li>Defining vararg functions is not supported (but calling them is ok).</li>

<li>The Itanium backend has bitrotted somewhat.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="c-be">Known problems with the C back-end</a>
</div>

<div class="doc_text">

<ul>
<li><a href="http://llvm.org/PR802">The C backend does not support inline
    assembly code</a>.</li>
</ul>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="c-fe">Known problems with the C front-end</a>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">Bugs</div>

<div class="doc_text">

<p>llvm-gcc4 does not currently support <a href="http://llvm.org/PR869">Link-Time 
Optimization</a> on most platforms "out-of-the-box".  Please inquire on the 
llvmdev mailing list if you are interested.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  Notes
</div>

<div class="doc_text">
<ul>

<li><p>"long double" is silently transformed by the front-end into "double".  There
is no support for floating point data types of any size other than 32 and 64
bits.</p></li>
    
<li><p>llvm-gcc does <b>not</b> support <tt>__builtin_apply</tt> yet.
  See <a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</p>
</li>

<li><p>llvm-gcc <b>partially</b> supports these GCC extensions:</p>
  <ol>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.<br>
      Nested functions are supported, but llvm-gcc does not support non-local
      gotos or taking the address of a nested function.</li>

  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:

      Declaring that functions have no side effects or that they can never
      return.<br>

      <b>Supported:</b> <tt>alias</tt>, <tt>always_inline</tt>, <tt>cdecl</tt>,
      <tt>constructor</tt>, <tt>destructor</tt>,
      <tt>deprecated</tt>, <tt>fastcall</tt>, <tt>format</tt>, 
      <tt>format_arg</tt>, <tt>non_null</tt>, <tt>noreturn</tt>, <tt>regparm</tt>
      <tt>section</tt>, <tt>stdcall</tt>, <tt>unused</tt>, <tt>used</tt>, 
      <tt>visibility</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>

      <b>Ignored:</b> <tt>noinline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
      <tt>malloc</tt>, <tt>no_instrument_function</tt></li>
  </ol>
</li>

<li><p>llvm-gcc supports the vast majority of GCC extensions, including:</p>

  <ol>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
      Other built-in functions.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
      Specifying attributes of variables.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>:	Specifying attributes of types.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
      Arrays whose length is computed at run time.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>:   Putting statements and declarations inside expressions.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof">Typeof</a>: <code>typeof</code>: referring to the type of an expression.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>:   Data types for complex numbers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic%20Macros">Variadic Macros</a>: Macros with a variable number of arguments.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>:  Slightly looser rules for escaped newlines.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>:   Built-in functions specific to particular targets.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
or arrays as values.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Cast-to-Union.html#Cast%20to%20Union">Cast to Union</a>: Casting to union type from any member of the union.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Comments.html#C_002b_002b-Comments">C++ Comments</a>: C++ comments are recognized.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Character-Escapes.html#Character%20Escapes">Character Escapes</a>: <code>\e</code> stands for the character &lt;ESC&gt;.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html#Alternate%20Keywords">Alternate Keywords</a>:<code>__const__</code>, <code>__asm__</code>, etc., for header files.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html#Incomplete%20Enums">Incomplete Enums</a>:  <code>enum foo;</code>, with details to follow.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html#Function%20Names">Function Names</a>: Printable strings which are the name of the current function.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html#Return%20Address">Return Address</a>: Getting the return or frame address of a function.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed%20Fields">Unnamed Fields</a>: Unnamed struct/union fields within structs/unions.</li>
  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
  </ol></li>

</ul>

<p>If you run into GCC extensions which have not been included in any of these
lists, please let us know (also including whether or not they work).</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="c++-fe">Known problems with the C++ front-end</a>
</div>

<div class="doc_text">

<p>The C++ front-end is considered to be fully
tested and works for a number of non-trivial programs, including LLVM
itself, Qt, Mozilla, etc.</p>

<ul>
<li>llvm-gcc4 only has partial support for <a href="http://llvm.org/PR870">C++ 
Exception Handling</a>, and it is not enabled by default.</li>

<!-- NO EH Support!

<li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
    performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
    function and in the <tt>setjmp</tt> receiver function may not be run.
    Objects in intervening stack frames will be destroyed, however (which is
    better than most compilers).</li>

<li>The LLVM C++ front-end follows the <a
    href="http://www.codesourcery.com/cxx-abi">Itanium C++ ABI</a>.
    This document, which is not Itanium specific, specifies a standard for name
    mangling, class layout, v-table layout, RTTI formats, and other C++
    representation issues.  Because we use this API, code generated by the LLVM
    compilers should be binary compatible with machine code generated by other
    Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
    <i>However</i>, the exception handling mechanism used by llvm-gcc3 is very
    different from the model used in the Itanium ABI, so <b>exceptions will not
    interact correctly</b>. </li>
-->
</ul>

</div>



<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="additionalinfo">Additional Information</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>A wide variety of additional information is available on the <a
href="http://llvm.org">LLVM web page</a>, in particular in the <a
href="http://llvm.org/docs/">documentation</a> section.  The web page also
contains versions of the API documentation which is up-to-date with the CVS
version of the source code.
You can access versions of these documents specific to this release by going
into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>

<p>If you have any questions or comments about LLVM, please feel free to contact
us via the <a href="http://llvm.org/docs/#maillist"> mailing
lists</a>.</p>

</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
