all content split into sections, still much work to be done.
[oota-llvm.git] / docs / ReleaseNotes-2.6.html
index 6e99a60532c78f3a169b2819e4dc96c43c2316d0..ca277ba82a7a432f2ef2f2c7aa6d3782ed888f8b 100644 (file)
@@ -51,25 +51,36 @@ current one.  To see the release notes for a specific release, please see the
 <a href="http://llvm.org/releases/">releases page</a>.</p>
 
 </div>
-
-<!-- Unfinished features in 2.5:
-  Machine LICM
-  Machine Sinking
-  target-specific intrinsics
-  gold lto plugin
-  pre-alloc splitter, strong phi elim
-  <tt>llc -enable-value-prop</tt>, propagation of value info
-       (sign/zero ext info) from one MBB to another
-  debug info for optimized code
-  interpreter + libffi
+
+<!--
+Almost dead code.
+  include/llvm/Analysis/LiveValues.h => Dan
+  lib/Transforms/IPO/MergeFunctions.cpp => consider for 2.8.
+  llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
+-->
+   
+<!-- Unfinished features in 2.6:
+  gcc plugin.
+  strong phi elim
+  variable debug info for optimized code
   postalloc scheduler: anti dependence breaking, hazard recognizer?
-
-initial support for debug line numbers when optimization enabled, not useful in
-  2.5 but will be for 2.6.
+  metadata
+  loop dependence analysis
+  ELF Writer?  How stable?
+  <li>PostRA scheduler improvements, ARM adoption (David Goodwin).</li>
 
  -->
 
  <!-- for announcement email:
+ Logo web page.
+ llvm devmtg
+ compiler_rt
+ klee web page at klee.llvm.org
+ Many new papers added to /pubs/
+   Mention gcc plugin.
+
    -->
 
 <!-- *********************************************************************** -->
@@ -98,7 +109,7 @@ Project</a> and the <a href="#vmkit">VMKit Project</a>.
 
 <div class="doc_text">
 
-<p>The <a href="http://clang.llvm.org/">Clang project</a> is an effort to build
+<p><b>UPDATE!</b> The <a href="http://clang.llvm.org/">Clang project</a> is an effort to build
 a set of new 'LLVM native' front-end technologies for the LLVM optimizer and
 code generator.  While Clang is not included in the LLVM 2.6 release, it is
 continuing to make major strides forward in all areas.  Its C and Objective-C
@@ -119,6 +130,7 @@ list</a>.</p>
 
 <ul>
 <li>Something wonderful!</li>
+<li>AuroraUX / FreeBSD &amp; OpenBSD Toolchain support.</li>
 <li>Many many bugs are fixed and many features have been added.</li>
 </ul>
 </div>
@@ -130,7 +142,7 @@ list</a>.</p>
 
 <div class="doc_text">
 
-<p>Previously announced in the 2.4 LLVM release, the Clang project also
+<p><b>UPDATE!</b> Previously announced in the 2.4 and 2.5 LLVM releases, the Clang project also
 includes an early stage static source code analysis tool for <a
 href="http://clang.llvm.org/StaticAnalysis.html">automatically finding bugs</a>
 in C and Objective-C programs. The tool performs a growing set of checks to find
@@ -154,6 +166,7 @@ this project is encouraged to get involved!</p>
 
 <div class="doc_text">
 <p>
+<b>UPDATE!</b> 
 The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation of
 a JVM and a CLI Virtual Machines (Microsoft .NET is an
 implementation of the CLI) using the Just-In-Time compiler of LLVM.</p>
