checkpoint.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83716 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-10-10 18:33:13 +00:00
parent 5a2d87541f
commit 39c0e67a89

View File

@ -92,11 +92,10 @@ Almost dead code.
<div class="doc_text"> <div class="doc_text">
<p> <p>
The LLVM 2.6 distribution currently consists of code from the core LLVM The LLVM 2.6 distribution currently consists of code from the core LLVM
repository &mdash;which roughly includes the LLVM optimizers, code generators repository (which roughly includes the LLVM optimizers, code generators
and supporting tools &mdash; and the llvm-gcc repository. In addition to this and supporting tools), the Clang repository and the llvm-gcc repository. In
code, the LLVM Project includes other sub-projects that are in development. The addition to this code, the LLVM Project includes other sub-projects that are in
two which are the most actively developed are the <a href="#clang">Clang development. Here we include updates on these subprojects.
Project</a> and the <a href="#vmkit">VMKit Project</a>.
</p> </p>
</div> </div>
@ -112,8 +111,12 @@ Project</a> and the <a href="#vmkit">VMKit Project</a>.
<p>The <a href="http://clang.llvm.org/">Clang project</a> is an effort to build <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 C family of languages. a set of new 'LLVM native' front-end technologies for the C family of languages.
LLVM 2.6 is the first release to officially include Clang, and it provides a LLVM 2.6 is the first release to officially include Clang, and it provides a
production quality C and Objective-C compiler. If you are interested in fast production quality C and Objective-C compiler. If you are interested in <a
compiles and good diagnostics, we encourage you to try it out.</p> href="http://clang.llvm.org/performance.html">fast compiles</a> and
<a href="http://clang.llvm.org/diagnostics.html">good diagnostics</a>, we
encourage you to try it out. Clang currently compiles typical Objective-C code
3x faster than GCC and compiles C code about 30% faster than GCC at -O0 -g
(which is when the most pressure is on the frontend).</p>
<p>In addition to supporting these languages, C++ support is also <a <p>In addition to supporting these languages, C++ support is also <a
href="http://clang.llvm.org/cxx_status.html">well under way</a>, and mainline href="http://clang.llvm.org/cxx_status.html">well under way</a>, and mainline
@ -127,7 +130,7 @@ list</a>.</p>
<ul> <ul>
<li>C and Objective-C support are now considered production quality.</li> <li>C and Objective-C support are now considered production quality.</li>
<li>AuroraUX / FreeBSD &amp; OpenBSD Toolchain support.</li> <li>AuroraUX, FreeBSD, and OpenBSD are now supported.</li>
<li>Most of Objective-C 2.0 is now supported with the GNU runtime.</li> <li>Most of Objective-C 2.0 is now supported with the GNU runtime.</li>
<li>Many many bugs are fixed and many features have been added.</li> <li>Many many bugs are fixed and many features have been added.</li>
</ul> </ul>
@ -201,8 +204,9 @@ is a simple library that provides an implementation of the low-level
target-specific hooks required by code generation and other runtime components. target-specific hooks required by code generation and other runtime components.
For example, when compiling for a 32-bit target, converting a double to a 64-bit For example, when compiling for a 32-bit target, converting a double to a 64-bit
unsigned integer is compiling into a runtime call to the "__fixunsdfdi" unsigned integer is compiling into a runtime call to the "__fixunsdfdi"
function. The compiler-rt library provides optimized implementations of this and function. The compiler-rt library provides highly optimized implementations of
other low-level routines.</p> this and other low-level routines (some are 3x faster than the equivalent
libgcc routines).</p>
<p> <p>
All of the code in the compiler-rt project is available under the standard LLVM All of the code in the compiler-rt project is available under the standard LLVM
@ -282,6 +286,14 @@ other situations.
</div> </div>
<!-- *********************************************************************** --> <!-- *********************************************************************** -->
<div class="doc_text">
<p>An exciting aspect of LLVM is that it is used as an enabling technology for
a lot of other language and tools projects. This section lists some of the
projects that have already been updated to work with LLVM 2.6.</p>
</div>
<!--=========================================================================--> <!--=========================================================================-->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="Rubinius">Rubinius</a> <a name="Rubinius">Rubinius</a>
@ -440,16 +452,14 @@ in this section.
enables support for <a href="LinkTimeOptimization.html">transparent enables support for <a href="LinkTimeOptimization.html">transparent
link-time optimization</a> on ELF targets when used with the Gold binutils link-time optimization</a> on ELF targets when used with the Gold binutils
linker.</li> linker.</li>
<li>LLVM now supports doing optimization and code generation on multiple threads <li>LLVM now supports doing optimization and code generation on multiple
by allowing multiple "LLVMContext" objects to exist. Please see the <a threads. Please see the <a href="ProgrammersManual.html#threading">LLVM
href="ProgrammersManual.html#threading">threading entry in the Programmer's Programmer's Manual</a> for more information.</li>
Manual</a> for more information.</li>
<li>LLVM now has experimental support for <a <li>LLVM now has experimental support for <a
href="http://nondot.org/~sabre/LLVMNotes/EmbeddedMetadata.txt">embedded href="http://nondot.org/~sabre/LLVMNotes/EmbeddedMetadata.txt">embedded
metadata</a> in LLVM IR, though the implementation is not guaranteed to be metadata</a> in LLVM IR, though the implementation is not guaranteed to be
final and the .bc file format may change in future releases. Debug info final and the .bc file format may change in future releases. Debug info
does not yet use this format in LLVM 2.6.</p> does not yet use this format in LLVM 2.6.</li>
</ul> </ul>
</div> </div>
@ -460,18 +470,54 @@ in this section.
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p>LLVM IR has several new features that are used by our existing front-ends and <p>LLVM IR has several new features for better support of new targets and that
can be useful if you are writing a front-end for LLVM:</p> expose new optimization opportunities:</p>
<ul> <ul>
<li>Getelementpr instruction now allows any integer type for array/pointer indexes.</li> <li>The <a href="LangRef.html#i_add">add</a>, <a
<li>Inbounds for GEP</li> href="LangRef.html#i_sub">sub</a>, and <a href="LangRef.html#i_mul">mul</a>
<li>NSW/NUW/exact div</li> instructions have been split into integer and floating point version (like
<li>LSR promotes int induction variables to 64-bit on 64-bit targets, major perf boost for numerical code.</li> divide and remainder), introducing new <a
<li>LSR now analyzes pointer expressions (e.g. getelementptrs), not just integers.</li> href="LangRef.html#i_fadd">fadd</a>, <a href="LangRef.html#i_fsub">fsub</a>,
<li>new linkage types linkonce_odr, weak_odr, linker_private, and available_externally.</li> and <a href="LangRef.html#i_fmul">fmul</a> instructions.</li>
<li>New fadd, fsub, fmul instructions and classes. </li> <li>The <a href="LangRef.html#i_add">add</a>, <a
<li>Target intrinsics can now return multiple results.</li> href="LangRef.html#i_sub">sub</a>, and <a href="LangRef.html#i_mul">mul</a>
instructions now support optional "nsw" and "nuw" bits which indicate that
the operation is guaranteed to not overflow (in the signed or
unsigned case, respectively). This gives the optimizer more information and
can be used for things C signed integer values, which are undefined on
overflow.</li>
<li>The <a href="LangRef.html#i_sdiv">sdiv</a> instruction now supports an
optional "exact" flag which indicates that the result of the division is
guaranteed to have a remainder of zero. This is useful to optimize pointer
subtraction in C.</li>
<li>The <a href="LangRef.html#i_getelementptr">getelementptr</a> instruction now
supports arbitrary integer index values for array/pointer indices. This
allows for better better code generation on 16-bit targets like PIC16.</li>
<li>The <a href="LangRef.html#i_getelementptr">getelementptr</a> instruction now
supports an "inbounds" optimization hint that tells the optimizer that the
pointer is guaranteed to be within its allocated object.</li>
<li>LLVM now support a series of new linkage types for global values which allow
for better optimization and new capabilities:
<ul>
<li><a href="LangRef.html#linkage_linkonce">linkonce_odr</a> and
<a href="LangRef.html#linkage_weak">weak_odr</a> have the same linkage
semantics as the non-"odr" linkage types. The difference is that these
linkage types indicate that all definitions of the specified function
are guaranteed to have the same semantics. This allows inlining
templates functions in C++ but not inlining weak functions in C,
which previously both got the same linkage type.</li>
<li><a href="LangRef.html#linkage_available_externally">available_externally
</a> is a new linkage type that gives the optimizer visibility into the
definition of a function (allowing inlining and side effect analysis)
but that does not cause code to be generated. This allows better
optimization of "GNU inline" functions, extern templates, etc.</li>
<li><a href="LangRef.html#linkage_linker_private">linker_private</a> is a
new linkage type (which is only useful on Mac OS X) that is used for
some metadata generation and other obscure things.</li>
</ul></li>
<li>Finally, target-specific intrinsics can now return multiple values, which
is useful for modeling target operations with multiple results.</li>
</ul> </ul>
</div> </div>
@ -492,6 +538,8 @@ release includes a few major enhancements and additions to the optimizers:</p>
<li>Inliner reuse stack space when inlining arrays?</li> <li>Inliner reuse stack space when inlining arrays?</li>
<li>Enabled GVN Load PRE.</li> <li>Enabled GVN Load PRE.</li>
<li>New Static Single Information (SSI) construction pass (not used by anything yet, experimental).</li> <li>New Static Single Information (SSI) construction pass (not used by anything yet, experimental).</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> </li>
</ul> </ul>