"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 1.3 Release Notes</title>
+ <title>LLVM 1.5 Release Notes</title>
</head>
<body>
-<div class="doc_title">LLVM 1.3 Release Notes</div>
+<div class="doc_title">LLVM 1.5 Release Notes</div>
<ol>
<li><a href="#intro">Introduction</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>
- <ul>
- <li><a href="#experimental">Experimental features included in this
- release</a>
- <li><a href="#core">Known problems with the LLVM Core</a>
- <li><a href="#c-fe">Known problems with the C Front-end</a>
- <li><a href="#c++-fe">Known problems with the C++ Front-end</a>
- <li><a href="#x86-be">Known problems with the X86 Back-end</a>
- <li><a href="#sparcv9-be">Known problems with the SparcV9 Back-end</a>
- <li><a href="#c-be">Known problems with the C back-end</a>
- </ul></li>
<li><a href="#additionalinfo">Additional Information</a></li>
</ol>
<div class="doc_author">
- <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM team</a><p>
+ <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM Team</a><p>
</div>
<!-- *********************************************************************** -->
<div class="doc_text">
<p>This document contains the release notes for the LLVM compiler
-infrastructure, release 1.3. Here we describe the status of LLVM, including any
-known problems and bug fixes from the previous release. The most up-to-date
-version of this document can be found on the <a
-href="http://llvm.cs.uiuc.edu/releases/1.3/">LLVM 1.3 web site</a>. If you are
+infrastructure, release 1.5. Here we describe the status of LLVM, including any
+known problems and major improvements from the previous release. The most
+up-to-date version of this document can be found on the <a
+href="http://llvm.cs.uiuc.edu/releases/1.5/">LLVM 1.5 web site</a>. If you are
not reading this on the LLVM web pages, you should probably go there because
this document may be updated after the release.</p>
-<p>For more information about LLVM, including information about potentially more
-current releases, please check out the <a href="http://llvm.cs.uiuc.edu">main
+<p>For more information about LLVM, including information about the latest
+release, please check out the <a href="http://llvm.cs.uiuc.edu">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, 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
+<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.cs.uiuc.edu/releases/">releases page</a>.</p>
</div>
<div class="doc_text">
-<p>This is the fourth public release of the LLVM compiler infrastructure. This
-release primarily improves the <a href="#codequality">performance of the
-code</a> produced by all aspects of the LLVM compiler, adds many <a
-href="#newfeatures">new features</a>, <a href="#bugfix">fixes a few
-bugs</a>, and speeds up the compiler.</p>
+<p>This is the sixth public release of the LLVM Compiler Infrastructure.</p>
-<p> At this time, LLVM is known to correctly compile and run all C & C++
-SPEC CPU95 & 2000 benchmarks, the Olden benchmarks, and the Ptrdist
-benchmarks, and <b>many</b> other programs. LLVM now also works
-with a broad variety of C++ programs.</p>
+<p> At this time, LLVM is known to correctly compile a wide range of C and C++
+programs, including the SPEC CPU95 & 2000 suite. It includes bug fixes for
+those problems found since the 1.4 release and a large number of new features
+and enhancements, described below.</p>
</div>
<!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="newfeatures">This release implements the following new features:</a>
-</div>
-
-<div class="doc_text">
-
-<ol>
-<li>The LLVM <a href="LangRef.html#i_select"><tt>select</tt></a> instruction is
-now fully implemented and supported by all transformations, native code
-generators, and the interpreter.</li>
-<li>Bugpoint can now narrow down code-generation bugs to a loop nest, where
-before it could only narrow them down to a function being miscompiled.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR40">Bugpoint can now debug arbitrary
-modes of llc</a> and lli, by passing them command line flags (e.g.
-<tt>-regalloc=linearscan</tt>).</li>
-<li>The Control Flow Graph in the native code generators is no longer
-constrained to be the same as the CFG for the LLVM input code.</li>
-<li>The LLVM induction variable analysis routines have been rewritten.</li>
-<li>LLVM now has new loop unrolling and loop unswitching passes.</li>
-<li>The induction variable substitution pass performs linear function test
-replacement and exit value replacement optimizations.</li>
-<li>LLVM now has first-class support for <a
-href="GarbageCollection.html">Accurate Garbage Collection</a>, enabling the use
-of aggressive copying and generational collectors.</li>
-<li>LLVM now includes a simple implementation of <a
-href="AliasAnalysis.html#anders-aa">Andersen's interprocedural alias
-analysis</a> algorithm.</li>
-<li>Bugpoint can <a href="http://llvm.cs.uiuc.edu/PR327">extract individual
-basic blocks</a> to track down reduce miscompilation testcases.</li>
-<li>LLVM and the C front-end now work under Win32 using the
-<a href="http://www.cygwin.com">Cygwin</a> runtime libraries.
-This includes the JIT compiler.</li>
-<li>The LLVM code generator is now being <a
-href="CodeGenerator.html">documented</a>.</li>
-<li>LLVM includes a new tool, <a
-href="CommandGuide/html/llvm-bcanalyzer.html">llvm-bcanalyzer</a>, This tool
-can compute various statistics and dump information about LLVM bytecode
-encoding.</li>
-<li>The <a href="BytecodeFormat.html">LLVM bytecode file format</a> is now
-documented.</li>
-<li>LLVM now provides an <a
-href="LangRef.html#i_isunordered">llvm.isunordered</a> intrinsic for efficient
-implementation of unordered floating point comparisons.</li>
-<li>The llvmgcc front-end now supports the GCC builtins for ISO C99 floating
-point comparison macros (e.g., <tt>__builtin_islessequal</tt>).</li>
-<li>We now generate <a href="CommandGuide/">HTML documentation and man pages</a>
-for the tools from a single source (perl-style POD files).</li>
-<li>The LLVM code generator can now dynamically load targets from shared
-objects.</li>
-<li>LLVM now includes a "skeleton" target, which makes it easier to get
-started porting LLVM to new architectures.</li>
-<li>The linear scan register allocator is now enabled by default in the
-target-independent code generator.</li>
-<li>LLVM now includes a dead store elimination pass.</li>
-<li>Bugpoint can now debug miscompilations that lead to the program going
-into an infinite loop.</li>
-<li>LLVM now provides interfaces to support ML-style pattern matching on the
-LLVM IR.</li>
-<li>LLVM now includes a <a
-href="AliasAnalysis.html#globalsmodref">context-sensitive mod/ref analysis</a>
-for global variables, which is now enabled by default in gccld.</li>
-<li>LLVM can now autogenerate assembly printers for code generators from the
-tablegen description of the target (before they were hand coded).</li>
-<li>All LLVM tools will now respond to the
-<a href="http://llvm.cs.uiuc.edu/PR413"><tt>--version</tt> option</a> which
-will tell you the version of LLVM on which the tool is based.</li>
-<li>An experimental PowerPC backend has been added, capable of compiling several
-SPEC benchmarks.</li>
-</ol>
-
+<div class="doc_subsection">
+<a name="newfeatures">New Features in LLVM 1.5</a>
</div>
-
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-In this release, the following missing features were implemented:
-</div>
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Native Code Generators</div>
<div class="doc_text">
-
-<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR82">LLVM cannot handle structures with
-more than 256 elements</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR38">[bugpoint] External functions used in
-non-instruction entities, such as global constant initializer</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR178">Stacker does not handle targets
-with 64-bit pointers.</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR290">Bugpoint doesn't support
-uses of external fns by immediate constant exprs</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR407">Can't add function passes that
-depend on immutable passes to the FunctionPassManager</a>.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR308">Archive file reader doesn't
-understand abbreviated names in headers</a></li>
-</ol>
-
+<p>
+This release includes new native code generators for <a
+href="#alpha-be">Alpha</a>, <a href="#ia64-be">IA-64</a>, and SPARC-V8 (32-bit
+SPARC). These code generators are still beta quality, but are progressing
+rapidly.
+</p>
</div>
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="qualityofimp">In this release, the following Quality of Implementation
-issues were fixed:</a>
-</div>
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Instruction Selector Framework</div>
<div class="doc_text">
+<p>This release includes a <a href="CodeGenerator.html#instselect">new framework
+for building instruction selectors</a>, which has long been the hardest part of
+building a new LLVM target. This framework handles a lot of the mundane (but
+easy to get wrong) details of writing the instruction selector, such as
+generating efficient code for <a
+href="LangRef.html#i_getelementptr">getelementptr</a> instructions, promoting
+small integer types to larger types (e.g. for RISC targets with one size of
+integer registers), expanding 64-bit integer operations for 32-bit hosts, etc.
+Currently, the X86, PowerPC, Alpha, and IA-64 backends use this framework. The
+SPARC backends will be migrated when time permits.
+</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Support For Custom Calling Convetions</div>
-<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR305">LLVM tools will happily spew
-bytecode onto your terminal</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR329">[llvmgcc] type names are not emitted
-for structure typedefs</a></li>
-<li>All documentation is now conformant to the HTML 4.01 (Strict) level.</li>
-<li>The spurious "WARNING: Found global types that are not compatible" warning
-produced when linking C++ programs has been fixed.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR391">lli Doesn't Handle Exceptions From
-Bytecode Reader</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR392">Global Vars Have (Somewhat) Limited
- Type Range</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR341">operator<< on a Value* now
-prints the address of the object instead of its contents.</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR402">Bytecode Enhancements
-Needed</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR404">[loopsimplify] Loop simplify is
-really slow on 252.eon</a></li>
-<li><a href="Http://llvm.cs.uiuc.edu/PR122">[code-cleanup] SymbolTable class
-cleanup, Type should not derive from Value, eliminate ConstantPointerRef
-class</a>.</li>
-<li>The memory footprint of the LLVM IR has been reduced substantially.</li>
-<li>The LLVM linker and many core classes have been sped up substantially.</li>
-</ol>
-
-</div>
+<div class="doc_text">
+<p>LLVM 1.5 adds supports for <a href="LangRef.html#callingconv">custom and
+target-specific calling conventions</a>. Traditionally, the LLVM code
+generators match the native C calling conventions for a target. This is
+important for compatibility, but is not very flexible. This release allows
+custom calling conventions to be established for functions, and defines three
+target-independent conventions (C call, fast call, and cold call) which may be
+supported by code generators. When possible, the LLVM optimizer promotes C
+functions to use the "fastcc" convention, allowing the use of more efficient
+calling sequences (e.g., parameters are passed in registers in the X86 target).
+</p>
+
+<p>Targets may now also define target-specific calling conventions, allowing
+LLVM to fully support calling convention altering options (e.g. GCC's
+<tt>-mregparm</tt> flag) and well-defined target conventions (e.g. stdcall and
+fastcall on X86).</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Support for "Proper Tail Calls"</div>
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-In this release, the following build problems were fixed:
-</div>
+<div class="doc_text">
+<p>The release now includes support for <a
+href="http://doi.acm.org/10.1145/277650.277719">proper tail calls</a>, as
+required to implement languages like Scheme. Tail calls make use of two
+features: custom calling conventions (described above), which allow the code
+generator to emit code for the caller to deallocate its own stack when it
+returns. The second feature is a flag on the <a href="LangRef.html#i_call">call
+instruction</a>, which indicates that the callee does not access the callers
+stack frame (indicating that it is acceptable to deallocate the caller stack
+before invoking the callee). LLVM proper tail calls run on the system stack (as
+do normal calls), supports indirect tail calls, tail calls with arbitrary
+numbers of arguments, tail calls where the callee requires more argument space
+than the caller, etc. The only case not supported are varargs calls, but that
+could be added if desired.
+</p>
+
+<p>In order for a front-end to get guaranteed tail call, it must mark functions
+as "fastcc", mark calls with the 'tail' marker, and follow the call with a
+return of the called value (or void). The optimizer and code generator attempt
+to handle more general cases, but the simple case will always work if the code
+generator supports tail calls. Here is a simple example:</p>
+
+<p><pre>
+fastcc int %bar(int %X, int(double, int)* %FP) { ;<i> fastcc</i>
+ %Y = tail call fastcc int %FP(double 0.0, int %X) ;<i> tail, fastcc</i>
+ ret int %Y
+}
+</pre></p>
+
+<p>In LLVM 1.5, the X86 code generator is the only target that has been enhanced
+to support proper tail calls (other targets will be enhanced in future).
+Further, because this support was added very close to the release, it is
+disabled by default. Pass <tt>-enable-x86-fastcc</tt> to llc to enable it. X86
+support will be enabled by default in the next LLVM release.</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">Other New Features</div>
<div class="doc_text">
<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR301">Minor configure bugs with
--disable/enable-povray and -disable-spec</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR289">shell scripts output by gccld don't
-work if you change PATH</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR364">[llvmgcc] llvmgcc does not compile
-with gcc 3.4</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR373">[llvmgcc] obstack.h relies on
-obsolete casts-as-lvalues GCC extension</a></li>
+ <li>LLVM now includes an <a href="http://llvm.cs.uiuc.edu/PR415">
+ Interprocedural Sparse Conditional Constant Propagation</a> pass, named
+ -ipsccp, which is run by default at link-time.</li>
+ <li>LLVM 1.5 is now about 15% faster than LLVM 1.4 and its core data
+ structures use about 30% less memory.</li>
+ <li>Support for Microsoft Visual Studio is improved, and <a
+ href="GettingStartedVS.html">now documented</a>.</li>
+ <li><a href="GettingStarted.html#config">Configuring LLVM to build a subset
+ of the available targets</a> is now implemented, via the
+ <tt>--enable-targets=</tt> option.</li>
+ <li>LLVM can now create native shared libraries with '<tt>llvm-gcc ...
+ -shared -Wl,-native</tt>' (or with <tt>-Wl,-native-cbe</tt>).</li>
+ <li>LLVM now supports a new "<a href="LangRef.html#i_prefetch">llvm.prefetch
+ </a>" intrinsic, and llvm-gcc now supports __builtin_prefetch.
+ <li>LLVM now supports intrinsics for <a href="LangRef.html#int_count">bit
+ counting</a> and llvm-gcc now implements the GCC
+ <tt>__builtin_popcount</tt>, <tt>__builtin_ctz</tt>, and
+ <tt>__builtin_clz</tt> builtins.</li>
+ <li>LLVM now builds on HP-UX with the HP aCC Compiler.</li>
+ <li>The LLVM X86 backend can now emit Cygwin-compatible .s files.</li>
+ <li>LLVM now includes workarounds in the code generator generator which
+ reduces the likelyhood of <a href="http://llvm.cs.uiuc.edu/PR448">GCC
+ hitting swap during optimized builds</a>.</li>
</ol>
</div>
<!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="codequality">This release includes the following Code Quality
-improvements:</a>
+<div class="doc_subsection">
+<a name="codequality">Code Quality Improvements in LLVM 1.5</a>
</div>
<div class="doc_text">
<ol>
-<li>Fixed: <a href="http://llvm.cs.uiuc.edu/PR309">[vmcore] Code quality problem
-due to long operand of getelementptr</a></li>
-
-<li>The X86 backend now generates substantially better code for 64-bit integer
-and floating point operations.</li>
-
-<li>The -inline pass no longer inlines mutually recursive functions until it
-hits the inlining threshold.</li>
-
-<li>The -inline pass no longer misses obvious inlining opportunities just
-because the callee eventually calls into an external function.</li>
-
-<li>The -simplifycfg pass can now "if convert" simple statements into the
-<tt>select</tt> instruction.</li>
-
-<li>The -loopsimplify pass can now break <a
-href="http://llvm.cs.uiuc.edu/PR35">natural loops with multiple backedges</a>
-into multiple nested loops. This enables a variety of subsequent
-optimizations.</li>
-
-<li>The -adce pass can now eliminate calls to functions that do not not write to
-memory.</li>
+<li>The -globalopt pass now promotes non-address-taken static globals that are
+only accessed in main to SSA registers.</li>
-<li>The link-time optimizer now runs the -prune-eh pass (to remove unused
-exception handlers).</li>
+<li>Loops with trip counts based on array pointer comparisons (e.g. "<tt>for (i
+= 0; &A[i] != &A[100]; ++i) ...</tt>") are optimized better than before,
+which primarily helps iterator-intensive C++ codes.</li>
-<li>The link-time optimizer now runs dead store elimination and uses a simple
-interprocedural alias analysis.</li>
+<li>The code generator now uses information about takes advantage of commutative
+two-address instructions when performing register allocation.</li>
-<li>The -simplifycfg pass can now eliminate simple correlated branches (such as
-"<tt>if (A < B && A < B)</tt>", and can turn short-circuiting
-operators into the strict versions when useful (such as "<tt>if (A < B || A
-> C)</tt>" into "<tt>if (A < B | A > C)</tt>"</li>
+<li>A new pass has been added to gccas to simplify well-known library calls. The
+pass will short circuit calls to many of the string, memory, and printf type
+functions or replace the calls with simpler/faster calls, where possible given
+information known statically about the arguments to the call. To use the
+pass, specify <tt>-simplify-libcalls</tt> to the <tt>opt</tt> tool.</li>
-<li>LLVM now has infrastructure for (simple and sparse conditional) constant
-propagation of function calls. It currently supports a few math library
-functions like sqrt/sin/cos/etc.</li>
-
-<li>The C backend now emits <a href="http://llvm.cs.uiuc.edu/PR334">syntactic
-loops</a> in the code to help C compilers whose optimizers do not recognize
-loops formed from gotos (like GCC).</li>
-
-<li>The SparcV9 backend no longers <a
-href="http://llvm.cs.uiuc.edu/PR368">spills the null constant to the constant
-pool</a>.</li>
+
</ol>
</div>
<!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="bugfix">In this release, the following bugs in the previous release
-were fixed:</a>
+<div class="doc_subsection">
+<a name="bugfix">Significant Bugs Fixed in LLVM 1.5</a>
</div>
<div class="doc_text">
+
<p>Bugs fixed in the LLVM Core:</p>
+<ol>
+ <li><a href="http://llvm.cs.uiuc.edu/PR491">[dse] DSE deletes stores that
+ are partially overwritten by smaller stores</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR548">[instcombine] miscompilation of
+ setcc or setcc in one case</a></li>
+ <li>Transition code for LLVM 1.0 style varargs was removed from the .ll file
+ parser. LLVM 1.0 bytecode files are still supported. </li>
+</ol>
+<p>Code Generator Bugs:</p>
<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR306">[loopsimplify] Loop simplify
-incorrectly updates dominator information</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR310">[tailduplicate] DemoteRegToStack
-breaks SSA form</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR313">[X86] JIT miscompiles unsigned short
-to floating point cast</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR330">[vmcore] Linker causes erroneous
-asssertion</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR332">[adce] Crash handling unreachable
-code that unwinds</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR333">[sparcv9] LLC can't emit 2 functions
-of the same name, both having constant pools</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR337">[livevar] Live variables missed
-physical register use of aliased definition</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR369">[X86] stackifier crash on floating
-point setcc X, X</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR490">[cbackend] Logical constant
+ expressions (and/or/xor) not implemented</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR511">[cbackend] C backend does not
+ respect 'volatile'</a></li>
</ol>
<p>Bugs in the C/C++ front-end:</p>
-
<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR298">[llvmgcc] Variable length array
-indexing miscompiled</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR326">[llvmgcc] Crash on use of undeclared
-enum type</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR355">[llvmgcc] Errors handling function
-prototypes that take opaque structs by-value</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR374">[llvmgcc] Crash compiling variable
-length array of structures</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR377">[llvmgcc] miscompilation of staticly
-initialized unsigned bitfields</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR396">[llvm-gcc] Crash casting function to void</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR487">[llvmgcc] llvm-gcc incorrectly
+ rejects some constant initializers involving the addresses of array
+ elements</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR501">[llvm-g++] Crash compiling
+ anonymous union</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR509">[llvm-g++] Do not use dynamic
+ initialization where static init will do</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR510">[llvmgcc] Field offset
+ miscalculated for some structure fields following bit fields</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR513">[llvm-g++] Temporary lifetimes
+ incorrect for short circuit logical operations</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR517">[llvm-gcc] Crash compiling
+ bitfield <-> aggregate assignment</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR520">[llvm-g++] Error compiling
+ virtual function thunk with an unnamed argument</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR522">[llvm-gcc] Crash on certain
+ C99 complex number routines</a></li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR529">[llvm-g++] Crash using placement
+ new on an array type</a></li>
</ol>
+
</div>
<!-- *********************************************************************** -->
<div class="doc_text">
-<p>LLVM is known to work in the following platforms:</p>
+<p>LLVM is known to work on the following platforms:</p>
<ul>
<li>Intel and AMD machines running Red Hat Linux and FreeBSD (and probably
other unix-like systems).</li>
<li>Sun UltraSPARC workstations running Solaris 8.</li>
-<li>PowerPC-based Mac OS X boxes, running 10.2 and above.</li>
-<li>Intel and AMD machines running on Win32 with the Cygwin libraries.</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>PowerPC-based Mac OS X systems, running 10.2 and above.</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
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>
-<p>Note that the LLVM build system does not currently support directories with
-spaces on them when running on Win32/cygwin. We strongly recommend running
-LLVM and the C frontend out of a top-level directory without spaces (e.g.,
-<tt>/cygdrive/c/llvm</tt>). Also, make sure to install <b>all</b> of the
-cygwin packages. By default, many important tools are not installed that
-are needed by the LLVM build process or test suite (e.g., /bin/time).</p>
-
</div>
<!-- *********************************************************************** -->
components, please contact us on the llvmdev list.</p>
<ul>
-<li>The PowerPC backend is incomplete and is known to miscompile several SPEC
-benchmarks. The file <tt>llvm/lib/Target/PowerPC/README.txt</tt> has
-details.</li>
-<li>The following passes are incomplete or buggy: <tt>-pgmdep, -memdep,
- -ipmodref, -cee</tt></li>
-<li>The <tt>-pre</tt> pass is incomplete (there are cases it doesn't handle that
- it should) and not thoroughly tested.</li>
-<li>The <tt>llvm-ar</tt> tool is incomplete and probably buggy.</li>
-<li>The <tt>llvm-db</tt> tool is in a very early stage of development.</li>
+<li>The following passes are incomplete or buggy, and may be removed in future
+ releases: <tt>-cee, -branch-combine, -instloops, -paths, -pre</tt></li>
+<li>The <tt>llvm-db</tt> tool is in a very early stage of development, but can
+ be used to step through programs and inspect the stack.</li>
+<li>The "iterative scan" register allocator (enabled with
+ <tt>-regalloc=iterativescan</tt>) is not stable.</li>
+<li>The SparcV8, Alpha, and IA64 code generators are experimental.</li>
</ul>
</div>
<div class="doc_text">
<ul>
-
-<li>In the JIT, <tt>dlsym</tt> on a symbol compiled by the JIT will not
-work.</li>
-
-<li>The JIT does not use mutexes to protect its internal data structures. As
-such, execution of a threaded program could cause these data structures to be
-corrupted.</li>
-
-<li>It is not possible to <tt>dlopen</tt> an LLVM bytecode file in the JIT.</li>
-
-<li>Linking in static archive files (.a files) is very slow (there is no symbol
-table in the archive).</li>
-
-<li>The gccld program <a href="http://llvm.cs.uiuc.edu/PR139">does not link
-objects/archives in the order specified on the command line.</a></li>
-
-<li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not mark
-values live across a setjmp as volatile</a>. This missing feature only affects
-targets whose setjmp/longjmp libraries do not save and restore the entire
-register file.</li>
+ <li>In the JIT, <tt>dlsym()</tt> on a symbol compiled by the JIT will not
+ work.</li>
+ <li>The JIT does not use mutexes to protect its internal data structures. As
+ such, execution of a threaded program could cause these data structures to be
+ corrupted.
+ </li>
+ <li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not
+ mark values live across a setjmp as volatile</a>. This missing feature
+ only affects targets whose setjmp/longjmp libraries do not save and restore
+ the entire register file.</li>
</ul>
</div>
</pre></li>
<li>Initialization of global union variables can only be done <a
-href="http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=162">with the largest union
-member</a>.</li>
-
-<li><a href="http://llvm.cs.uiuc.edu/PR244">[llvm-gcc] Error when an implicitly
-external function is re-declared as static</a></li>
+href="http://llvm.cs.uiuc.edu/PR162">with the largest union member</a>.</li>
</ul>
</div>
<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/Thread-Local.html#Thread-Local">Thread-Local</a>: Per-thread variables.</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/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
</ol>
return.<br>
<b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
- <tt>constructor</tt>, <tt>destructor</tt>, <tt>unused</tt>,
+ <tt>noreturn</tt>, <tt>constructor</tt>, <tt>destructor</tt>,
+ <tt>unused</tt>,
<tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
- <b>Ignored:</b> <tt>noreturn</tt>, <tt>noinline</tt>,
+ <b>Ignored:</b> <tt>noinline</tt>,
<tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
<tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
<tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
<tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt>
(currently ignored). We also support builtins for ISO C99 floating
- point comparison macros (e.g., <tt>__builtin_islessequal</tt>).</li>
+ point comparison macros (e.g., <tt>__builtin_islessequal</tt>),
+ <tt>__builtin_prefetch</tt>, <tt>__builtin_popcount[ll]</tt>,
+ <tt>__builtin_clz[ll]</tt>, and <tt>__builtin_ctz[ll]</tt>.</li>
</ol>
<p>The following extensions <b>are</b> known to be supported:</p>
<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---Comments.html#C++%20Comments">C++ Comments</a>: C++ comments are recognized.</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 <ESC>.</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>
<div class="doc_text">
-<p>For this release, the C++ front-end is considered to be fully functional but
-has not been tested as thoroughly as the C front-end. It has been tested and
-works for a number of non-trivial programs, but there may be lurking bugs.
-Please report any bugs or problems.</p>
+<p>For this release, the C++ front-end is considered to be fully
+tested and works for a number of non-trivial programs, including LLVM
+itself.</p>
</div>
<div class="doc_text">
<ul>
- <li>none yet</li>
+ <li>None yet</li>
</ul>
</div>
</div>
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+ <a name="ppc-be">Known problems with the PowerPC back-end</a>
+</div>
+
+<div class="doc_text">
+
+<ul>
+<li>None yet</li>
+</ul>
+
+</div>
+
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="c-be">Known problems with the C back-end</a>
(for example, GCC requires the <tt>-fno-strict-aliasing</tt> option). This
problem probably cannot be fixed.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR33">Initializers for global variables</a>
-cannot include special floating point numbers like Not-A-Number or
-Infinity.</li>
-
<li><a href="http://llvm.cs.uiuc.edu/PR56">Zero arg vararg functions are not
supported</a>. This should not affect LLVM produced by the C or C++
frontends.</li>
</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 arithmatic sequences which may trap do not have the appropriate nops inserted to ensure restartability.</li>
+
+<li>Vararg functions are not supported.</li>
+
+<li>Due to the vararg problems, C++ exceptions do not work. Small changes are required to the CFE (which break correctness in the exception handler) to compile the exception handling library (and thus the C++ standard library).</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>There are a few ABI violations which will lead to problems
+when mixing LLVM output with code built with other compilers,
+particularly for C++ and floating-point programs.</li>
+
+<li>Vararg functions are not supported.</li>
+
+</ul>
+
+</div>
+
<!-- *********************************************************************** -->
<div class="doc_section">
<a name="additionalinfo">Additional Information</a>
<div class="doc_text">
<p>A wide variety of additional information is available on the LLVM web page,
-including mailing lists and publications describing algorithms and components
-implemented in LLVM. 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>
+including <a href="http://llvm.cs.uiuc.edu/docs/#maillist">mailing lists</a> and
+<a href="http://llvm.cs.uiuc.edu/pubs/">publications describing algorithms and
+components implemented in LLVM</a>. 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://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">mailing