@@ -169,12 +182,71 @@ bug fixes, cleanup and new features. The major changes are:</p>
 </ul>
 </div>
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="mc">llvm-mc: Machine Code Toolkit</a>
+</div>
+
+<div class="doc_text">
+<p>
+<b>UPDATE!</b> 
+blah
+
+  MC:
+    MCSection, MCAsmInfo
+       MCInstPrinter did it make it in?
+       MCInst (X86 using it so far)
+       Rewrite of X86 GV selection logic: TargetOperand flags on ExternalSymbol, GV, etc operands.
+       Can parse and re-print out an darwin-x86 .s file.
+       TargetLoweringObjectFile, MCSectionKind
+       Verrrry early start of a macho writer.
+</p>
+
+</div> 
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="externalproj">External Projects Using LLVM 2.6</a>
 </div>
 <!-- *********************************************************************** -->
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="Rubinius">Rubinius</a>
+</div>
+
+<div class="doc_text">
+<p><a href="http://github.com/evanphx/rubinius">Rubinius</a> is an environment
+for running Ruby code which strives to write as much of the core class
+implementation in Ruby as possible. Combined with a bytecode interpreting VM, it
+uses LLVM to optimize and compile ruby code down to machine code. Techniques
+such as type feedback, method inlining, and uncommon traps are all used to
+remove dynamism from ruby execution and increase performance.</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="macruby">MacRuby</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+<a href="http://macruby.org">MacRuby</a> is an implementation of Ruby on top of
+core Mac OS X technologies, such as the Objective-C common runtime and garbage
+collector, and the CoreFoundation framework. It is principally developed by
+Apple and aims at enabling the creation of full-fledged Mac OS X applications.
+</p>
+
+<p>
+MacRuby uses LLVM for optimization passes, JIT and AOT compilation of Ruby
+expressions. It also uses zero-cost DWARF exceptions to implement Ruby exception
+handling.</p>
+
+</div>
+
+
 <!--=========================================================================-->
 <div class="doc_subsection">
 <a name="pure">Pure</a>
@@ -182,6 +254,7 @@ bug fixes, cleanup and new features. The major changes are:</p>
 
 <div class="doc_text">
 <p>
+<b>UPDATE!</b> 
 <a href="http://pure-lang.googlecode.com/">Pure</a>
 is an algebraic/functional programming language based on term rewriting.
 Programs are collections of equations which are used to evaluate expressions in
@@ -208,6 +281,7 @@ it as a kind of functional scripting language for many application areas.
 
 <div class="doc_text">
 <p>
+<b>UPDATE!</b> 
 <a href="http://www.dsource.org/projects/ldc">LDC</a> is an implementation of
 the D Programming Language using the LLVM optimizer and code generator.
 The LDC project works great with the LLVM 2.6 release.  General improvements in
@@ -225,7 +299,9 @@ fully featured as the original DMD compiler from DigitalMars.
 </div>
 
 <div class="doc_text">
-<p><a href="http://code.roadsend.com/rphp">Roadsend PHP</a> (rphp) is an open
+<p>
+<b>UPDATE!</b> 
+<a href="http://code.roadsend.com/rphp">Roadsend PHP</a> (rphp) is an open
 source implementation of the PHP programming 
 language that uses LLVM for its optimizer, JIT, and static compiler. This is a 
 reimplementation of an earlier project that is now based on LLVM.</p>
@@ -237,22 +313,14 @@ reimplementation of an earlier project that is now based on LLVM.</p>
 </div>
 
 <div class="doc_text">
-<p><a href="http://code.google.com/p/unladen-swallow/">Unladen Swallow</a> is a
+<p>
+<b>UPDATE!</b> 
+<a href="http://code.google.com/p/unladen-swallow/">Unladen Swallow</a> is a
 branch of <a href="http://python.org/">Python</a> intended to be fully
 compatible and significantly faster.  It uses LLVM's optimization passes and JIT
 compiler.</p>
 </div>
 
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="Rubinius">Rubinius</a>
-</div>
-
-<div class="doc_text">
-<p><a href="http://github.com/evanphx/rubinius">Rubinius</a> is a new virtual
-machine for Ruby. It leverages LLVM to dynamically compile Ruby code down to
-machine code using LLVM's JIT.</p>
-</div>
 
 
 <!-- *********************************************************************** -->
@@ -267,6 +335,7 @@ machine code using LLVM's JIT.</p>
 minor improvements.  Some of the major improvements and new features are listed
 in this section.
 </p>
+
 </div>
 
 <!--=========================================================================-->
@@ -279,30 +348,19 @@ in this section.
 <p>LLVM 2.6 includes several major new capabilities:</p>
 
 <ul>
