summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/AliasAnalysis.html10
-rw-r--r--docs/BitCodeFormat.html17
-rw-r--r--docs/CMake.html45
-rw-r--r--docs/CodeGenerator.html6
-rw-r--r--docs/CommandGuide/bugpoint.pod4
-rw-r--r--docs/CommandGuide/index.html5
-rw-r--r--docs/CommandGuide/llvm-diff.pod53
-rw-r--r--docs/DeveloperPolicy.html54
-rw-r--r--docs/GCCFEBuildInstrs.html16
-rw-r--r--docs/GetElementPtr.html13
-rw-r--r--docs/GoldPlugin.html8
-rw-r--r--docs/LangRef.html129
-rw-r--r--docs/MakefileGuide.html5
-rw-r--r--docs/Passes.html49
-rw-r--r--docs/ProgrammersManual.html6
-rw-r--r--docs/ReleaseNotes.html598
-rw-r--r--docs/TestingGuide.html223
-rw-r--r--docs/WritingAnLLVMBackend.html5
-rw-r--r--docs/WritingAnLLVMPass.html59
-rw-r--r--docs/tutorial/LangImpl3.html10
-rw-r--r--docs/tutorial/LangImpl5.html6
-rw-r--r--docs/tutorial/LangImpl6.html4
-rw-r--r--docs/tutorial/LangImpl7.html6
23 files changed, 456 insertions, 875 deletions
diff --git a/docs/AliasAnalysis.html b/docs/AliasAnalysis.html
index a23d908..cffaa82 100644
--- a/docs/AliasAnalysis.html
+++ b/docs/AliasAnalysis.html
@@ -238,10 +238,10 @@ a location, ModRef is returned.</p>
<p>The <tt>AliasAnalysis</tt> class also provides a <tt>getModRefInfo</tt>
method for testing dependencies between function calls. This method takes two
-call sites (CS1 &amp; CS2), returns NoModRef if the two calls refer to disjoint
-memory locations, Ref if CS1 reads memory written by CS2, Mod if CS1 writes to
-memory read or written by CS2, or ModRef if CS1 might read or write memory
-accessed by CS2. Note that this relation is not commutative.</p>
+call sites (CS1 &amp; CS2), returns NoModRef if neither call writes to memory
+read or written by the other, Ref if CS1 reads memory written by CS2, Mod if CS1
+writes to memory read or written by CS2, or ModRef if CS1 might read or write
+memory written to by CS2. Note that this relation is not commutative.</p>
</div>
@@ -998,7 +998,7 @@ analysis directly.</p>
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-07 16:27:09 +0200 (Wed, 07 Jul 2010) $
+ Last modified: $Date: 2010-08-31 01:47:24 +0200 (Tue, 31 Aug 2010) $
</address>
</body>
diff --git a/docs/BitCodeFormat.html b/docs/BitCodeFormat.html
index f1f175d..bd53a1e 100644
--- a/docs/BitCodeFormat.html
+++ b/docs/BitCodeFormat.html
@@ -1367,21 +1367,6 @@ type to the type table.
</p>
</div>
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_UNION">TYPE_CODE_UNION Record</a>
-</div>
-
-<div class="doc_text">
-
-<p><tt>[UNION, ...eltty...]</tt></p>
-
-<p>The <tt>UNION</tt> record (code 17) adds a <tt>union</tt> type to
-the type table. The <i>eltty</i> operand fields are zero or more type
-indices representing the element types of the union.
-</p>
-
-</div>
-
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="CONSTANTS_BLOCK">CONSTANTS_BLOCK Contents</a>
</div>
@@ -1489,7 +1474,7 @@ name. Each entry corresponds to a single named type.
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
-Last modified: $Date: 2010-05-22 00:20:54 +0200 (Sat, 22 May 2010) $
+Last modified: $Date: 2010-08-28 06:09:24 +0200 (Sat, 28 Aug 2010) $
</address>
</body>
</html>
diff --git a/docs/CMake.html b/docs/CMake.html
index 40a2cec..ca0b50f 100644
--- a/docs/CMake.html
+++ b/docs/CMake.html
@@ -313,9 +313,15 @@
<div class="doc_text">
-<p>LLVM testing is not supported on Visual Studio.</p>
+<p>Testing is performed when the <i>check</i> target is built. For
+ instance, if you are using makefiles, execute this command while on
+ the top level of your build directory:</p>
-<p>TODO</p>
+<div class="doc_code">
+ <p><tt>make check</tt></p>
+</div>
+
+<p>Testing is not supported on Visual Studio.</p>
</div>
@@ -348,7 +354,38 @@
<div class="doc_text">
-<p>TODO</p>
+ <p>The most difficult part of adding LLVM to the build of a project
+ is to determine the set of LLVM libraries corresponding to the set
+ of required LLVM features. What follows is an example of how to
+ obtain this information:</p>
+
+ <div class="doc_code">
+ <pre>
+ <b># A convenience variable:</b>
+ set(LLVM_ROOT "" CACHE PATH "Root of LLVM install.")
+ <b># A bit of a sanity check:</b>
+ if( NOT EXISTS ${LLVM_ROOT}/include/llvm )
+ message(FATAL_ERROR "LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install")
+ endif()
+ <b># We incorporate the CMake features provided by LLVM:</b>
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_ROOT}/share/llvm/cmake")
+ include(LLVM)
+ <b># Now set the header and library paths:</b>
+ include_directories( ${LLVM_ROOT}/include )
+ link_directories( ${LLVM_ROOT}/lib )
+ <b># Let's suppose we want to build a JIT compiler with support for
+ # binary code (no interpreter):</b>
+ llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)
+ <b># Finally, we link the LLVM libraries to our executable:</b>
+ target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES})
+ </pre>
+ </div>
+
+ <p>This assumes that LLVM_ROOT points to an install of LLVM. The
+ procedure works too for uninstalled builds although we need to take
+ care to add an <i>include_directories</i> for the location of the
+ headers on the LLVM source directory (if we are building
+ out-of-source.)</p>
</div>
@@ -377,7 +414,7 @@
<a href="mailto:ofv@wanadoo.es">Oscar Fuentes</a><br>
<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2008-12-31 03:59:36 +0100 (Wed, 31 Dec 2008) $
+ Last modified: $Date: 2010-08-09 03:59:36 +0100 (Mon, 9 Aug 2010) $
</address>
</body>
diff --git a/docs/CodeGenerator.html b/docs/CodeGenerator.html
index 4071787..4b2e261 100644
--- a/docs/CodeGenerator.html
+++ b/docs/CodeGenerator.html
@@ -1457,8 +1457,8 @@ bool RegMapping_Fer::compatible_class(MachineFunction &amp;mf,
order to get and store values in memory. To assign a physical register to a
virtual register present in a given operand,
use <tt>MachineOperand::setReg(p_reg)</tt>. To insert a store instruction,
- use <tt>TargetRegisterInfo::storeRegToStackSlot(...)</tt>, and to insert a
- load instruction, use <tt>TargetRegisterInfo::loadRegFromStackSlot</tt>.</p>
+ use <tt>TargetInstrInfo::storeRegToStackSlot(...)</tt>, and to insert a
+ load instruction, use <tt>TargetInstrInfo::loadRegFromStackSlot</tt>.</p>
<p>The indirect mapping shields the application developer from the complexities
of inserting load and store instructions. In order to map a virtual register
@@ -2162,7 +2162,7 @@ MOVSX32rm16 -&gt; movsx, 32-bit register, 16-bit memory
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-06-15 23:58:33 +0200 (Tue, 15 Jun 2010) $
+ Last modified: $Date: 2010-09-01 00:01:07 +0200 (Wed, 01 Sep 2010) $
</address>
</body>
diff --git a/docs/CommandGuide/bugpoint.pod b/docs/CommandGuide/bugpoint.pod
index 7afeea1..1870a0d 100644
--- a/docs/CommandGuide/bugpoint.pod
+++ b/docs/CommandGuide/bugpoint.pod
@@ -67,6 +67,10 @@ tool.
Pass all arguments specified after B<--gcc-tool-args> to the invocation of
B<gcc>.
+=item B<--opt-args> I<opt args>
+
+Pass all arguments specified after B<--opt-args> to the invocation of B<opt>.
+
=item B<--disable-{dce,simplifycfg}>
Do not run the specified passes to clean up and reduce the size of the test
diff --git a/docs/CommandGuide/index.html b/docs/CommandGuide/index.html
index 62cb776..67f0cfc 100644
--- a/docs/CommandGuide/index.html
+++ b/docs/CommandGuide/index.html
@@ -72,6 +72,9 @@ options) arguments to the tool you are interested in.</p>
<li><a href="/cmds/llvmc.html"><b>llvmc</b></a> -
a generic customizable compiler driver</li>
+<li><a href="/cmds/llvm-diff.html"><b>llvm-diff</b></a> -
+ structurally compare two modules</li>
+
</ul>
</div>
@@ -148,7 +151,7 @@ options) arguments to the tool you are interested in.</p>
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-05-11 18:47:42 +0200 (Tue, 11 May 2010) $
+ Last modified: $Date: 2010-09-08 01:32:02 +0200 (Wed, 08 Sep 2010) $
</address>
</body>
diff --git a/docs/CommandGuide/llvm-diff.pod b/docs/CommandGuide/llvm-diff.pod
new file mode 100644
index 0000000..c8cfdb3
--- /dev/null
+++ b/docs/CommandGuide/llvm-diff.pod
@@ -0,0 +1,53 @@
+=pod
+
+=head1 NAME
+
+llvm-diff - LLVM structural 'diff'
+
+=head1 SYNOPSIS
+
+B<llvm-diff> [I<options>] I<module 1> I<module 2> [I<global name ...>]
+
+=head1 DESCRIPTION
+
+B<llvm-diff> compares the structure of two LLVM modules, primarily
+focusing on differences in function definitions. Insignificant
+differences, such as changes in the ordering of globals or in the
+names of local values, are ignored.
+
+An input module will be interpreted as an assembly file if its name
+ends in '.ll'; otherwise it will be read in as a bitcode file.
+
+If a list of global names is given, just the values with those names
+are compared; otherwise, all global values are compared, and
+diagnostics are produced for globals which only appear in one module
+or the other.
+
+B<llvm-diff> compares two functions by comparing their basic blocks,
+beginning with the entry blocks. If the terminators seem to match,
+then the corresponding successors are compared; otherwise they are
+ignored. This algorithm is very sensitive to changes in control flow,
+which tend to stop any downstream changes from being detected.
+
+B<llvm-diff> is intended as a debugging tool for writers of LLVM
+passes and frontends. It does not have a stable output format.
+
+=head1 EXIT STATUS
+
+If B<llvm-diff> finds no differences between the modules, it will exit
+with 0 and produce no output. Otherwise it will exit with a non-zero
+value.
+
+=head1 BUGS
+
+Many important differences, like changes in linkage or function
+attributes, are not diagnosed.
+
+Changes in memory behavior (for example, coalescing loads) can cause
+massive detected differences in blocks.
+
+=head1 AUTHORS
+
+Maintained by the LLVM Team (L<http://llvm.org>).
+
+=cut
diff --git a/docs/DeveloperPolicy.html b/docs/DeveloperPolicy.html
index 37bfb89..4735200 100644
--- a/docs/DeveloperPolicy.html
+++ b/docs/DeveloperPolicy.html
@@ -43,7 +43,8 @@
is to eliminate miscommunication, rework, and confusion that might arise from
the distributed nature of LLVM's development. By stating the policy in clear
terms, we hope each developer can know ahead of time what to expect when
- making LLVM contributions.</p>
+ making LLVM contributions. This policy covers all llvm.org subprojects,
+ including Clang, LLDB, etc.</p>
<p>This policy is also designed to accomplish the following objectives:</p>
<ol>
@@ -77,17 +78,28 @@
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="informed">Stay Informed</a> </div>
<div class="doc_text">
-<p>Developers should stay informed by reading at least the
- <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> email
- list. If you are doing anything more than just casual work on LLVM, it is
- suggested that you also subscribe to the
- <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>
- list and pay attention to changes being made by others.</p>
+<p>Developers should stay informed by reading at least the "dev" mailing list
+ for the projects you are interested in, such as
+ <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> for
+ LLVM, <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
+ for Clang, or <a
+ href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">lldb-dev</a>
+ for LLDB. If you are doing anything more than just casual work on LLVM, it
+ is suggested that you also subscribe to the "commits" mailing list for the
+ subproject you're interested in, such as
+ <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>,
+ <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>,
+ or <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits">lldb-commits</a>.
+ Reading the "commits" list and paying attention to changes being made by
+ others is a good way to see what other people are interested in and watching
+ the flow of the project as a whole.</p>
<p>We recommend that active developers register an email account with
<a href="http://llvm.org/bugs/">LLVM Bugzilla</a> and preferably subscribe to
the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs">llvm-bugs</a>
- email list to keep track of bugs and enhancements occurring in LLVM.</p>
+ email list to keep track of bugs and enhancements occurring in LLVM. We
+ really appreciate people who are proactive at catching incoming bugs in their
+ components and dealing with them promptly.</p>
</div>
<!-- _______________________________________________________________________ -->
@@ -107,18 +119,13 @@
patches may not apply correctly if the underlying code changes between the
time the patch was created and the time it is applied.</li>
- <li>Patches should be made with this command:
-<div class="doc_code">
-<pre>
-svn diff
-</pre>
-</div>
- or with the utility <tt>utils/mkpatch</tt>, which makes it easy to read
- the diff.</li>
+ <li>Patches should be made with <tt>svn diff</tt>, or similar. If you use
+ a different tool, make sure it uses the <tt>diff -u</tt> format and
+ that it doesn't contain clutter which makes it hard to read.</li>
- <li>Patches should not include differences in generated code such as the code
- generated by <tt>autoconf</tt> or <tt>tblgen</tt>. The
- <tt>utils/mkpatch</tt> utility takes care of this for you.</li>
+ <li>If you are modifying generated files, such as the top-level
+ <tt>configure</tt> script, please separate out those changes into
+ a separate patch from the rest of your changes.</li>
</ol>
<p>When sending a patch to a mailing list, it is a good idea to send it as an
@@ -239,8 +246,9 @@ svn diff
them short.</li>
</ol>
-<p>Note that llvm/test is designed for regression and small feature tests
- only. More extensive test cases (e.g., entire applications, benchmarks, etc)
+<p>Note that llvm/test and clang/test are designed for regression and small
+ feature tests only. More extensive test cases (e.g., entire applications,
+ benchmarks, etc)
should be added to the <tt>llvm-test</tt> test suite. The llvm-test suite is
for coverage (correctness, performance, etc) testing, not feature or
regression testing.</p>
@@ -263,7 +271,7 @@ svn diff
testcase</a> so we know if the fix/feature ever regresses in the
future.</li>
- <li>Code must pass the dejagnu (<tt>llvm/test</tt>) test suite.</li>
+ <li>Code must pass the <tt>llvm/test</tt> test suite.</li>
<li>The code must not cause regressions on a reasonable subset of llvm-test,
where "reasonable" depends on the contributor's judgement and the scope of
@@ -601,7 +609,7 @@ Changes</a></div>
Written by the
<a href="mailto:llvm-oversight@cs.uiuc.edu">LLVM Oversight Group</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $
+ Last modified: $Date: 2010-09-02 02:09:17 +0200 (Thu, 02 Sep 2010) $
</address>
</body>
</html>
diff --git a/docs/GCCFEBuildInstrs.html b/docs/GCCFEBuildInstrs.html
index f4eccf79..0b2827c 100644
--- a/docs/GCCFEBuildInstrs.html
+++ b/docs/GCCFEBuildInstrs.html
@@ -84,7 +84,7 @@ top-level <tt>README.LLVM</tt> file, adding ",ada" to EXTRALANGS, for example:
<li><p>The build requires having a compiler that supports Ada, C and C++.
The Ada front-end is written in Ada so an Ada compiler is needed to
build it. Compilers known to work with the
- <a href="http://llvm.org/releases/download.html">LLVM 2.5 release</a>
+ <a href="http://llvm.org/releases/download.html">LLVM 2.7 release</a>
are <a href="http://gcc.gnu.org/releases.html">gcc-4.2</a> and the
2005, 2006 and 2007 versions of the
<a href="http://libre.adacore.com/">GNAT GPL Edition</a>.
@@ -116,9 +116,9 @@ top-level <tt>README.LLVM</tt> file, adding ",ada" to EXTRALANGS, for example:
and unpack it:</p>
<pre class="doc_code">
-wget http://llvm.org/releases/2.5/llvm-2.5.tar.gz
-tar xzf llvm-2.5.tar.gz
-mv llvm-2.5 llvm
+wget http://llvm.org/releases/2.7/llvm-2.7.tgz
+tar xzf llvm-2.7.tgz
+mv llvm-2.7 llvm
</pre>
<p>or <a href="GettingStarted.html#checkout">check out the
@@ -133,9 +133,9 @@ mv llvm-2.5 llvm
and unpack it:</p>
<pre class="doc_code">
-wget http://llvm.org/releases/2.5/llvm-gcc-4.2-2.5.source.tar.gz
-tar xzf llvm-gcc-4.2-2.5.source.tar.gz
-mv llvm-gcc4.2-2.5.source llvm-gcc-4.2
+wget http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
+tar xzf llvm-gcc-4.2-2.7.source.tgz
+mv llvm-gcc-4.2-2.7.source llvm-gcc-4.2
</pre>
<p>or <a href="GettingStarted.html#checkout">check out the
@@ -272,7 +272,7 @@ More information is <a href="FAQ.html#license">available in the FAQ</a>.
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $
+ Last modified: $Date: 2010-08-31 21:40:21 +0200 (Tue, 31 Aug 2010) $
</address>
</body>
diff --git a/docs/GetElementPtr.html b/docs/GetElementPtr.html
index aa874ae..d840c97 100644
--- a/docs/GetElementPtr.html
+++ b/docs/GetElementPtr.html
@@ -26,7 +26,6 @@
<li><a href="#lead0">Why don't GEP x,0,0,1 and GEP x,1 alias? </a></li>
<li><a href="#trail0">Why do GEP x,1,0,0 and GEP x,1 alias? </a></li>
<li><a href="#vectors">Can GEP index into vector elements?</a>
- <li><a href="#unions">Can GEP index into unions?</a>
<li><a href="#addrspace">What effect do address spaces have on GEPs?</a>
<li><a href="#int">How is GEP different from ptrtoint, arithmetic, and inttoptr?</a></li>
<li><a href="#be">I'm writing a backend for a target which needs custom lowering for GEP. How do I do this?</a>
@@ -370,16 +369,6 @@ idx3 = (char*) &amp;MyVar + 8
<!-- *********************************************************************** -->
<div class="doc_subsection">
- <a name="unions"><b>Can GEP index into unions?</b></a>
-</div>
-<div class="doc_text">
- <p>Unknown.</p>
-
-</div>
-
-<!-- *********************************************************************** -->
-
-<div class="doc_subsection">
<a name="addrspace"><b>What effect do address spaces have on GEPs?</b></a>
</div>
<div class="doc_text">
@@ -730,7 +719,7 @@ idx3 = (char*) &amp;MyVar + 8
<a href="http://validator.w3.org/check/referer"><img
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br/>
- Last modified: $Date: 2010-07-06 17:26:33 +0200 (Tue, 06 Jul 2010) $
+ Last modified: $Date: 2010-08-28 06:09:24 +0200 (Sat, 28 Aug 2010) $
</address>
</body>
</html>
diff --git a/docs/GoldPlugin.html b/docs/GoldPlugin.html
index 66e099b..3f2e9fb 100644
--- a/docs/GoldPlugin.html
+++ b/docs/GoldPlugin.html
@@ -79,7 +79,7 @@ placed.
the plugin <tt>.so</tt> file. To find out what link command <tt>gcc</tt>
would run in a given situation, run <tt>gcc -v <em>[...]</em></tt> and look
for the line where it runs <tt>collect2</tt>. Replace that with
- <tt>ld-new -plugin /path/to/libLLVMgold.so</tt> to test it out. Once you're
+ <tt>ld-new -plugin /path/to/LLVMgold.so</tt> to test it out. Once you're
ready to switch to using gold, backup your existing <tt>/usr/bin/ld</tt>
then replace it with <tt>ld-new</tt>.</p>
<p>You can produce bitcode files from <tt>llvm-gcc</tt> using
@@ -91,7 +91,7 @@ placed.
linker, which is why you need gold to be the installed system linker in your
path.</p>
<p>If you want <tt>ar</tt> and <tt>nm</tt> to work seamlessly as well, install
- <tt>libLLVMgold.so</tt> to <tt>/usr/lib/bfd-plugins</tt>. If you built your
+ <tt>LLVMgold.so</tt> to <tt>/usr/lib/bfd-plugins</tt>. If you built your
own gold, be sure to install the <tt>ar</tt> and <tt>nm-new</tt> you built to
<tt>/usr/bin</tt>.
<p>
@@ -157,9 +157,9 @@ $ llvm-gcc -use-gold-plugin a.a b.o -o main # &lt;-- link with LLVMgold plugin
bitcode, everything is in place for an easy to use LTO build of autotooled
projects:</p>
<ul>
- <li>Follow the instructions <a href="#build">on how to build libLLVMgold.so</a>.</li>
+ <li>Follow the instructions <a href="#build">on how to build LLVMgold.so</a>.</li>
<li>Install the newly built binutils to <tt>$PREFIX</tt></li>
- <li>Copy <tt>Release/lib/libLLVMgold.so</tt> to
+ <li>Copy <tt>Release/lib/LLVMgold.so</tt> to
<tt>$PREFIX/libexec/gcc/x86_64-unknown-linux-gnu/4.2.1/</tt> and
<tt>$PREFIX/lib/bfd-plugins/</tt></li>
<li>Set environment variables (<tt>$PREFIX</tt> is where you installed llvm-gcc and
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 4b4348d..b717531 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -25,6 +25,7 @@
<li><a href="#linkage_private">'<tt>private</tt>' Linkage</a></li>
<li><a href="#linkage_linker_private">'<tt>linker_private</tt>' Linkage</a></li>
<li><a href="#linkage_linker_private_weak">'<tt>linker_private_weak</tt>' Linkage</a></li>
+ <li><a href="#linkage_linker_private_weak_def_auto">'<tt>linker_private_weak_def_auto</tt>' Linkage</a></li>
<li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
<li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
<li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
@@ -73,7 +74,6 @@
<li><a href="#t_array">Array Type</a></li>
<li><a href="#t_struct">Structure Type</a></li>
<li><a href="#t_pstruct">Packed Structure Type</a></li>
- <li><a href="#t_union">Union Type</a></li>
<li><a href="#t_vector">Vector Type</a></li>
</ol>
</li>
@@ -491,20 +491,21 @@
the "hello world" module:</p>
<pre class="doc_code">
-<i>; Declare the string constant as a global constant.</i>
-<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00" <i>; [13 x i8]*</i>
+<i>; Declare the string constant as a global constant.</i>&nbsp;
+<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00" <i>; [13 x i8]*</i>&nbsp;
-<i>; External declaration of the puts function</i>
-<a href="#functionstructure">declare</a> i32 @puts(i8*) <i>; i32 (i8*)* </i>
+<i>; External declaration of the puts function</i>&nbsp;
+<a href="#functionstructure">declare</a> i32 @puts(i8*) <i>; i32 (i8*)* </i>&nbsp;
<i>; Definition of main function</i>
-define i32 @main() { <i>; i32()* </i>
- <i>; Convert [13 x i8]* to i8 *...</i>
- %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0 <i>; i8*</i>
+define i32 @main() { <i>; i32()* </i>&nbsp;
+ <i>; Convert [13 x i8]* to i8 *...</i>&nbsp;
+ %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0 <i>; i8*</i>&nbsp;
- <i>; Call puts function to write out the string to stdout.</i>
- <a href="#i_call">call</a> i32 @puts(i8* %cast210) <i>; i32</i>
- <a href="#i_ret">ret</a> i32 0<br>}
+ <i>; Call puts function to write out the string to stdout.</i>&nbsp;
+ <a href="#i_call">call</a> i32 @puts(i8* %cast210) <i>; i32</i>&nbsp;
+ <a href="#i_ret">ret</a> i32 0&nbsp;
+}
<i>; Named metadata</i>
!1 = metadata !{i32 41}
@@ -556,6 +557,15 @@ define i32 @main() { <i>; i32()* </i>
linker. The symbols are removed by the linker from the final linked image
(executable or dynamic library).</dd>
+ <dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt>
+ <dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address
+ of the object is not taken. For instance, functions that had an inline
+ definition, but the compiler decided not to inline it. Note,
+ unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>,
+ <tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt>
+ visibility. The symbols are removed by the linker from the final linked
+ image (executable or dynamic library).</dd>
+
<dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt>
<dd>Similar to private, but the value shows as a local symbol
(<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
@@ -788,7 +798,7 @@ define i32 @main() { <i>; i32()* </i>
</pre>
<p>You may give a name to any <a href="#typesystem">type</a> except
- "<a href="t_void">void</a>". Type name aliases may be used anywhere a type
+ "<a href="#t_void">void</a>". Type name aliases may be used anywhere a type
is expected with the syntax "%mytype".</p>
<p>Note that type names are aliases for the structural type that they indicate,
@@ -949,15 +959,17 @@ define [<a href="#linkage">linkage</a>] [<a href="#visibility">visibility</a>]
<div class="doc_text">
<p>Named metadata is a collection of metadata. <a href="#metadata">Metadata
- nodes</a> (but not metadata strings) and null are the only valid operands for
+ nodes</a> (but not metadata strings) are the only valid operands for
a named metadata.</p>
<h5>Syntax:</h5>
<pre class="doc_code">
-; An unnamed metadata node, which is referenced by the named metadata.
+; Some unnamed metadata nodes, which are referenced by the named metadata.
+!0 = metadata !{metadata !"zero"}
!1 = metadata !{metadata !"one"}
+!2 = metadata !{metadata !"two"}
; A named metadata.
-!name = !{null, !1}
+!name = !{!0, !1, !2}
</pre>
</div>
@@ -1462,7 +1474,6 @@ Classifications</a> </div>
<a href="#t_pointer">pointer</a>,
<a href="#t_vector">vector</a>,
<a href="#t_struct">structure</a>,
- <a href="#t_union">union</a>,
<a href="#t_array">array</a>,
<a href="#t_label">label</a>,
<a href="#t_metadata">metadata</a>.
@@ -1482,7 +1493,6 @@ Classifications</a> </div>
<a href="#t_pointer">pointer</a>,
<a href="#t_struct">structure</a>,
<a href="#t_pstruct">packed structure</a>,
- <a href="#t_union">union</a>,
<a href="#t_vector">vector</a>,
<a href="#t_opaque">opaque</a>.
</td>
@@ -1630,8 +1640,8 @@ Classifications</a> </div>
<p>Aggregate Types are a subset of derived types that can contain multiple
member types. <a href="#t_array">Arrays</a>,
- <a href="#t_struct">structs</a>, <a href="#t_vector">vectors</a> and
- <a href="#t_union">unions</a> are aggregate types.</p>
+ <a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are
+ aggregate types.</p>
</div>
@@ -1701,9 +1711,7 @@ Classifications</a> </div>
<h5>Overview:</h5>
<p>The function type can be thought of as a function signature. It consists of
a return type and a list of formal parameter types. The return type of a
- function type is a scalar type, a void type, a struct type, or a union
- type. If the return type is a struct type then all struct elements must be
- of first class types, and the struct must have at least one element.</p>
+ function type is a first class type or a void type.</p>
<h5>Syntax:</h5>
<pre>
@@ -1825,53 +1833,6 @@ Classifications</a> </div>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_union">Union Type</a> </div>
-
-<div class="doc_text">
-
-<h5>Overview:</h5>
-<p>A union type describes an object with size and alignment suitable for
- an object of any one of a given set of types (also known as an "untagged"
- union). It is similar in concept and usage to a
- <a href="#t_struct">struct</a>, except that all members of the union
- have an offset of zero. The elements of a union may be any type that has a
- size. Unions must have at least one member - empty unions are not allowed.
- </p>
-
-<p>The size of the union as a whole will be the size of its largest member,
- and the alignment requirements of the union as a whole will be the largest
- alignment requirement of any member.</p>
-
-<p>Union members are accessed using '<tt><a href="#i_load">load</a></tt> and
- '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
- the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.
- Since all members are at offset zero, the getelementptr instruction does
- not affect the address, only the type of the resulting pointer.</p>
-
-<h5>Syntax:</h5>
-<pre>
- union { &lt;type list&gt; }
-</pre>
-
-<h5>Examples:</h5>
-<table class="layout">
- <tr class="layout">
- <td class="left"><tt>union { i32, i32*, float }</tt></td>
- <td class="left">A union of three types: an <tt>i32</tt>, a pointer to
- an <tt>i32</tt>, and a <tt>float</tt>.</td>
- </tr><tr class="layout">
- <td class="left">
- <tt>union {&nbsp;float,&nbsp;i32&nbsp;(i32)&nbsp;*&nbsp;}</tt></td>
- <td class="left">A union, where the first element is a <tt>float</tt> and the
- second element is a <a href="#t_pointer">pointer</a> to a
- <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
- an <tt>i32</tt>.</td>
- </tr>
-</table>
-
-</div>
-
-<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
<div class="doc_text">
@@ -2112,14 +2073,6 @@ Classifications</a> </div>
the number and types of elements must match those specified by the
type.</dd>
- <dt><b>Union constants</b></dt>
- <dd>Union constants are represented with notation similar to a structure with
- a single element - that is, a single typed element surrounded
- by braces (<tt>{}</tt>)). For example: "<tt>{ i32 4 }</tt>". The
- <a href="#t_union">union type</a> can be initialized with a single-element
- struct as long as the type of the struct element matches the type of
- one of the union members.</dd>
-
<dt><b>Array constants</b></dt>
<dd>Array constants are represented with notation similar to array type
definitions (a comma separated list of elements, surrounded by square
@@ -4140,7 +4093,7 @@ Instruction</a> </div>
<h5>Arguments:</h5>
<p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
- of <a href="#t_struct">struct</a>, <a href="#t_union">union</a> or
+ of <a href="#t_struct">struct</a> or
<a href="#t_array">array</a> type. The operands are constant indices to
specify which value to extract in a similar manner as indices in a
'<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
@@ -4174,7 +4127,7 @@ Instruction</a> </div>
<h5>Arguments:</h5>
<p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
- of <a href="#t_struct">struct</a>, <a href="#t_union">union</a> or
+ of <a href="#t_struct">struct</a> or
<a href="#t_array">array</a> type. The second operand is a first-class
value to insert. The following operands are constant indices indicating
the position at which to insert the value in a similar manner as indices in a
@@ -4407,12 +4360,12 @@ Instruction</a> </div>
indexes a value of the type pointed to (not necessarily the value directly
pointed to, since the first index can be non-zero), etc. The first type
indexed into must be a pointer value, subsequent types can be arrays,
- vectors, structs and unions. Note that subsequent types being indexed into
+ vectors, and structs. Note that subsequent types being indexed into
can never be pointers, since that would require loading the pointer before
continuing calculation.</p>
<p>The type of each index argument depends on the type it is indexing into.
- When indexing into a (optionally packed) structure or union, only <tt>i32</tt>
+ When indexing into a (optionally packed) structure, only <tt>i32</tt>
integer <b>constants</b> are allowed. When indexing into an array, pointer
or vector, integers of any width are allowed, and they are not required to be
constant.</p>
@@ -6117,8 +6070,8 @@ LLVM</a>.</p>
<h5>Syntax:</h5>
<p>This is an overloaded intrinsic. You can use llvm.memset on any integer bit
- width and for different address spaces. Not all targets support all bit
- widths however.</p>
+ width and for different address spaces. However, not all targets support all
+ bit widths.</p>
<pre>
declare void @llvm.memset.p0i8.i32(i8* &lt;dest&gt;, i8 &lt;val&gt;,
@@ -6132,14 +6085,14 @@ LLVM</a>.</p>
particular byte value.</p>
<p>Note that, unlike the standard libc function, the <tt>llvm.memset</tt>
- intrinsic does not return a value, takes extra alignment/volatile arguments,
- and the destination can be in an arbitrary address space.</p>
+ intrinsic does not return a value and takes extra alignment/volatile
+ arguments. Also, the destination can be in an arbitrary address space.</p>
<h5>Arguments:</h5>
<p>The first argument is a pointer to the destination to fill, the second is the
- byte value to fill it with, the third argument is an integer argument
+ byte value with which to fill it, the third argument is an integer argument
specifying the number of bytes to fill, and the fourth argument is the known
- alignment of destination location.</p>
+ alignment of the destination location.</p>
<p>If the call to this intrinsic has an alignment value that is not 0 or 1,
then the caller guarantees that the destination pointer is aligned to that
@@ -7746,7 +7699,7 @@ LLVM</a>.</p>
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-13 21:48:13 +0200 (Tue, 13 Jul 2010) $
+ Last modified: $Date: 2010-08-28 06:09:24 +0200 (Sat, 28 Aug 2010) $
</address>
</body>
diff --git a/docs/MakefileGuide.html b/docs/MakefileGuide.html
index dd90478..38b7ae1 100644
--- a/docs/MakefileGuide.html
+++ b/docs/MakefileGuide.html
@@ -785,6 +785,9 @@
not.</dd>
<dt><a name="PROJ_SRC_DIR"><tt>PROJ_SRC_DIR</tt></a></dt>
<dd>The directory which contains the source files to be built.</dd>
+ <dt><a name="BUILD_EXAMPLES"><tt>BUILD_EXAMPLES</tt></a></dt>
+ <dd>If set to 1, build examples in <tt>examples</tt> and (if building
+ Clang) <tt>tools/clang/examples</tt> directories.</dd>
<dt><a name="BZIP2"><tt>BZIP2</tt></a><small>(configured)</small></dt>
<dd>The path to the <tt>bzip2</tt> tool.</dd>
<dt><a name="CC"><tt>CC</tt></a><small>(configured)</small></dt>
@@ -1025,7 +1028,7 @@
<a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-07 09:48:00 +0200 (Wed, 07 Jul 2010) $
+ Last modified: $Date: 2010-07-24 19:54:00 +0200 (Sat, 24 Jul 2010) $
</address>
</body>
</html>
diff --git a/docs/Passes.html b/docs/Passes.html
index 70d9097..0358745 100644
--- a/docs/Passes.html
+++ b/docs/Passes.html
@@ -120,6 +120,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<tr><td><a href="#print-used-types">-print-used-types</a></td><td>Find Used Types</td></tr>
<tr><td><a href="#profile-estimator">-profile-estimator</a></td><td>Estimate profiling information</td></tr>
<tr><td><a href="#profile-loader">-profile-loader</a></td><td>Load profile information from llvmprof.out</td></tr>
+<tr><td><a href="#regions">-regions</a></td><td>Detect single entry single exit regions in a function</td></tr>
<tr><td><a href="#profile-verifier">-profile-verifier</a></td><td>Verify profiling information</td></tr>
<tr><td><a href="#scalar-evolution">-scalar-evolution</a></td><td>Scalar Evolution Analysis</td></tr>
<tr><td><a href="#scev-aa">-scev-aa</a></td><td>ScalarEvolution-based Alias Analysis</td></tr>
@@ -166,6 +167,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<tr><td><a href="#loop-unroll">-loop-unroll</a></td><td>Unroll loops</td></tr>
<tr><td><a href="#loop-unswitch">-loop-unswitch</a></td><td>Unswitch loops</td></tr>
<tr><td><a href="#loopsimplify">-loopsimplify</a></td><td>Canonicalize natural loops</td></tr>
+<tr><td><a href="#loweratomic">-loweratomic</a></td><td>Lower atomic intrinsics</td></tr>
<tr><td><a href="#lowerinvoke">-lowerinvoke</a></td><td>Lower invoke and unwind, for unwindless code generators</td></tr>
<tr><td><a href="#lowersetjmp">-lowersetjmp</a></td><td>Lower Set Jump</td></tr>
<tr><td><a href="#lowerswitch">-lowerswitch</a></td><td>Lower SwitchInst's to branches</td></tr>
@@ -647,7 +649,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph to
- standard output in a human-readable form.
+ standard error in a human-readable form.
</p>
</div>
@@ -658,7 +660,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of the call
- graph to standard output in a human-readable form.
+ graph to standard error in a human-readable form.
</p>
</div>
@@ -669,7 +671,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of each
- function CFG to standard output in a human-readable form.
+ function CFG to standard error in a human-readable form.
</p>
</div>
@@ -678,15 +680,13 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<a name="print-dbginfo">-print-dbginfo: Print debug info in human readable form</a>
</div>
<div class="doc_text">
- <p>Pass that prints instructions, and associated debug info:
+ <p>Pass that prints instructions, and associated debug info:</p>
<ul>
<li>source/line/col information</li>
<li>original variable name</li>
<li>original type name</li>
</ul>
-
- </p>
</div>
<!-------------------------------------------------------------------------- -->
@@ -771,6 +771,17 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<div class="doc_text">
<p>Pass that checks profiling information for plausibility.</p>
</div>
+<div class="doc_subsection">
+ <a name="regions">-regions: Detect single entry single exit regions in a function</a>
+</div>
+<div class="doc_text">
+ <p>
+ The <code>RegionInfo</code> pass detects single entry single exit regions in a
+ function, where a region is defined as any subgraph that is connected to the
+ remaining graph at only two spots. Furthermore, an hierarchical region tree is
+ built.
+ </p>
+</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
@@ -1537,6 +1548,24 @@ if (X &lt; 3) {</pre>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
+ <a name="loweratomic">-loweratomic: Lower atomic intrinsics</a>
+</div>
+<div class="doc_text">
+ <p>
+ This pass lowers atomic intrinsics to non-atomic form for use in a known
+ non-preemptible environment.
+ </p>
+
+ <p>
+ The pass does not verify that the environment is non-preemptible (in
+ general this would require knowledge of the entire call graph of the
+ program including any libraries which may not be available in bitcode form);
+ it simply lowers every atomic intrinsic.
+ </p>
+</div>
+
+<!-------------------------------------------------------------------------- -->
+<div class="doc_subsection">
<a name="lowerinvoke">-lowerinvoke: Lower invoke and unwind, for unwindless code generators</a>
</div>
<div class="doc_text">
@@ -1929,12 +1958,13 @@ if (X &lt; 3) {</pre>
<a name="strip-debug-declare">-strip-debug-declare: Strip all llvm.dbg.declare intrinsics</a>
</div>
<div class="doc_text">
- <p>This pass implements code stripping. Specifically, it can delete:
+ <p>This pass implements code stripping. Specifically, it can delete:</p>
<ul>
<li>names for virtual registers</li>
<li>symbols for internal globals and functions</li>
<li>debug information</li>
</ul>
+ <p>
Note that this transformation makes code much less readable, so it should
only be used in situations where the 'strip' utility would be used, such as
reducing code size or making it harder to reverse engineer code.
@@ -1946,12 +1976,13 @@ if (X &lt; 3) {</pre>
<a name="strip-nondebug">-strip-nondebug: Strip all symbols, except dbg symbols, from a module</a>
</div>
<div class="doc_text">
- <p>This pass implements code stripping. Specifically, it can delete:
+ <p>This pass implements code stripping. Specifically, it can delete:</p>
<ul>
<li>names for virtual registers</li>
<li>symbols for internal globals and functions</li>
<li>debug information</li>
</ul>
+ <p>
Note that this transformation makes code much less readable, so it should
only be used in situations where the 'strip' utility would be used, such as
reducing code size or making it harder to reverse engineer code.
@@ -2211,7 +2242,7 @@ if (X &lt; 3) {</pre>
<a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-06 17:52:15 +0200 (Tue, 06 Jul 2010) $
+ Last modified: $Date: 2010-08-20 03:03:44 +0200 (Fri, 20 Aug 2010) $
</address>
</body>
diff --git a/docs/ProgrammersManual.html b/docs/ProgrammersManual.html
index 9992cd9..8fdd8a0 100644
--- a/docs/ProgrammersManual.html
+++ b/docs/ProgrammersManual.html
@@ -309,8 +309,6 @@ to write maintainable code more than where to put your curly braces.</p>
<div class="doc_text">
<ol>
-<li><a href="http://www.psc.edu/%7Esemke/cvs_branches.html">CVS
-Branch and Tag Primer</a></li>
<li><a href="http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html">Using
static and shared libraries across platforms</a></li>
</ol>
@@ -1436,7 +1434,7 @@ to the key string for a value.</p>
<p>The StringMap is very fast for several reasons: quadratic probing is very
cache efficient for lookups, the hash value of strings in buckets is not
-recomputed when lookup up an element, StringMap rarely has to touch the
+recomputed when looking up an element, StringMap rarely has to touch the
memory for unrelated objects when looking up a value (even when hash collisions
happen), hash table growth does not recompute the hash values for strings
already in the table, and each pair in the map is store in a single allocation
@@ -3942,7 +3940,7 @@ arguments. An argument has a pointer to the parent Function.</p>
<a href="mailto:dhurjati@cs.uiuc.edu">Dinakar Dhurjati</a> and
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-15 00:38:02 +0200 (Thu, 15 Jul 2010) $
+ Last modified: $Date: 2010-08-04 17:59:16 +0200 (Wed, 04 Aug 2010) $
</address>
</body>
diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html
index a5a35dd..d346e1c 100644
--- a/docs/ReleaseNotes.html
+++ b/docs/ReleaseNotes.html
@@ -67,9 +67,7 @@ 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.
- ABCD, GEPSplitterPass
- MSIL backend?
- lib/Transforms/Utils/SSI.cpp -> ABCD depends on it.
+ GEPSplitterPass
-->
@@ -78,6 +76,7 @@ Almost dead code.
strong phi elim
llvm.dbg.value: variable debug info for optimized code
loop dependence analysis
+ TBAA
-->
<!-- for announcement email:
@@ -118,40 +117,9 @@ modular, library-based architecture that makes it suitable for creating or
integrating with other development tools. Clang is considered a
production-quality compiler for C and Objective-C on x86 (32- and 64-bit).</p>
-<p>In the LLVM 2.7 time-frame, the Clang team has made many improvements:</p>
+<p>In the LLVM 2.8 time-frame, the Clang team has made many improvements:</p>
<ul>
-
-<li>C++ Support: Clang is now capable of self-hosting! While still
-alpha-quality, Clang's C++ support has matured enough to build LLVM and Clang,
-and C++ is now enabled by default. See the <a
-href="http://clang.llvm.org/cxx_compatibility.html">Clang C++ compatibility
-page</a> for common C++ migration issues.</li>
-
-<li>Objective-C: Clang now includes experimental support for an updated
-Objective-C ABI on non-Darwin platforms. This includes support for non-fragile
-instance variables and accelerated proxies, as well as greater potential for
-future optimisations. The new ABI is used when compiling with the
--fobjc-nonfragile-abi and -fgnu-runtime options. Code compiled with these
-options may be mixed with code compiled with GCC or clang using the old GNU ABI,
-but requires the libobjc2 runtime from the GNUstep project.</li>
-
-<li>New warnings: Clang contains a number of new warnings, including
-control-flow warnings (unreachable code, missing return statements in a
-non-<code>void</code> function, etc.), sign-comparison warnings, and improved
-format-string warnings.</li>
-
-<li>CIndex API and Python bindings: Clang now includes a C API as part of the
-CIndex library. Although we may make some changes to the API in the future, it
-is intended to be stable and has been designed for use by external projects. See
-the Clang
-doxygen <a href="http://clang.llvm.org/doxygen/group__CINDEX.html">CIndex</a>
-documentation for more details. The CIndex API also includes a preliminary
-set of Python bindings.</li>
-
-<li>ARM Support: Clang now has ABI support for both the Darwin and Linux ARM
-ABIs. Coupled with many improvements to the LLVM ARM backend, Clang is now
-suitable for use as a beta quality ARM compiler.</li>
</ul>
</div>
@@ -170,10 +138,7 @@ suitable for use as a beta quality ARM compiler.</li>
future</a>!). The tool is very good at finding bugs that occur on specific
paths through code, such as on error conditions.</p>
-<p>In the LLVM 2.7 time-frame, the analyzer core has made several major and
- minor improvements, including better support for tracking the fields of
- structures, initial support (not enabled by default yet) for doing
- interprocedural (cross-function) analysis, and new checks have been added.
+<p>In the LLVM 2.8 time-frame,
</p>
</div>
@@ -190,26 +155,8 @@ a JVM and a CLI Virtual Machine (Microsoft .NET is an
implementation of the CLI) using LLVM for static and just-in-time
compilation.</p>
-<p>
-With the release of LLVM 2.7, VMKit has shifted to a great framework for writing
-virtual machines. VMKit now offers precise and efficient garbage collection with
-multi-threading support, thanks to the MMTk memory management toolkit, as well
-as just in time and ahead of time compilation with LLVM. The major changes in
-VMKit 0.27 are:</p>
+<p>With the release of LLVM 2.8, ...</p>
-<ul>
-
-<li>Garbage collection: VMKit now uses the MMTk toolkit for garbage collectors.
- The first collector to be ported is the MarkSweep collector, which is precise,
- and drastically improves the performance of VMKit.</li>
-<li>Line number information in the JVM: by using the debug metadata of LLVM, the
- JVM now supports precise line number information, useful when printing a stack
- trace.</li>
-<li>Interface calls in the JVM: we implemented a variant of the Interface Method
- Table technique for interface calls in the JVM.
-</li>
-
-</ul>
</div>
@@ -231,8 +178,10 @@ libgcc routines).</p>
<p>
All of the code in the compiler-rt project is available under the standard LLVM
-License, a "BSD-style" license. New in LLVM 2.7: compiler_rt now
-supports ARM targets.</p>
+License, a "BSD-style" license. New in LLVM 2.8:
+
+Soft float support
+</p>
</div>
@@ -265,7 +214,7 @@ supported, and only on linux and darwin (darwin needs an additional gcc patch).
</p>
<p>
-DragonEgg is a new project which is seeing its first release with llvm-2.7.
+2.8 status here.
</p>
</div>
@@ -288,23 +237,13 @@ href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the
LLVM MC Project Blog Post</a>.
</p>
-<p>2.7 includes major parts of the work required by the new MC Project. A few
- targets have been refactored to support it, and work is underway to support a
- native assembler in LLVM. This work is not complete in LLVM 2.7, but it has
- made substantially more progress on LLVM mainline.</p>
-
-<p>One minor example of what MC can do is to transcode an AT&amp;T syntax
- X86 .s file into intel syntax. You can do this with something like:</p>
-<pre>
- llvm-mc foo.s -output-asm-variant=1 -o foo-intel.s
-</pre>
-
+<p>2.8 status here</p>
</div>
<!-- *********************************************************************** -->
<div class="doc_section">
- <a name="externalproj">External Open Source Projects Using LLVM 2.7</a>
+ <a name="externalproj">External Open Source Projects Using LLVM 2.8</a>
</div>
<!-- *********************************************************************** -->
@@ -312,171 +251,13 @@ LLVM MC Project Blog Post</a>.
<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.7.</p>
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="pure">Pure</a>
-</div>
-
-<div class="doc_text">
-<p>
-<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
-a symbolic fashion. Pure offers dynamic typing, eager and lazy evaluation,
-lexical closures, a hygienic macro system (also based on term rewriting),
-built-in list and matrix support (including list and matrix comprehensions) and
-an easy-to-use C interface. The interpreter uses LLVM as a backend to
- JIT-compile Pure programs to fast native code.</p>
-
-<p>Pure versions 0.43 and later have been tested and are known to work with
-LLVM 2.7 (and continue to work with older LLVM releases >= 2.5).</p>
-
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="RoadsendPHP">Roadsend PHP</a>
-</div>
-
-<div class="doc_text">
-<p>
-<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>
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="UnladenSwallow">Unladen Swallow</a>
-</div>
-
-<div class="doc_text">
-<p>
-<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="tce">TTA-based Codesign Environment (TCE)</a>
-</div>
-
-<div class="doc_text">
-<p>
-<a href="http://tce.cs.tut.fi/">TCE</a> is a toolset for designing
-application-specific processors (ASP) based on the Transport triggered
-architecture (TTA). The toolset provides a complete co-design flow from C/C++
-programs down to synthesizable VHDL and parallel program binaries. Processor
-customization points include the register files, function units, supported
-operations, and the interconnection network.</p>
-
-<p>TCE uses llvm-gcc/Clang and LLVM for C/C++ language support, target
-independent optimizations and also for parts of code generation. It generates
-new LLVM-based code generators "on the fly" for the designed TTA processors and
-loads them in to the compiler backend as runtime libraries to avoid per-target
-recompilation of larger parts of the compiler chain.</p>
-
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="safecode">SAFECode Compiler</a>
-</div>
-
-<div class="doc_text">
-<p>
-<a href="http://safecode.cs.illinois.edu">SAFECode</a> is a memory safe C
-compiler built using LLVM. It takes standard, unannotated C code, analyzes the
-code to ensure that memory accesses and array indexing operations are safe, and
-instruments the code with run-time checks when safety cannot be proven
-statically.
-</p>
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="icedtea">IcedTea Java Virtual Machine Implementation</a>
-</div>
-
-<div class="doc_text">
-<p>
-<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea</a> provides a
-harness to build OpenJDK using only free software build tools and to provide
-replacements for the not-yet free parts of OpenJDK. One of the extensions that
-IcedTea provides is a new JIT compiler named <a
-href="http://icedtea.classpath.org/wiki/ZeroSharkFaq">Shark</a> which uses LLVM
-to provide native code generation without introducing processor-dependent
-code.
-</p>
-<p>Icedtea6 1.8 and later have been tested and are known to work with
-LLVM 2.7 (and continue to work with older LLVM releases >= 2.6 as well).
-</p>
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="llvm-lua">LLVM-Lua</a>
-</div>
-
-<div class="doc_text">
-<p>
-<a href="http://code.google.com/p/llvm-lua/">LLVM-Lua</a> uses LLVM
- to add JIT and static compiling support to the Lua VM. Lua
-bytecode is analyzed to remove type checks, then LLVM is used to compile the
-bytecode down to machine code.
-</p>
-<p>LLVM-Lua 1.2.0 have been tested and is known to work with LLVM 2.7.
-</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 based on
-core Mac OS technologies, sponsored by Apple Inc. It uses LLVM at runtime for
-optimization passes, JIT compilation and exception handling. It also allows
-static (ahead-of-time) compilation of Ruby code straight to machine code.
-</p>
-<p>The upcoming MacRuby 0.6 release works with LLVM 2.7.
-</p>
-</div>
-
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="GHC">Glasgow Haskell Compiler (GHC)</a>
-</div>
-
-<div class="doc_text">
-<p>
-<a href="http://www.haskell.org/ghc/">GHC</a> is an open source,
-state-of-the-art programming suite for Haskell, a standard lazy
-functional programming language. It includes an optimizing static
-compiler generating good code for a variety of platforms, together
-with an interactive system for convenient, quick development.</p>
-
-<p>In addition to the existing C and native code generators, GHC now
-supports an <a
-href="http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/Backends/LLVM">LLVM
-code generator</a>. GHC supports LLVM 2.7.</p>
-
+ projects that have already been updated to work with LLVM 2.8.</p>
</div>
<!-- *********************************************************************** -->
<div class="doc_section">
- <a name="whatsnew">What's New in LLVM 2.7?</a>
+ <a name="whatsnew">What's New in LLVM 2.8?</a>
</div>
<!-- *********************************************************************** -->
@@ -496,29 +277,11 @@ in this section.
<div class="doc_text">
-<p>In addition to changes to the code, between LLVM 2.6 and 2.7, a number of
+<p>In addition to changes to the code, between LLVM 2.7 and 2.8, a number of
organization changes have happened:
</p>
<ul>
-<li>LLVM has a new <a href="http://llvm.org/Logo.html">official logo</a>!</li>
-
-<li>Ted Kremenek and Doug Gregor have stepped forward as <a
- href="http://llvm.org/docs/DeveloperPolicy.html#owners">Code Owners</a> of the
- Clang static analyzer and the Clang frontend, respectively.</li>
-
-<li>LLVM now has an <a href="http://blog.llvm.org">official Blog</a> at
- <a href="http://blog.llvm.org">http://blog.llvm.org</a>. This is a great way
- to learn about new LLVM-related features as they are implemented. Several
- features in this release are already explained on the blog.</li>
-
-<li>The LLVM web pages are now checked into the SVN server, in the "www",
- "www-pubs" and "www-releases" SVN modules. Previously they were hidden in a
- largely inaccessible old CVS server.</li>
-
-<li><a href="http://llvm.org">llvm.org</a> is now hosted on a new (and much
- faster) server. It is still graciously hosted at the University of Illinois
- of Urbana Champaign.</li>
</ul>
</div>
@@ -529,43 +292,10 @@ organization changes have happened:
<div class="doc_text">
-<p>LLVM 2.7 includes several major new capabilities:</p>
+<p>LLVM 2.8 includes several major new capabilities:</p>
<ul>
-<li>2.7 includes initial support for the <a
- href="http://en.wikipedia.org/wiki/MicroBlaze">MicroBlaze</a> target.
- MicroBlaze is a soft processor core designed for Xilinx FPGAs.</li>
-
-<li>2.7 includes a new LLVM IR "extensible metadata" feature. This feature
- supports many different use cases, including allowing front-end authors to
- encode source level information into LLVM IR, which is consumed by later
- language-specific passes. This is a great way to do high-level optimizations
- like devirtualization, type-based alias analysis, etc. See the <a
- href="http://blog.llvm.org/2010/04/extensible-metadata-in-llvm-ir.html">
- Extensible Metadata Blog Post</a> for more information.</li>
-
-<li>2.7 encodes <a href="SourceLevelDebugging.html">debug information</a>
-in a completely new way, built on extensible metadata. The new implementation
-is much more memory efficient and paves the way for improvements to optimized
-code debugging experience.</li>
-
-<li>2.7 now directly supports taking the address of a label and doing an
- indirect branch through a pointer. This is particularly useful for
- interpreter loops, and is used to implement the GCC "address of label"
- extension. For more information, see the <a
-href="http://blog.llvm.org/2010/01/address-of-label-and-indirect-branches.html">
-Address of Label and Indirect Branches in LLVM IR Blog Post</a>.
-
-<li>2.7 is the first release to start supporting APIs for assembling and
- disassembling target machine code. These APIs are useful for a variety of
- low level clients, and are surfaced in the new "enhanced disassembly" API.
- For more information see the <a
- href="http://blog.llvm.org/2010/01/x86-disassembler.html">The X86
- Disassembler Blog Post</a> for more information.</li>
-
-<li>2.7 includes major parts of the work required by the new MC Project,
- see the <a href="#mc">MC update above</a> for more information.</li>
-
+<li>.</li>
</ul>
</div>
@@ -580,30 +310,56 @@ Address of Label and Indirect Branches in LLVM IR Blog Post</a>.
expose new optimization opportunities:</p>
<ul>
-<li>LLVM IR now supports a 16-bit "half float" data type through <a
- href="LangRef.html#int_fp16">two new intrinsics</a> and APFloat support.</li>
-<li>LLVM IR supports two new <a href="LangRef.html#fnattrs">function
- attributes</a>: inlinehint and alignstack(n). The former is a hint to the
- optimizer that a function was declared 'inline' and thus the inliner should
- weight it higher when considering inlining it. The later
- indicates to the code generator that the function diverges from the platform
- ABI on stack alignment.</li>
-<li>The new <a href="LangRef.html#int_objectsize">llvm.objectsize</a> intrinsic
- allows the optimizer to infer the sizes of memory objects in some cases.
- This intrinsic is used to implement the GCC <tt>__builtin_object_size</tt>
- extension.</li>
-<li>LLVM IR now supports marking load and store instructions with <a
- href="LangRef.html#i_load">"non-temporal" hints</a> (building on the new
- metadata feature). This hint encourages the code
- generator to generate non-temporal accesses when possible, which are useful
- for code that is carefully managing cache behavior. Currently, only the
- X86 backend provides target support for this feature.</li>
-
-<li>LLVM 2.7 has pre-alpha support for <a
- href="LangRef.html#t_union">unions in LLVM IR</a>.
- Unfortunately, this support is not really usable in 2.7, so if you're
- interested in pushing it forward, please help contribute to LLVM mainline.</li>
+<li>LLVM 2.8 changes the internal order of operands in <a
+ href="http://llvm.org/doxygen/classllvm_1_1InvokeInst.html"><tt>InvokeInst</tt></a>
+ and <a href="http://llvm.org/doxygen/classllvm_1_1CallInst.html"><tt>CallInst</tt></a>.
+ To be portable across releases, resort to <tt>CallSite</tt> and the
+ high-level accessors, such as <tt>getCalledValue</tt> and <tt>setUnwindDest</tt>.
+</li>
+<li>
+ You can no longer pass use_iterators directly to cast<> (and similar), because
+ these routines tend to perform costly dereference operations more than once. You
+ have to dereference the iterators yourself and pass them in.
+</li>
+<li>
+ llvm.memcpy.*, llvm.memset.*, llvm.memmove.* (and possibly other?) intrinsics
+ take an extra parameter now (i1 isVolatile), totaling 5 parameters.
+ If you were creating these intrinsic calls and prototypes yourself (as opposed
+ to using Intrinsic::getDeclaration), you can use UpgradeIntrinsicFunction/UpgradeIntrinsicCall
+ to be portable accross releases.
+ Note that you cannot use Intrinsic::getDeclaration() in a backwards compatible
+ way (needs 2/3 types now, in 2.7 it needed just 1).
+</li>
+<li>
+ SetCurrentDebugLocation takes a DebugLoc now instead of a MDNode.
+ Change your code to use
+ SetCurrentDebugLocation(DebugLoc::getFromDILocation(...)).
+</li>
+<li>
+ VISIBILITY_HIDDEN is gone.
+</li>
+<li>
+ The <tt>RegisterPass</tt> and <tt>RegisterAnalysisGroup</tt> templates are
+ considered deprecated, but continue to function in LLVM 2.8. Clients are
+ strongly advised to use the upcoming <tt>INITIALIZE_PASS()</tt> and
+ <tt>INITIALIZE_AG_PASS()</tt> macros instead.
+<li>
+ SMDiagnostic takes different parameters now. //FIXME: how to upgrade?
+</li>
+<li>
+ The constructor for the Triple class no longer tries to understand odd triple
+ specifications. Frontends should ensure that they only pass valid triples to
+ LLVM. The Triple::normalize utility method has been added to help front-ends
+ deal with funky triples.
+<li>
+ Some APIs got renamed:
+ <ul>
+ <li>llvm_report_error -&gt; report_fatal_error</li>
+ <li>llvm_install_error_handler -&gt; install_fatal_error_handler</li>
+ <li>llvm::DwarfExceptionHandling -&gt; llvm::JITExceptionHandling</li>
+ </ul>
+</li>
</ul>
</div>
@@ -620,48 +376,7 @@ release includes a few major enhancements and additions to the optimizers:</p>
<ul>
-<li>The inliner now merges arrays stack objects in different callees when
- inlining multiple call sites into one function. This reduces the stack size
- of the resultant function.</li>
-<li>The -basicaa alias analysis pass (which is the default) has been improved to
- be less dependent on "type safe" pointers. It can now look through bitcasts
- and other constructs more aggressively, allowing better load/store
- optimization.</li>
-<li>The load elimination optimization in the GVN Pass [<a
-href="http://blog.llvm.org/2009/12/introduction-to-load-elimination-in-gvn.html">intro
- blog post</a>] has been substantially improved to be more aggressive about
- partial redundancy elimination and do more aggressive phi translation. Please
- see the <a
- href="http://blog.llvm.org/2009/12/advanced-topics-in-redundant-load.html">
- Advanced Topics in Redundant Load Elimination with a Focus on PHI Translation
- Blog Post</a> for more details.</li>
-<li>The module <a href="LangRef.html#datalayout">target data string</a> now
- includes a notion of 'native' integer data types for the target. This
- helps mid-level optimizations avoid promoting complex sequences of
- operations to data types that are not natively supported (e.g. converting
- i32 operations to i64 on 32-bit chips).</li>
-<li>The mid-level optimizer is now conservative when operating on a module with
- no target data. Previously, it would default to SparcV9 settings, which is
- not what most people expected.</li>
-<li>Jump threading is now much more aggressive at simplifying correlated
- conditionals and threading blocks with otherwise complex logic. It has
- subsumed the old "Conditional Propagation" pass, and -condprop has been
- removed from LLVM 2.7.</li>
-<li>The -instcombine pass has been refactored from being one huge file to being
- a library of its own. Internally, it uses a customized IRBuilder to clean
- it up and simplify it.</li>
-
-<li>The optimal edge profiling pass is reliable and much more complete than in
- 2.6. It can be used with the llvm-prof tool but isn't wired up to the
- llvm-gcc and clang command line options yet.</li>
-
-<li>A new experimental alias analysis implementation, -scev-aa, has been added.
- It uses LLVM's Scalar Evolution implementation to do symbolic analysis of
- pointer offset expressions to disambiguate pointers. It can catch a few
- cases that basicaa cannot, particularly in complex loop nests.</li>
-
-<li>The default pass ordering has been tweaked for improved optimization
- effectiveness.</li>
+<li></li>
</ul>
@@ -676,19 +391,7 @@ href="http://blog.llvm.org/2009/12/introduction-to-load-elimination-in-gvn.html"
<div class="doc_text">
<ul>
-<li>The JIT now supports generating debug information and is compatible with
-the new GDB 7.0 (and later) interfaces for registering dynamically generated
-debug info.</li>
-
-<li>The JIT now <a href="http://llvm.org/PR5184">defaults
-to compiling eagerly</a> to avoid a race condition in the lazy JIT.
-Clients that still want the lazy JIT can switch it on by calling
-<tt>ExecutionEngine::DisableLazyCompilation(false)</tt>.</li>
-
-<li>It is now possible to create more than one JIT instance in the same process.
-These JITs can generate machine code in parallel,
-although <a href="http://llvm.org/docs/ProgrammersManual.html#jitthreading">you
-still have to obey the other threading restrictions</a>.</li>
+<li></li>
</ul>
@@ -706,49 +409,7 @@ infrastructure, which allows us to implement more aggressive algorithms and make
it run faster:</p>
<ul>
-<li>The 'llc -asm-verbose' option (which is now the default) has been enhanced
- to emit many useful comments to .s files indicating information about spill
- slots and loop nest structure. This should make it much easier to read and
- understand assembly files. This is wired up in llvm-gcc and clang to
- the <tt>-fverbose-asm</tt> option.</li>
-
-<li>New LSR with "full strength reduction" mode, which can reduce address
- register pressure in loops where address generation is important.</li>
-
-<li>A new codegen level Common Subexpression Elimination pass (MachineCSE)
- is available and enabled by default. It catches redundancies exposed by
- lowering.</li>
-<li>A new pre-register-allocation tail duplication pass is available and enabled
- by default, it can substantially improve branch prediction quality in some
- cases.</li>
-<li>A new sign and zero extension optimization pass (OptimizeExtsPass)
- is available and enabled by default. This pass can takes advantage
- architecture features like x86-64 implicit zero extension behavior and
- sub-registers.</li>
-<li>The code generator now supports a mode where it attempts to preserve the
- order of instructions in the input code. This is important for source that
- is hand scheduled and extremely sensitive to scheduling. It is compatible
- with the GCC <tt>-fno-schedule-insns</tt> option.</li>
-<li>The target-independent code generator now supports generating code with
- arbitrary numbers of result values. Returning more values than was
- previously supported is handled by returning through a hidden pointer. In
- 2.7, only the X86 and XCore targets have adopted support for this
- though.</li>
-<li>The code generator now supports generating code that follows the
- <a href="LangRef.html#callingconv">Glasgow Haskell Compiler Calling
- Convention</a> and ABI.</li>
-<li>The "<a href="CodeGenerator.html#selectiondag_select">DAG instruction
- selection</a>" phase of the code generator has been largely rewritten for
- 2.7. Previously, tblgen spit out tons of C++ code which was compiled and
- linked into the target to do the pattern matching, now it emits a much
- smaller table which is read by the target-independent code. The primary
- advantages of this approach is that the size and compile time of various
- targets is much improved. The X86 code generator shrunk by 1.5MB of code,
- for example.</li>
-<li>Almost the entire code generator has switched to emitting code through the
- MC interfaces instead of printing textually to the .s file. This led to a
- number of cleanups and speedups. In 2.7, debug an exception handling
- information does not go through MC yet.</li>
+<li>MachO writer works.</li>
</ul>
</div>
@@ -762,11 +423,9 @@ it run faster:</p>
</p>
<ul>
-<li>The X86 backend now optimizes tails calls much more aggressively for
- functions that use the standard C calling convention.</li>
-<li>The X86 backend now models scalar SSE registers as subregs of the SSE vector
- registers, making the code generator more aggressive in cases where scalars
- and vector types are mixed.</li>
+<li>The X86 backend now supports holding X87 floating point stack values
+ in registers across basic blocks, dramatically improving performance of code
+ that uses long double, and when targetting CPUs that don't support SSE.</li>
</ul>
@@ -783,27 +442,7 @@ it run faster:</p>
<ul>
-<li>The ARM backend now generates instructions in unified assembly syntax.</li>
-
-<li>llvm-gcc now has complete support for the ARM v7 NEON instruction set. This
- support differs slightly from the GCC implementation. Please see the
- <a
-href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html">
- ARM Advanced SIMD (NEON) Intrinsics and Types in LLVM Blog Post</a> for
- helpful information if migrating code from GCC to LLVM-GCC.</li>
-
-<li>The ARM and Thumb code generators now use register scavenging for stack
- object address materialization. This allows the use of R3 as a general
- purpose register in Thumb1 code, as it was previous reserved for use in
- stack address materialization. Secondly, sequential uses of the same
- value will now re-use the materialized constant.</li>
-
-<li>The ARM backend now has good support for ARMv4 targets and has been tested
- on StrongARM hardware. Previously, LLVM only supported ARMv4T and
- newer chips.</li>
-
-<li>Atomic builtins are now supported for ARMv6 and ARMv7 (__sync_synchronize,
- __sync_fetch_and_add, etc.).</li>
+<li></li>
</ul>
@@ -822,34 +461,7 @@ href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html">
</p>
<ul>
-<li>The optimizer uses the new CodeMetrics class to measure the size of code.
- Various passes (like the inliner, loop unswitcher, etc) all use this to make
- more accurate estimates of the code size impact of various
- optimizations.</li>
-<li>A new <a href="http://llvm.org/doxygen/InstructionSimplify_8h-source.html">
- llvm/Analysis/InstructionSimplify.h</a> interface is available for doing
- symbolic simplification of instructions (e.g. <tt>a+0</tt> -&gt; <tt>a</tt>)
- without requiring the instruction to exist. This centralizes a lot of
- ad-hoc symbolic manipulation code scattered in various passes.</li>
-<li>The optimizer now uses a new <a
- href="http://llvm.org/doxygen/SSAUpdater_8h-source.html">SSAUpdater</a>
- class which efficiently supports
- doing unstructured SSA update operations. This centralized a bunch of code
- scattered throughout various passes (e.g. jump threading, lcssa,
- loop rotate, etc) for doing this sort of thing. The code generator has a
- similar <a href="http://llvm.org/doxygen/MachineSSAUpdater_8h-source.html">
- MachineSSAUpdater</a> class.</li>
-<li>The <a href="http://llvm.org/doxygen/Regex_8h-source.html">
- llvm/Support/Regex.h</a> header exposes a platform independent regular
- expression API. Building on this, the <a
- href="TestingGuide.html#FileCheck">FileCheck</a> utility now supports
- regular exressions.</li>
-<li>raw_ostream now supports a circular "debug stream" accessed with "dbgs()".
- By default, this stream works the same way as "errs()", but if you pass
- <tt>-debug-buffer-size=1000</tt> to opt, the debug stream is capped to a
- fixed sized circular buffer and the output is printed at the end of the
- program's execution. This is helpful if you have a long lived compiler
- process and you're interested in seeing snapshots in time.</li>
+<li></li>
</ul>
@@ -864,16 +476,7 @@ href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html">
<p>Other miscellaneous features include:</p>
<ul>
-<li>You can now build LLVM as a big dynamic library (e.g. "libllvm2.7.so"). To
- get this, configure LLVM with the --enable-shared option.</li>
-
-<li>LLVM command line tools now overwrite their output by default. Previously,
- they would only do this with -f. This makes them more convenient to use, and
- behave more like standard unix tools.</li>
-
-<li>The opt and llc tools now autodetect whether their input is a .ll or .bc
- file, and automatically do the right thing. This means you don't need to
- explicitly use the llvm-as tool for most things.</li>
+<li></li>
</ul>
</div>
@@ -887,48 +490,21 @@ href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html">
<div class="doc_text">
<p>If you're already an LLVM user or developer with out-of-tree changes based
-on LLVM 2.6, this section lists some "gotchas" that you may run into upgrading
+on LLVM 2.7, this section lists some "gotchas" that you may run into upgrading
from the previous release.</p>
<ul>
-
-<li>
-The Andersen's alias analysis ("anders-aa") pass, the Predicate Simplifier
-("predsimplify") pass, the LoopVR pass, the GVNPRE pass, and the random sampling
-profiling ("rsprofiling") passes have all been removed. They were not being
-actively maintained and had substantial problems. If you are interested in
-these components, you are welcome to ressurect them from SVN, fix the
-correctness problems, and resubmit them to mainline.</li>
-
-<li>LLVM now defaults to building most libraries with RTTI turned off, providing
-a code size reduction. Packagers who are interested in building LLVM to support
-plugins that require RTTI information should build with "make REQUIRE_RTTI=1"
-and should read the new <a href="Packaging.html">Advice on Packaging LLVM</a>
-document.</li>
-
-<li>The LLVM interpreter now defaults to <em>not</em> using <tt>libffi</tt> even
-if you have it installed. This makes it more likely that an LLVM built on one
-system will work when copied to a similar system. To use <tt>libffi</tt>,
-configure with <tt>--enable-libffi</tt>.</li>
-
-<li>Debug information uses a completely different representation, an LLVM 2.6
-.bc file should work with LLVM 2.7, but debug info won't come forward.</li>
-
-<li>The LLVM 2.6 (and earlier) "malloc" and "free" instructions got removed,
- along with LowerAllocations pass. Now you should just use a call to the
- malloc and free functions in libc. These calls are optimized as well as
- the old instructions were.</li>
+<li>.ll file doesn't produce #uses comments anymore, to get them, run a .bc file
+ through "llvm-dis --show-annotations".</li>
+<li>MSIL Backend removed.</li>
+<li>ABCD and SSI passes removed.</li>
+<li>'Union' LLVM IR feature removed.</li>
</ul>
<p>In addition, many APIs have changed in this release. Some of the major LLVM
API changes are:</p>
<ul>
-
-<li>The <tt>add</tt>, <tt>sub</tt>, and <tt>mul</tt> instructions no longer
-support floating-point operands. The <tt>fadd</tt>, <tt>fsub</tt>, and
-<tt>fmul</tt> instructions should be used for this purpose instead.</li>
-
</ul>
</div>
@@ -985,6 +561,9 @@ See: <a href="GettingStarted.html#brokengcc">Broken versions of GCC and other to
However, A <a href="http://pkg.auroraux.org/GCC">Modern GCC Build</a>
for x86/x86-64 has been made available from the third party AuroraUX Project
that has been meticulously tested for bootstrapping LLVM &amp; Clang.</li>
+<li>There have been reports of Solaris and/or OpenSolaris build failures due
+to an incompatibility in the nm program as well. The nm from binutils does seem
+to work.</li>
</ul>
</div>
@@ -1004,11 +583,10 @@ components, please contact us on the <a
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
<ul>
-<li>The MSIL, Alpha, SPU, MIPS, PIC16, Blackfin, MSP430, SystemZ and MicroBlaze
+<li>The Alpha, SPU, MIPS, PIC16, Blackfin, MSP430, SystemZ and MicroBlaze
backends are experimental.</li>
<li><tt>llc</tt> "<tt>-filetype=asm</tt>" (the default) is the only
- supported value for this option. The MachO writer is experimental, and
- works much better in mainline SVN.</li>
+ supported value for this option. XXX Update me</li>
</ul>
</div>
@@ -1025,8 +603,6 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
all <a href="http://llvm.org/PR879">inline assembly that uses the X86
floating point stack</a>. It supports the 'f' and 't' constraints, but not
'u'.</li>
- <li>The X86 backend generates inefficient floating point code when configured
- to generate code for systems that don't have SSE2.</li>
<li>Win64 code generation wasn't widely tested. Everything should work, but we
expect small issues to happen. Also, llvm-gcc cannot build the mingw64
runtime currently due to lack of support for the 'u' inline assembly
@@ -1230,7 +806,7 @@ lists</a>.</p>
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $
+ Last modified: $Date: 2010-09-03 01:22:50 +0200 (Fri, 03 Sep 2010) $
</address>
</body>
diff --git a/docs/TestingGuide.html b/docs/TestingGuide.html
index 3149f46..c7353eb 100644
--- a/docs/TestingGuide.html
+++ b/docs/TestingGuide.html
@@ -16,22 +16,22 @@
<li><a href="#requirements">Requirements</a></li>
<li><a href="#org">LLVM testing infrastructure organization</a>
<ul>
- <li><a href="#dejagnu">DejaGNU tests</a></li>
+ <li><a href="#regressiontests">Regression tests</a></li>
<li><a href="#testsuite">Test suite</a></li>
</ul>
</li>
<li><a href="#quick">Quick start</a>
<ul>
- <li><a href="#quickdejagnu">DejaGNU tests</a></li>
+ <li><a href="#quickregressiontests">Regression tests</a></li>
<li><a href="#quicktestsuite">Test suite</a></li>
</ul>
</li>
- <li><a href="#dgstructure">DejaGNU structure</a>
+ <li><a href="#rtstructure">Regression test structure</a>
<ul>
- <li><a href="#dgcustom">Writing new DejaGNU tests</a></li>
+ <li><a href="#rtcustom">Writing new regression tests</a></li>
<li><a href="#FileCheck">The FileCheck utility</a></li>
- <li><a href="#dgvars">Variables and substitutions</a></li>
- <li><a href="#dgfeatures">Other features</a></li>
+ <li><a href="#rtvars">Variables and substitutions</a></li>
+ <li><a href="#rtfeatures">Other features</a></li>
</ul>
</li>
<li><a href="#testsuitestructure">Test suite structure</a></li>
@@ -43,12 +43,10 @@
<li><a href="#testsuitecustom">Writing custom tests for llvm-test</a></li>
</ul>
</li>
- <li><a href="#nightly">Running the nightly tester</a></li>
</ol>
<div class="doc_author">
- <p>Written by John T. Criswell, <a
- href="http://llvm.x10sys.com/rspencer">Reid Spencer</a>, and Tanya Lattner</p>
+ <p>Written by John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner</p>
</div>
<!--=========================================================================-->
@@ -57,9 +55,9 @@
<div class="doc_text">
-<p>This document is the reference manual for the LLVM testing infrastructure. It documents
-the structure of the LLVM testing infrastructure, the tools needed to use it,
-and how to add and run tests.</p>
+<p>This document is the reference manual for the LLVM testing infrastructure. It
+documents the structure of the LLVM testing infrastructure, the tools needed to
+use it, and how to add and run tests.</p>
</div>
@@ -69,17 +67,9 @@ and how to add and run tests.</p>
<div class="doc_text">
-<p>In order to use the LLVM testing infrastructure, you will need all of the software
-required to build LLVM, plus the following:</p>
-
-<dl>
-<dt><a href="http://www.gnu.org/software/dejagnu/">DejaGNU</a></dt>
-<dd>The Feature and Regressions tests are organized and run by DejaGNU.</dd>
-<dt><a href="http://expect.nist.gov/">Expect</a></dt>
-<dd>Expect is required by DejaGNU.</dd>
-<dt><a href="http://www.tcl.tk/software/tcltk/">tcl</a></dt>
-<dd>Tcl is required by DejaGNU. </dd>
-</dl>
+<p>In order to use the LLVM testing infrastructure, you will need all of the
+software required to build LLVM, as well
+as <a href="http://python.org">Python</a> 2.4 or later.</p>
</div>
@@ -89,29 +79,28 @@ required to build LLVM, plus the following:</p>
<div class="doc_text">
-<p>The LLVM testing infrastructure contains two major categories of tests: code
-fragments and whole programs. Code fragments are referred to as the "DejaGNU
-tests" and are in the <tt>llvm</tt> module in subversion under the
-<tt>llvm/test</tt> directory. The whole programs tests are referred to as the
-"Test suite" and are in the <tt>test-suite</tt> module in subversion.
+<p>The LLVM testing infrastructure contains two major categories of tests:
+regression tests and whole programs. The regression tests are contained inside
+the LLVM repository itself under <tt>llvm/test</tt> and are expected to always
+pass -- they should be run before every commit. The whole programs tests are
+referred to as the "LLVM test suite" and are in the <tt>test-suite</tt> module
+in subversion.
</p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dejagnu">DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="regressiontests">Regression tests</a></div>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
-<p>Code fragments are small pieces of code that test a specific
-feature of LLVM or trigger a specific bug in LLVM. They are usually
-written in LLVM assembly language, but can be written in other
-languages if the test targets a particular language front end (and the
-appropriate <tt>--with-llvmgcc</tt> options were used
-at <tt>configure</tt> time of the <tt>llvm</tt> module). These tests
-are driven by the DejaGNU testing framework, which is hidden behind a
-few simple makefiles.</p>
+<p>The regression tests are small pieces of code that test a specific feature of
+LLVM or trigger a specific bug in LLVM. They are usually written in LLVM
+assembly language, but can be written in other languages if the test targets a
+particular language front end (and the appropriate <tt>--with-llvmgcc</tt>
+options were used at <tt>configure</tt> time of the <tt>llvm</tt> module). These
+tests are driven by the 'lit' testing tool, which is part of LLVM.</p>
<p>These code fragments are not complete programs. The code generated
from them is never executed to determine correct behavior.</p>
@@ -158,8 +147,8 @@ generates code.</p>
<div class="doc_text">
- <p>The tests are located in two separate Subversion modules. The
- DejaGNU tests are in the main "llvm" module under the directory
+ <p>The tests are located in two separate Subversion modules. The regressions
+ tests are in the main "llvm" module under the directory
<tt>llvm/test</tt> (so you get these tests for free with the main llvm tree).
The more comprehensive test suite that includes whole
programs in C and C++ is in the <tt>test-suite</tt> module. This module should
@@ -171,10 +160,10 @@ the <tt>test-suite</tt> directory will be automatically configured.
Alternatively, you can configure the <tt>test-suite</tt> module manually.</p>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="quickdejagnu">DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="quickregressiontests">Regression tests</a></div>
<!-- _______________________________________________________________________ -->
-<p>To run all of the simple tests in LLVM using DejaGNU, use the master Makefile
- in the <tt>llvm/test</tt> directory:</p>
+<p>To run all of the LLVM regression tests, use master Makefile in
+ the <tt>llvm/test</tt> directory:</p>
<div class="doc_code">
<pre>
@@ -190,38 +179,47 @@ Alternatively, you can configure the <tt>test-suite</tt> module manually.</p>
</pre>
</div>
-<p>To run only a subdirectory of tests in <tt>llvm/test</tt> using DejaGNU (ie.
-Transforms), just set the TESTSUITE variable to the path of the
-subdirectory (relative to <tt>llvm/test</tt>):</p>
+<p>If you have <a href="http://clang.llvm.org">Clang</a> checked out and built,
+you can run the LLVM and Clang tests simultaneously using:</p>
+
+<p>or</p>
<div class="doc_code">
<pre>
-% gmake TESTSUITE=Transforms check
+% gmake check-all
</pre>
</div>
-<p><b>Note: If you are running the tests with <tt>objdir != subdir</tt>, you
-must have run the complete testsuite before you can specify a
-subdirectory.</b></p>
+<p>To run the tests with Valgrind (Memcheck by default), just append
+<tt>VG=1</tt> to the commands above, e.g.:</p>
-<p>To run only a single test, set <tt>TESTONE</tt> to its path (relative to
-<tt>llvm/test</tt>) and make the <tt>check-one</tt> target:</p>
+<div class="doc_code">
+<pre>
+% gmake check VG=1
+</pre>
+</div>
+
+<p>To run individual tests or subsets of tests, you can use the 'llvm-lit'
+script which is built as part of LLVM. For example, to run the
+'Integer/BitCast.ll' test by itself you can run:</p>
<div class="doc_code">
<pre>
-% gmake TESTONE=Feature/basictest.ll check-one
+% llvm-lit ~/llvm/test/Integer/BitCast.ll
</pre>
</div>
-<p>To run the tests with Valgrind (Memcheck by default), just append
-<tt>VG=1</tt> to the commands above, e.g.:</p>
+<p>or to run all of the ARM CodeGen tests:</p>
<div class="doc_code">
<pre>
-% gmake check VG=1
+% llvm-lit ~/llvm/test/CodeGen/ARM
</pre>
</div>
+<p>For more information on using the 'lit' tool, see 'llvm-lit --help' or the
+'lit' man page.</p>
+
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="quicktestsuite">Test suite</a></div>
<!-- _______________________________________________________________________ -->
@@ -275,11 +273,11 @@ that subdirectory.</p>
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="dgstructure">DejaGNU structure</a></div>
+<div class="doc_section"><a name="rtstructure">Regression test structure</a></div>
<!--=========================================================================-->
<div class="doc_text">
- <p>The LLVM DejaGNU tests are driven by DejaGNU together with GNU Make and are
- located in the <tt>llvm/test</tt> directory.
+ <p>The LLVM regression tests are driven by 'lit' and are located in
+ the <tt>llvm/test</tt> directory.
<p>This directory contains a large array of small tests
that exercise various features of LLVM and to ensure that regressions do not
@@ -302,23 +300,24 @@ that subdirectory.</p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgcustom">Writing new DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="rtcustom">Writing new regression tests</a></div>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
- <p>The DejaGNU structure is very simple, but does require some information to
- be set. This information is gathered via <tt>configure</tt> and is written
- to a file, <tt>site.exp</tt> in <tt>llvm/test</tt>. The <tt>llvm/test</tt>
- Makefile does this work for you.</p>
-
- <p>In order for DejaGNU to work, each directory of tests must have a
- <tt>dg.exp</tt> file. DejaGNU looks for this file to determine how to run the
- tests. This file is just a Tcl script and it can do anything you want, but
- we've standardized it for the LLVM regression tests. If you're adding a
+ <p>The regression test structure is very simple, but does require some
+ information to be set. This information is gathered via <tt>configure</tt> and
+ is written to a file, <tt>lit.site.cfg</tt>
+ in <tt>llvm/test</tt>. The <tt>llvm/test</tt> Makefile does this work for
+ you.</p>
+
+ <p>In order for the regression tests to work, each directory of tests must
+ have a <tt>dg.exp</tt> file. Lit looks for this file to determine how to
+ run the tests. This file is just a Tcl script and it can do anything you want,
+ but we've standardized it for the LLVM regression tests. If you're adding a
directory of tests, just copy <tt>dg.exp</tt> from another directory to get
- running. The standard <tt>dg.exp</tt> simply loads a Tcl
- library (<tt>test/lib/llvm.exp</tt>) and calls the <tt>llvm_runtests</tt>
- function defined in that library with a list of file names to run. The names
- are obtained by using Tcl's glob command. Any directory that contains only
+ running. The standard <tt>dg.exp</tt> simply loads a Tcl library
+ (<tt>test/lib/llvm.exp</tt>) and calls the <tt>llvm_runtests</tt> function
+ defined in that library with a list of file names to run. The names are
+ obtained by using Tcl's glob command. Any directory that contains only
directories does not need the <tt>dg.exp</tt> file.</p>
<p>The <tt>llvm-runtests</tt> function lookas at each file that is passed to
@@ -379,7 +378,8 @@ that subdirectory.</p>
<p>There are some quoting rules that you must pay attention to when writing
your RUN lines. In general nothing needs to be quoted. Tcl won't strip off any
- ' or " so they will get passed to the invoked program. For example:</p>
+ quote characters so they will get passed to the invoked program. For
+ example:</p>
<div class="doc_code">
<pre>
@@ -696,7 +696,7 @@ define two separate CHECK lines that match on the same line.
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgvars">Variables and
+<div class="doc_subsection"><a name="rtvars">Variables and
substitutions</a></div>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
@@ -792,7 +792,7 @@ substitutions</a></div>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgfeatures">Other Features</a></div>
+<div class="doc_subsection"><a name="rtfeatures">Other Features</a></div>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>To make RUN line writing easier, there are several shell scripts located
@@ -818,7 +818,7 @@ substitutions</a></div>
<p>Sometimes it is necessary to mark a test case as "expected fail" or XFAIL.
You can easily mark a test as XFAIL just by including <tt>XFAIL: </tt> on a
line near the top of the file. This signals that the test case should succeed
- if the test fails. Such test cases are counted separately by DejaGnu. To
+ if the test fails. Such test cases are counted separately by the testing tool. To
specify an expected fail, use the XFAIL keyword in the comments of the test
program followed by a colon and one or more regular expressions (separated by
a comma). The regular expressions allow you to XFAIL the test conditionally by
@@ -906,9 +906,10 @@ benchmarks, regression tests, code that is strange grammatically, etc. These
organizations should be relatively self explanatory.</p>
<p>Some tests are known to fail. Some are bugs that we have not fixed yet;
-others are features that we haven't added yet (or may never add). In DejaGNU,
-the result for such tests will be XFAIL (eXpected FAILure). In this way, you
-can tell the difference between an expected and unexpected failure.</p>
+others are features that we haven't added yet (or may never add). In the
+regression tests, the result for such tests will be XFAIL (eXpected FAILure).
+In this way, you can tell the difference between an expected and unexpected
+failure.</p>
<p>The tests in the test suite have no such feature at this time. If the
test passes, only warnings and other miscellaneous output will be generated. If
@@ -1135,66 +1136,6 @@ example reports that can do fancy stuff.</p>
</div>
-<!--=========================================================================-->
-<div class="doc_section"><a name="nightly">Running the nightly tester</a></div>
-<!--=========================================================================-->
-
-<div class="doc_text">
-
-<p>
-The <a href="http://llvm.org/nightlytest/">LLVM Nightly Testers</a>
-automatically check out an LLVM tree, build it, run the "nightly"
-program test (described above), run all of the DejaGNU tests,
-delete the checked out tree, and then submit the results to
-<a href="http://llvm.org/nightlytest/">http://llvm.org/nightlytest/</a>.
-After test results are submitted to
-<a href="http://llvm.org/nightlytest/">http://llvm.org/nightlytest/</a>,
-they are processed and displayed on the tests page. An email to
-<a href="http://lists.cs.uiuc.edu/pipermail/llvm-testresults/">
-llvm-testresults@cs.uiuc.edu</a> summarizing the results is also generated.
-This testing scheme is designed to ensure that programs don't break as well
-as keep track of LLVM's progress over time.</p>
-
-<p>If you'd like to set up an instance of the nightly tester to run on your
-machine, take a look at the comments at the top of the
-<tt>utils/NewNightlyTest.pl</tt> file. If you decide to set up a nightly tester
-please choose a unique nickname and invoke <tt>utils/NewNightlyTest.pl</tt>
-with the "-nickname [yournickname]" command line option.
-
-<p>You can create a shell script to encapsulate the running of the script.
-The optimized x86 Linux nightly test is run from just such a script:</p>
-
-<div class="doc_code">
-<pre>
-#!/bin/bash
-BASE=/proj/work/llvm/nightlytest
-export BUILDDIR=$BASE/build
-export WEBDIR=$BASE/testresults
-export LLVMGCCDIR=/proj/work/llvm/cfrontend/install
-export PATH=/proj/install/bin:$LLVMGCCDIR/bin:$PATH
-export LD_LIBRARY_PATH=/proj/install/lib
-cd $BASE
-cp /proj/work/llvm/llvm/utils/NewNightlyTest.pl .
-nice ./NewNightlyTest.pl -nice -release -verbose -parallel -enable-linscan \
- -nickname NightlyTester -noexternals &gt; output.log 2&gt;&amp;1
-</pre>
-</div>
-
-<p>It is also possible to specify the the location your nightly test results
-are submitted. You can do this by passing the command line option
-"-submit-server [server_address]" and "-submit-script [script_on_server]" to
-<tt>utils/NewNightlyTest.pl</tt>. For example, to submit to the llvm.org
-nightly test results page, you would invoke the nightly test script with
-"-submit-server llvm.org -submit-script /nightlytest/NightlyTestAccept.cgi".
-If these options are not specified, the nightly test script sends the results
-to the llvm.org nightly test results page.</p>
-
-<p>Take a look at the <tt>NewNightlyTest.pl</tt> file to see what all of the
-flags and strings do. If you start running the nightly tests, please let us
-know. Thanks!</p>
-
-</div>
-
<!-- *********************************************************************** -->
<hr>
@@ -1204,9 +1145,9 @@ know. Thanks!</p>
<a href="http://validator.w3.org/check/referer"><img
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
- John T. Criswell, Reid Spencer, and Tanya Lattner<br>
+ John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner<br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $
+ Last modified: $Date: 2010-08-02 03:20:23 +0200 (Mon, 02 Aug 2010) $
</address>
</body>
</html>
diff --git a/docs/WritingAnLLVMBackend.html b/docs/WritingAnLLVMBackend.html
index aa2612c..2dc0ef7 100644
--- a/docs/WritingAnLLVMBackend.html
+++ b/docs/WritingAnLLVMBackend.html
@@ -1299,9 +1299,6 @@ implementation in <tt>SparcInstrInfo.cpp</tt>:
</p>
<ul>
-<li><tt>isMoveInstr</tt> &mdash; Return true if the instruction is a register to
- register move; false, otherwise.</li>
-
<li><tt>isLoadFromStackSlot</tt> &mdash; If the specified machine instruction is
a direct load from a stack slot, return the register number of the
destination and the <tt>FrameIndex</tt> of the stack slot.</li>
@@ -2552,7 +2549,7 @@ with assembler.
<a href="http://www.woo.com">Mason Woo</a> and <a href="http://misha.brukman.net">Misha Brukman</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a>
<br>
- Last modified: $Date: 2010-07-11 19:01:17 +0200 (Sun, 11 Jul 2010) $
+ Last modified: $Date: 2010-07-17 00:35:46 +0200 (Sat, 17 Jul 2010) $
</address>
</body>
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html
index 94c5ceb..1a6edcf 100644
--- a/docs/WritingAnLLVMPass.html
+++ b/docs/WritingAnLLVMPass.html
@@ -290,7 +290,7 @@ function.</p>
initialization value is not important.</p>
<div class="doc_code"><pre>
- RegisterPass&lt;Hello&gt; X("<i>hello</i>", "<i>Hello World Pass</i>",
+ INITIALIZE_PASS(Hello, "<i>hello</i>", "<i>Hello World Pass</i>",
false /* Only looks at CFG */,
false /* Analysis Pass */);
} <i>// end of anonymous namespace</i>
@@ -299,7 +299,7 @@ initialization value is not important.</p>
<p>Lastly, we <a href="#registration">register our class</a> <tt>Hello</tt>,
giving it a command line
argument "<tt>hello</tt>", and a name "<tt>Hello World Pass</tt>".
-Last two RegisterPass arguments are optional. Their default value is false.
+Last two arguments describe its behavior.
If a pass walks CFG without modifying it then third argument is set to true.
If a pass is an analysis pass, for example dominator tree pass, then true
is supplied as fourth argument. </p>
@@ -326,8 +326,9 @@ is supplied as fourth argument. </p>
};
char Hello::ID = 0;
- RegisterPass&lt;Hello&gt; X("<i>hello</i>", "<i>Hello World Pass</i>");
+ INITIALIZE_PASS(Hello, "<i>Hello</i>", "<i>Hello World Pass</i>", false, false);
}
+
</pre></div>
<p>Now that it's all together, compile the file with a simple "<tt>gmake</tt>"
@@ -348,7 +349,7 @@ them) to be useful.</p>
<p>Now that you have a brand new shiny shared object file, we can use the
<tt>opt</tt> command to run an LLVM program through your pass. Because you
-registered your pass with the <tt>RegisterPass</tt> template, you will be able to
+registered your pass with the <tt>INITIALIZE_PASS</tt> macro, you will be able to
use the <tt>opt</tt> tool to access it, once loaded.</p>
<p>To test it, follow the example at the end of the <a
@@ -966,9 +967,8 @@ remember, you may not modify the LLVM <tt>Function</tt> or its contents from a
pass registration works, and discussed some of the reasons that it is used and
what it does. Here we discuss how and why passes are registered.</p>
-<p>As we saw above, passes are registered with the <b><tt>RegisterPass</tt></b>
-template, which requires you to pass at least two
-parameters. The first parameter is the name of the pass that is to be used on
+<p>As we saw above, passes are registered with the <b><tt>INITIALIZE_PASS</tt></b>
+macro. The first parameter is the name of the pass that is to be used on
the command line to specify that the pass should be added to a program (for
example, with <tt>opt</tt> or <tt>bugpoint</tt>). The second argument is the
name of the pass, which is to be used for the <tt>-help</tt> output of
@@ -1247,7 +1247,7 @@ between passes</a> still apply.</p>
<p>Although <a href="#registration">Pass Registration</a> is optional for normal
passes, all analysis group implementations must be registered, and must use the
-<A href="#registerag"><tt>RegisterAnalysisGroup</tt></a> template to join the
+<A href="#registerag"><tt>INITIALIZE_AG_PASS</tt></a> template to join the
implementation pool. Also, a default implementation of the interface
<b>must</b> be registered with <A
href="#registerag"><tt>RegisterAnalysisGroup</tt></a>.</p>
@@ -1283,8 +1283,10 @@ hypothetical example) instead.</p>
<div class="doc_text">
<p>The <tt>RegisterAnalysisGroup</tt> template is used to register the analysis
-group itself as well as add pass implementations to the analysis group. First,
-an analysis should be registered, with a human readable name provided for it.
+group itself, while the <tt>INITIALIZE_AG_PASS</tt> is used to add pass
+implementations to the analysis group. First,
+an analysis group should be registered, with a human readable name
+provided for it.
Unlike registration of passes, there is no command line argument to be specified
for the Analysis Group Interface itself, because it is "abstract":</p>
@@ -1297,35 +1299,36 @@ implementations of the interface by using the following code:</p>
<div class="doc_code"><pre>
<b>namespace</b> {
- //<i> Analysis Group implementations <b>must</b> be registered normally...</i>
- RegisterPass&lt;FancyAA&gt;
- B("<i>somefancyaa</i>", "<i>A more complex alias analysis implementation</i>");
-
//<i> Declare that we implement the AliasAnalysis interface</i>
- RegisterAnalysisGroup&lt;<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>&gt; C(B);
+ INITIALIZE_AG_PASS(FancyAA, <a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, "<i>somefancyaa</i>",
+ "<i>A more complex alias analysis implementation</i>",
+ false, // <i>Is CFG Only?</i>
+ true, // <i>Is Analysis?</i>
+ false, // <i>Is default Analysis Group implementation?</i>
+ );
}
</pre></div>
-<p>This just shows a class <tt>FancyAA</tt> that is registered normally, then
-uses the <tt>RegisterAnalysisGroup</tt> template to "join" the <tt><a
-href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt>
+<p>This just shows a class <tt>FancyAA</tt> that
+uses the <tt>INITIALIZE_AG_PASS</tt> macro both to register and
+to "join" the <tt><a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt>
analysis group. Every implementation of an analysis group should join using
-this template. A single pass may join multiple different analysis groups with
-no problem.</p>
+this macro.</p>
<div class="doc_code"><pre>
<b>namespace</b> {
- //<i> Analysis Group implementations <b>must</b> be registered normally...</i>
- RegisterPass&lt;<a href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a>&gt;
- D("<i>basicaa</i>", "<i>Basic Alias Analysis (default AA impl)</i>");
-
//<i> Declare that we implement the AliasAnalysis interface</i>
- RegisterAnalysisGroup&lt;<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, <b>true</b>&gt; E(D);
+ INITIALIZE_AG_PASS(BasicAA, <a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, "<i>basicaa</i>",
+ "<i>Basic Alias Analysis (default AA impl)</i>",
+ false, // <i>Is CFG Only?</i>
+ true, // <i>Is Analysis?</i>
+ true, // <i>Is default Analysis Group implementation?</i>
+ );
}
</pre></div>
-<p>Here we show how the default implementation is specified (using the extra
-argument to the <tt>RegisterAnalysisGroup</tt> template). There must be exactly
+<p>Here we show how the default implementation is specified (using the final
+argument to the <tt>INITIALIZE_AG_PASS</tt> template). There must be exactly
one default implementation available at all times for an Analysis Group to be
used. Only default implementation can derive from <tt>ImmutablePass</tt>.
Here we declare that the
@@ -1830,7 +1833,7 @@ Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-07-08 10:27:18 +0200 (Thu, 08 Jul 2010) $
+ Last modified: $Date: 2010-07-22 01:07:00 +0200 (Thu, 22 Jul 2010) $
</address>
</body>
diff --git a/docs/tutorial/LangImpl3.html b/docs/tutorial/LangImpl3.html
index 783abb3..6cd33b0 100644
--- a/docs/tutorial/LangImpl3.html
+++ b/docs/tutorial/LangImpl3.html
@@ -222,7 +222,7 @@ code, we do a simple switch on the opcode to create the right LLVM instruction.
<p>In the example above, the LLVM builder class is starting to show its value.
IRBuilder knows where to insert the newly created instruction, all you have to
-do is specify what instruction to create (e.g. with <tt>CreateAdd</tt>), which
+do is specify what instruction to create (e.g. with <tt>CreateFAdd</tt>), which
operands to use (<tt>L</tt> and <tt>R</tt> here) and optionally provide a name
for the generated instruction.</p>
@@ -1054,9 +1054,9 @@ Value *BinaryExprAST::Codegen() {
if (L == 0 || R == 0) return 0;
switch (Op) {
- case '+': return Builder.CreateAdd(L, R, "addtmp");
- case '-': return Builder.CreateSub(L, R, "subtmp");
- case '*': return Builder.CreateMul(L, R, "multmp");
+ case '+': return Builder.CreateFAdd(L, R, "addtmp");
+ case '-': return Builder.CreateFSub(L, R, "subtmp");
+ case '*': return Builder.CreateFMul(L, R, "multmp");
case '&lt;':
L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
@@ -1263,7 +1263,7 @@ int main() {
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-06-14 08:09:39 +0200 (Mon, 14 Jun 2010) $
+ Last modified: $Date: 2010-09-01 22:09:20 +0200 (Wed, 01 Sep 2010) $
</address>
</body>
</html>
diff --git a/docs/tutorial/LangImpl5.html b/docs/tutorial/LangImpl5.html
index b6398ca..4450f2e 100644
--- a/docs/tutorial/LangImpl5.html
+++ b/docs/tutorial/LangImpl5.html
@@ -800,7 +800,7 @@ references to it will naturally find it in the symbol table.</p>
StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
}
- Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+ Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
</pre>
</div>
@@ -1517,7 +1517,7 @@ Value *ForExprAST::Codegen() {
StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
}
- Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+ Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
// Compute the end condition.
Value *EndCond = End-&gt;Codegen();
@@ -1771,7 +1771,7 @@ int main() {
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-06-14 08:09:39 +0200 (Mon, 14 Jun 2010) $
+ Last modified: $Date: 2010-09-01 22:09:20 +0200 (Wed, 01 Sep 2010) $
</address>
</body>
</html>
diff --git a/docs/tutorial/LangImpl6.html b/docs/tutorial/LangImpl6.html
index 7368ea7..c6a0b8a 100644
--- a/docs/tutorial/LangImpl6.html
+++ b/docs/tutorial/LangImpl6.html
@@ -1540,7 +1540,7 @@ Value *ForExprAST::Codegen() {
StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
}
- Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+ Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
// Compute the end condition.
Value *EndCond = End-&gt;Codegen();
@@ -1808,7 +1808,7 @@ int main() {
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-06-21 22:31:30 +0200 (Mon, 21 Jun 2010) $
+ Last modified: $Date: 2010-09-01 22:09:20 +0200 (Wed, 01 Sep 2010) $
</address>
</body>
</html>
diff --git a/docs/tutorial/LangImpl7.html b/docs/tutorial/LangImpl7.html
index be2d69e..1ec99b1 100644
--- a/docs/tutorial/LangImpl7.html
+++ b/docs/tutorial/LangImpl7.html
@@ -480,7 +480,7 @@ the unabridged code):</p>
<b>// Reload, increment, and restore the alloca. This handles the case where
// the body of the loop mutates the variable.
Value *CurVar = Builder.CreateLoad(Alloca);
- Value *NextVar = Builder.CreateAdd(CurVar, StepVal, "nextvar");
+ Value *NextVar = Builder.CreateFAdd(CurVar, StepVal, "nextvar");
Builder.CreateStore(NextVar, Alloca);</b>
...
</pre>
@@ -1833,7 +1833,7 @@ Value *ForExprAST::Codegen() {
// Reload, increment, and restore the alloca. This handles the case where
// the body of the loop mutates the variable.
Value *CurVar = Builder.CreateLoad(Alloca, VarName.c_str());
- Value *NextVar = Builder.CreateAdd(CurVar, StepVal, "nextvar");
+ Value *NextVar = Builder.CreateFAdd(CurVar, StepVal, "nextvar");
Builder.CreateStore(NextVar, Alloca);
// Convert condition to a bool by comparing equal to 0.0.
@@ -2158,7 +2158,7 @@ int main() {
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2010-06-14 08:09:39 +0200 (Mon, 14 Jun 2010) $
+ Last modified: $Date: 2010-09-01 22:09:20 +0200 (Wed, 01 Sep 2010) $
</address>
</body>
</html>
OpenPOWER on IntegriCloud