<!-- Unfinished features in 2.5:
Machine LICM
Machine Sinking
- LegalizeDAGTypes
+ target-specific intrinsics
+ gold lto plugin
+ pre-alloc splitter, strong phi elim
llc -enable-value-prop, propagation of value info (sign/zero ext info) from
one MBB to another
+ debug info for optimized code
+
-->
<!-- for announcement email:
- mention dev mtg
- Xcode 3.1 and 3.1.1.
- -->
+ -->
<!-- *********************************************************************** -->
<div class="doc_section">
<p>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. Clang is continuing to make major strides forward in all
-areas. Its C and Objective-C parsing support is very solid, and the code
-generation support is far enough along to build many C applications. While not
-yet production quality, it is progressing very nicely. In addition, C++
-front-end work has started to make significant progress.</p>
-
-<p>Clang, in conjunction with the <tt>ccc</tt> driver, is now usable as a
-replacement for gcc for building some small- to medium-sized C applications.
-Additionally, Clang now has code generation support for Objective-C on Mac OS X
-platform. Major highlights include:</p>
-
-<ul>
- <li> Clang/ccc pass almost all of the LLVM test suite on Mac OS X and Linux
-on the 32-bit x86 architecture. This includes significant C
-applications such as <a href="http://www.sqlite.org">sqlite3</a>,
-<a href="http://www.lua.org">lua</a>, and
-<a href="http://www.clamav.net">Clam AntiVirus</a>. </li>
-
- <li> Clang can build the majority of Objective-C examples shipped with the
-Mac OS X Developer Tools. </li>
-</ul>
-
-<p>Clang code generation still needs considerable testing and development,
-however. Some areas under active development include:</p>
+and code generator. While Clang is not included in the LLVM 2.5 release, it
+is continuing to make major strides forward in all areas. Its C and Objective-C
+parsing and code generation support is now very solid. For example, it is
+capable of successfully building many real applications for X86-32 and X86-64,
+including the FreeBSD kernel. C++ is also making <a
+href="http://clang.llvm.org/cxx_status.html">incredible progress</a>, and work
+on templates has recently started.</p>
+
+<p>While Clang is not yet production quality, it is progressing very nicely and
+is quite usable for building many C and Objective-C applications. If you are
+interested in fast compiles and good diagnostics, we encourage you to try it out
+by <a href="http://clang.llvm.org/get_started.html">building from mainline</a>
+and reporting any issues you hit to the <a
+href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">Clang front-end mailing
+list</a>.</p>
+
+<p>In the LLVM 2.5 time-frame, the Clang team has made many improvements:</p>
<ul>
- <li> Improved support for C and Objective-C features, for example
- variable-length arrays, va_arg, exception handling (Obj-C), and garbage
- collection (Obj-C). </li>
- <li> ABI compatibility, especially for platforms other than 32-bit
- x86. </li>
-</ul>
-
+<li>Clang now has a new driver, which is focused on providing a GCC-compatible
+ interface.</li>
+<li>The X86-64 ABI is now supported.</li>
+<li>Precompiled header support is now implemented.</li>
+<li>Objective-C support is significantly improved beyond LLVM 2.4, supporting
+ many features, such as Objective-C Garbage Collection.</li>
+<li>Many many bugs are fixed.</li>
</div>
<!--=========================================================================-->
a JVM and a CLI Virtual Machines (Microsoft .NET is an
implementation of the CLI) using the Just-In-Time compiler of LLVM.</p>
-<p>Following LLVM 2.5, VMKit has its first release 0.24 that you can find on its
+<p>Following LLVM 2.5, VMKit has its first release ? that you can find on its
<a href="http://vmkit.llvm.org/releases/">webpage</a>. The release includes
bug fixes, cleanup and new features. The major changes are:</p>
<p>LLVM 2.5 includes several major new capabilities:</p>
<ul>
-<li><p>?</p></li>
+<li><p>The code generator now supports arbitrary precision integers.
+Types like <tt>i33</tt> have long been valid in the LLVM IR, but previously
+could only be used with the interpreter.
+Now IR using such types can be compiled to native code on all targets.
+All operations are supported if the integer is not bigger than twice the
+target machine word size.
+Simple operations like loads, stores and shifts by a constant amount are
+supported for integers of any size.
+</p></li>
+
+<!--
+Random stuff:
+
+xcore backend!
+fortran on darwin!
+
+.ll parser rewrite.
+GCC inliner off.
+cmake mature?
+x86 backend FS/GS segment address spaces?
+nocapture
+memdep is faster / more aggressive.
+how to write a backend doc docs/WritingAnLLVMBackend.html
+fastisel + exception handling
+vector widening <3 x float> -> <4 x float>
+arm port improvements? arm jit encoding stuff, constant island support?
+JIT TLS support on x86
+mem2reg now faster on code with huge basic blocks
+stack protectors/stack canaries, -fstack-protector, controllable on a
+ per-function basis with attributes.
+shufflevector is generalized to allow different shuffle mask width than its
+ input vectors.
+loop optimizer improves floating point induction variables
+llvm/Analysis/DebugInfo.h classes, llvm-gcc and clang and codegen use them.
+asmprinters seperate from targets for jits
+-->
</ul>
faster:</p>
<ul>
+<li>The type legalization logic has been completely rewritten, and is now
+more powerful (it supports arbitrary precision integer types for example)
+and hopefully more correct.
+The type legalizer converts operations on types that are not natively
+supported by the target machine into equivalent code sequences that only use
+natively supported types.
+The old type legalizer is still available and will be used if
+<tt>-disable-legalize-types</tt> is passed to <tt>llc</tt>.
+</li>
<li>?</li>
</ul>
C++ programs</a>, preventing intermixing between C++ compiled by the CBE and
C++ code compiled with llc or native compilers.</li>
<li>The C backend does not support all exception handling constructs.</li>
+<li>The C backend does not support arbitrary precision integers.</li>
</ul>
</div>
however it <a href="http://llvm.org/PR2006">also fails to build on X86-64</a>
which does support trampolines.</li>
<li>The Ada front-end <a href="http://llvm.org/PR2007">fails to bootstrap</a>.
+This is due to lack of LLVM support for <tt>setjmp</tt>/<tt>longjmp</tt> style
+exception handling, which is used internally by the compiler.
Workaround: configure with --disable-bootstrap.</li>
<li>The c380004, <a href="http://llvm.org/PR2010">c393010</a>
and <a href="http://llvm.org/PR2421">cxg2021</a> ACATS tests fail
-(c380004 also fails with gcc-4.2 mainline).</li>
+(c380004 also fails with gcc-4.2 mainline).
+If the compiler is built with checks disabled then <a href="http://llvm.org/PR2010">c393010</a>
+causes the compiler to go into an infinite loop, using up all system memory.</li>
<li>Some gcc specific Ada tests continue to crash the compiler.</li>
<li>The -E binder option (exception backtraces)
<a href="http://llvm.org/PR1982">does not work</a> and will result in programs