-<li>Something wonderful!</li>
-</ul>
-
-</div>
-
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="llvm-gcc">llvm-gcc 4.2 Improvements</a>
-</div>
-
-<div class="doc_text">
-
-<p>LLVM fully supports the llvm-gcc 4.2 front-end, which marries the GCC
-front-ends and driver with the LLVM optimizer and code generator.  It currently
-includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.</p>
-
-<ul>
-<li>Something wonderful!</li>
+<li>Support for debug line numbers when optimization enabled</li>
+<li>gold lto plugin</li>
+<li>New MSP430 and SystemZ backends.</li>
+<li>New BlackFin backend.</li>
+<li>LLVMContext,   llvm_start_multithreaded: ProgrammersManual.html#threading</li>
+<li>klee web page at klee.llvm.org</li>
+<li>FileCheck</li>
+<li>New compiler-rt project.</li>
+<li>LLVM 2.6 includes a brand new experimental LLVM bindings to the Ada2005 programming language.</li>
 </ul>
 
 </div>
 
-
 <!--=========================================================================-->
 <div class="doc_subsection">
 <a name="coreimprovements">LLVM IR and Core Improvements</a>
@@ -313,7 +371,14 @@ includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.</p>
 can be useful if you are writing a front-end for LLVM:</p>
 
 <ul>
-<li>Something wonderful!</li>
+<li>Getelementpr instruction now allows any integer type for array/pointer indexes.</li>
+<li>Inbounds for GEP</li>
+<li>NSW/NUW/exact div</li>
+<li>LSR promotes int induction variables to 64-bit on 64-bit targets, major perf boost for numerical code.</li>
+<li>LSR now analyzes pointer expressions (e.g. getelementptrs), not just integers.</li>
+<li>new linkage types linkonce_odr, weak_odr, linker_private, and available_externally.</li>
+<li>New fadd, fsub, fmul instructions and classes. </li>
+<li>Target intrinsics can now return multiple results.</li>
 </ul>
 
 </div>
@@ -330,7 +395,11 @@ release includes a few major enhancements and additions to the optimizers:</p>
 
 <ul>
 
-<li>Something wonderful!</li>
+<li>SRoA improvements for vector unions, memset, arbitrary weird bitfield accesses etc.  It now produces "strange" sized integers.</li>
+<li>Inliner reuse stack space when inlining arrays?</li>
+<li>Enabled GVN Load PRE.</li>
+<li>New Static Single Information (SSI) construction pass (not used by anything yet, experimental).</li>
+</li>
 
 </ul>
 
@@ -349,7 +418,21 @@ it run faster:</p>
 
 <ul>
 
-<li>Something wonderful!</li>
+<li>    -asm-verbose now prints location info (with -g) and loop nest info.</li>
+<li>Tblgen now supports multiclass inheritance and a number of new string and
+    list operations like !(subst), !(foreach), !car, !cdr, !null, !if, !cast.
+    These make the .td files more expressive and allow more aggressive factoring
+    of duplication across instruction patterns.</li>
+<li>New MachineVerifier pass.</li>
+<li>Machine LICM, hoists things like constant pool loads, loads from readonly stubs, vector constant synthesization code, etc.</li>
+<li>Machine Sinking</li>
+<li>target-specific intrinsics (r63765)</li>
+<li>Regalloc improvements for commuting, various spiller peephole optimizations, cross-class coalescing.</li>
+<li><tt>llc -enable-value-prop</tt>, propagation of value info (sign/zero ext info) from one MBB to another</li>
+<li>Regalloc hints for allocation stuff: Evan r73381/r73671.  Finished/enabled?</li>
+<li>Stack slot coloring for register spills (denser stack frames)</li>
+<li>SelectionDAGS: New BuildVectorSDNode (r65296), and ISD::VECTOR_SHUFFLE (r69952 / PR2957)</li>
+<li>Experimental support for shrink wrapping support in PEI.</li>
 </ul>
 </div>
 
@@ -364,7 +447,16 @@ it run faster:</p>
 
 <ul>
 
-<li>Something wonderful!</li>
+<li>Preliminary support for addrspace 256 -> GS, 257 -> FS, known problems: CodeGenerator.html#x86_memory</li>
+<li>Support for softfloat modes, typically used by OS kernels.</li>
+
+<li>X86-64: better modeling of implicit zero extensions, eliminates a lot of redundant zexts</li>
+<li>X86-64 TLS support for local exec and initial exec.</li>
+<li>Better modeling of H registerts as subregs.</li>
+<li>Vector icmp/fcmp now work with SSE codegen.</li>
+<li>SSE 4.2 support.</li>
+<li>all global variable reference logic is now in ClassifyGlobalReference.</li>
+</li>
 </ul>
 
 </div>
@@ -379,33 +471,118 @@ it run faster:</p>
 </p>
 
 <ul>
-<li>Something wonderful!</li>
+<li>Support for floating-point, indirect function calls, and
+    passing/returning aggregate types to functions.
+<li>The code generator is able to generate debug info into output COFF files.
+<li>Support for placing an object into a specific section or at a specific
+    address in memory.</li>
 </ul>
 
 <p>Things not yet supported:</p>
 
 <ul>
-<li>Floating point.</li>
-<li>Passing/returning aggregate types to and from functions.</li>
 <li>Variable arguments.</li>
-<li>Indirect function calls.</li>
 <li>Interrupts/programs.</li>
-<li>Debug info.</li>
 </ul>
 
 </div>
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="ARM">ARM Target Improvements</a>
+</div>
+
+<div class="doc_text">
+<p>New features of the ARM target include:
+</p>
+
+<ul>
+
+<li>Preliminary support for processors, such as the Cortex-A8 and Cortex-A9,
+that implement version v7-A of the ARM architecture.  The ARM backend now
+supports both the Thumb2 and Advanced SIMD (Neon) instruction sets. The
+AAPCS-VFP "hard float" calling conventions are also supported with the
+<tt>-float-abi=hard</tt> flag. These features are still somewhat experimental
+and subject to change. The Neon intrinsics, in particular, may change in future
+releases of LLVM.
+</li>
+
+  ARM AAPCS-VFP hard float ABI is supported. 
+  ARM calling convention code is now tblgen generated instead of manual.
+  ARM: NEON support. neonfp for doing single precision fp with neon instead of VFP.
+
+</ul>
+
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="OtherTarget">Other Target Specific Improvements</a>
+</div>
+
+<div class="doc_text">
+<p>New features of other targets include:
+</p>
+
+<ul>
+<li>Add support for the PowerPC 64-bit SVR4 ABI.</li>
+<li>Mips now supports O32 Calling Convention.</li>
+</ul>
+
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="llvmc">Improvements in LLVMC</a>
+<a name="newapis">New Useful APIs</a>
 </div>
 
 <div class="doc_text">
-<p>New features include:</p>
 
 <ul>
-<li>Something wonderful!</li>
+<li>New EngineBuilder class for creating JITs: r76276</li>
+  New PrettyStackTrace, crashes of llvm tools should give some indication of what the compiler was doing at the time of the crash (e.g. running a pass), and print out command line arguments.
+  StringRef class, Twine class.
+    New WeakVH and AssertingVH and CallbackVH classes.
+  New llvm/ADT/Triple class.
+ llvm_report_error() error handling API (llvm/Support/ErrorHandling.h)
+  New llvm/System/Atomic.h, llvm/System/RWMutex.h for portable atomic ops, rw locks.
+  New SourceMgr, SMLoc classes for simple parsers with caret diagnostics and #include support, (used by
+    tablegen, llvm-mc, the .ll parser, FileCheck, etc)
+
+<ul>
+
+
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="otherimprovements">Other Improvements and New Features</a>
+</div>
+
+<div class="doc_text">
+<p>Other miscellaneous features include:</p>
+
+<ul>
+<li>interpreter + libffi</li>
+<li>  JIT now supports generating more than 16M of code.</li>
+<li>Users can now <a
+href="http://llvm.org/doxygen/classllvm_1_1ExecutionEngine.html#fcd2b4b92ca38812ca31640b0da14927">register</a>
+a <a href="http://llvm.org/doxygen/classllvm_1_1JITEventListener.html">JITEventListener</a>
+to receive callbacks when the JIT emits or frees machine code. The
+OProfile support uses this mechanism.</li>
+   JIT support for oprofile (r75279), configure with --with-oprofile.  Now we get line # and function info for JIT'd functions.
+
+<li>Profile info improvements by Andreas Neustifter.</li>
+<li>Many extensions to the C APIs.</li>
+
+<li>LLVMC:
+
+* Dynamic plugins now work on Windows.
+* New option property: init. Makes possible to provide default values for
+ options defined in plugins (interface to cl::init).
+* New example: Skeleton, shows how to create a standalone LLVMC-based driver.
+* New example: mcc16, a driver for the PIC16 toolchain.</li>
+
 </ul>
 
 </div>
@@ -424,14 +601,29 @@ from the previous release.</p>
 
 <ul>
 
-<li>Something horrible!</li>
-
+<li>The Itanium (IA64) backend has been removed.  It was not supported and
+    bitrotted.</li>
+<li>The BigBlock register allocator has been removed, it also bitrotted.</li>
+<li>The C Backend (-march=c) is no longer considered part of the LLVM release
+criteria.  We still want it to work, but no one is maintaining it and it lacks
+support for arbitrary precision integers and other important IR features.</li>
 </ul>
 
+  LLVM build now builds all libraries as .a files instead of some
+  libraries as relinked .o files.  This requires some APIs like
+  InitializeAllTargets.h.  TargetRegistry! 
+
+
+
 
 <p>In addition, many APIs have changed in this release.  Some of the major LLVM
 API changes are:</p>
 
+
+  API Cleanup:
+    no use of hash_set/hash_map, no more llvm::OStream
+    Use raw_ostream for everything, killed off llvm/Streams.h and DOUT
+
 <ul>
 <li>LLVM's global uniquing tables for <tt>Type</tt>s and <tt>Constant</tt>s have
     been privatized into members of an <tt>LLVMContext</tt>.  A number of APIs
@@ -449,6 +641,64 @@ API changes are:</p>
     <tt>CreateNeg</tt> should only be used for integer arithmetic now;
     <tt>CreateFAdd</tt>, <tt>CreateFSub</tt>, <tt>CreateFMul</tt>, and
     <tt>CreateFNeg</tt> should now be used for floating-point arithmetic.</li>
+<li>The DynamicLibrary class can no longer be constructed, its functionality has
+    moved to static member functions.</li>
+<li><tt>raw_fd_ostream</tt>'s constructor for opening a given filename now
+    takes an extra <tt>Force</tt> argument. If <tt>Force</tt> is set to
+    <tt>false</tt>, an error will be reported if a file with the given name
+    already exists. If <tt>Force</tt> is set to <tt>true</tt>, the file will
+    be silently truncated (which is the behavior before this flag was
+    added).</li>
+<li><tt>SCEVHandle</tt> no longer exists, because reference counting is no
+longer done for <tt>SCEV*</tt> objects, instead <tt>const SCEV*</tt> should be
+used.</li>
+
+<li>Many APIs, notably <tt>llvm::Value</tt>, now use the <tt>StringRef</tt>
+and <tt>Twine</tt> classes instead of passing <tt>const char*</tt>
+or <tt>std::string</tt>, as described in
+the <a href="ProgrammersManual.html#string_apis">Programmer's Manual</a>. Most
+clients should be unaffected by this transition, unless they are used to <tt>Value::getName()</tt> returning a string. Here are some tips on updating to 2.6:
+  <ul>
+    <li><tt>getNameStr()</tt> is still available, and matches the old
+      behavior. Replacing <tt>getName()</tt> calls with this is an safe option,
+      although more efficient alternatives are now possible.</li>
+
+    <li>If you were just relying on <tt>getName()</tt> being able to be sent to
+      a <tt>std::ostream</tt>, consider migrating
+      to <tt>llvm::raw_ostream</tt>.</li>
+      
+    <li>If you were using <tt>getName().c_str()</tt> to get a <tt>const
+        char*</tt> pointer to the name, you can use <tt>getName().data()</tt>.
+        Note that this string (as before), may not be the entire name if the
+        name containts embedded null characters.</li>
+
+    <li>If you were using operator plus on the result of <tt>getName()</tt> and
+      treating the result as an <tt>std::string</tt>, you can either
+      uses <tt>Twine::str</tt> to get the result as an <tt>std::string</tt>, or
+      could move to a <tt>Twine</tt> based design.</li>
+
+    <li><tt>isName()</tt> should be replaced with comparison
+      against <tt>getName()</tt> (this is now efficient).
+  </ul>
+</li>
+
+<li>The registration interfaces for backend Targets has changed (what was
+previously TargetMachineRegistry). For backend authors, see the <a href="WritingAnLLVMBackend.html#TargetRegistration">Writing An LLVM Backend</a> guide. For clients, the notable API changes are:
+  <ul>
+    <li><tt>TargetMachineRegistry</tt> has been renamed
+      to <tt>TargetRegistry</tt>.</li>
+
+    <li>Clients should move to using the <tt>TargetRegistry::lookupTarget()</tt>
+      function to find targets.</li>
+  </ul>
+</li>
+
+<li>llvm-dis now fails if output file exists, instead of dumping to stdout.
+FIXME: describe any other tool changes due to the raw_fd_ostream change.  FIXME:
+This is not an API change, maybe there should be a tool changes section?</li>
+<li>temporarely due to Context API change passes should call doInitialization()
+method of the pass they inherit from, otherwise Context is NULL.
+FIXME: remove this entry when this is no longer needed.<li>
 </ul>
 
 </div>
@@ -467,7 +717,7 @@ API changes are:</p>
 
 <ul>
 <li>Intel and AMD machines (IA32, X86-64, AMD64, EMT-64) running Red Hat
-Linux, Fedora Core and FreeBSD (and probably other unix-like systems).</li>
+Linux, Fedora Core, FreeBSD and AuroraUX (and probably other unix-like systems).</li>
 <li>PowerPC and X86-based Mac OS X systems, running 10.3 and above in 32-bit
 and 64-bit modes.</li>
 <li>Intel and AMD machines running on Win32 using MinGW libraries (native).</li>
@@ -475,7 +725,6 @@ and 64-bit modes.</li>
     support is available for native builds with Visual C++).</li>
 <li>Sun UltraSPARC workstations running Solaris 10.</li>
 <li>Alpha-based machines running Debian GNU/Linux.</li>
-<li>Itanium-based (IA64) machines running Linux and HP-UX.</li>
 </ul>
 
 <p>The core LLVM infrastructure uses GNU autoconf to adapt itself
@@ -498,6 +747,15 @@ listed by component.  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>
 
+<ul>
+<li>LLVM will not correctly compile on Solaris and/or OpenSolaris
+using the stock GCC 3.x.x series 'out the box',
+See: <a href="#brokengcc">Broken versions of GCC and other tools</a>.
+However, A <a href="http://pkg.auroraux.org/GCC">Modern GCC Build</a>
+for x86/x64 has been made available from the third party AuroraUX Project
+that has been meticulously tested for bootstrapping LLVM &amp; Clang.</li>
+</ul>
+
 </div>
 
 <!-- ======================================================================= -->
@@ -515,7 +773,7 @@ components, please contact us on the <a
 href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
 
 <ul>
-<li>The MSIL, IA64, Alpha, SPU, MIPS, and PIC16 backends are experimental.</li>
+<li>The MSIL, Alpha, SPU, MIPS, and PIC16 backends are experimental.</li>
 <li>The <tt>llc</tt> "<tt>-filetype=asm</tt>" (the default) is the only
     supported value for this option.</li>
 </ul>
@@ -572,14 +830,14 @@ compilation, and lacks support for debug information.</li>
 <div class="doc_text">
 
 <ul>
+<li>Support for the Advanced SIMD (Neon) instruction set is still incomplete
+and not well tested.  Some features may not work at all, and the code quality
+may be poor in some cases.</li>
 <li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
 processors, thumb programs can crash or produce 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 (&lt;= 0.9.0) which causes it to incorrectly
- execute
-programs compiled with LLVM.  Please use more recent versions of QEMU.</li>
 </ul>
 
 </div>
@@ -627,21 +885,6 @@ 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>The Itanium backend is highly experimental and has a number of known
-    issues.  We are looking for a maintainer for the Itanium backend.  If you
-    are interested, please contact the LLVMdev mailing list.</li>
-</ul>
-
-</div>
-
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="c-be">Known problems with the C back-end</a>
@@ -753,6 +996,20 @@ ignored</a>.</li>
 </ul>
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+       <a name="ocaml-bindingse">Known problems with the O'Caml bindings</a>
+</div>
+
+<div class="doc_text">
+
+<p>The Llvm.Linkage module is broken, and has incorrect values. Only
+Llvm.Linkage.External, Llvm.Linkage.Available_externally, and
+Llvm.Linkage.Link_once will be correct. If you need any of the other linkage
+modes, you'll have to write an external C library in order to expose the
+functionality. This has been fixed in the trunk.</p>
+</div>
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="additionalinfo">Additional Information</a>