summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2svn <nothing@nowhere.org>2007-05-23 18:12:40 +0000
committercvs2svn <nothing@nowhere.org>2007-05-23 18:12:40 +0000
commitda8b9c2c5c2548ba967e48b49fbe6fefb95967ee (patch)
treea2abaf2c3a2a4156b71cbb218044c0b191fdcdf4
parentb64c2c8a2afcde97bbb6e2d1dc6208a0313cb16f (diff)
downloadllvm-svn-tags/RELEASE_20.tar.gz
This commit was manufactured by cvs2svn to create tag 'RELEASE_20'.svn-tags/RELEASE_20
git-svn-id: https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_20@37313 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Makefile.rules15
-rw-r--r--autoconf/configure.ac3
-rwxr-xr-xconfigure69
-rw-r--r--docs/BitCodeFormat.html609
-rw-r--r--docs/CommandGuide/man/man1/bugpoint.1240
-rw-r--r--docs/CommandGuide/man/man1/llc.1277
-rw-r--r--docs/CommandGuide/man/man1/lli.1206
-rw-r--r--docs/CommandGuide/man/man1/llvm-ar.1461
-rw-r--r--docs/CommandGuide/man/man1/llvm-as.1182
-rw-r--r--docs/CommandGuide/man/man1/llvm-bcanalyzer.1370
-rw-r--r--docs/CommandGuide/man/man1/llvm-config.1227
-rw-r--r--docs/CommandGuide/man/man1/llvm-db.1141
-rw-r--r--docs/CommandGuide/man/man1/llvm-dis.1175
-rw-r--r--docs/CommandGuide/man/man1/llvm-extract.1177
-rw-r--r--docs/CommandGuide/man/man1/llvm-ld.1348
-rw-r--r--docs/CommandGuide/man/man1/llvm-link.1186
-rw-r--r--docs/CommandGuide/man/man1/llvm-nm.1219
-rw-r--r--docs/CommandGuide/man/man1/llvm-prof.1173
-rw-r--r--docs/CommandGuide/man/man1/llvm-ranlib.1167
-rw-r--r--docs/CommandGuide/man/man1/llvm-upgrade.1179
-rw-r--r--docs/CommandGuide/man/man1/llvm2cpp.1301
-rw-r--r--docs/CommandGuide/man/man1/llvmc.1455
-rw-r--r--docs/CommandGuide/man/man1/llvmgcc.1194
-rw-r--r--docs/CommandGuide/man/man1/llvmgxx.1194
-rw-r--r--docs/CommandGuide/man/man1/opt.1246
-rw-r--r--docs/CommandGuide/man/man1/stkrc.1198
-rw-r--r--docs/CommandGuide/man/man1/tblgen.1215
-rw-r--r--docs/GettingStarted.html11
-rw-r--r--docs/LangRef.html56
-rw-r--r--docs/ReleaseNotes.html655
-rw-r--r--docs/WritingAnLLVMPass.html12
-rw-r--r--include/llvm/BasicBlock.h1
-rw-r--r--include/llvm/IntrinsicsX86.td4
-rw-r--r--include/llvm/ValueSymbolTable.h1
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.cpp165
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.h13
-rw-r--r--lib/Bitcode/Writer/BitcodeWriter.cpp27
-rw-r--r--lib/CodeGen/SelectionDAG/DAGCombiner.cpp4
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp26
-rw-r--r--lib/Support/APInt.cpp6
-rw-r--r--lib/System/Unix/MappedFile.inc1
-rw-r--r--lib/Target/CBackend/CBackend.cpp5
-rw-r--r--lib/Target/PowerPC/PPCISelLowering.cpp26
-rw-r--r--lib/Target/PowerPC/PPCRegisterInfo.td6
-rw-r--r--lib/Target/X86/X86ISelLowering.cpp14
-rw-r--r--lib/Target/X86/X86InstrMMX.td4
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp6
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp34
-rw-r--r--test/CodeGen/SPARC/2007-05-09-JumpTables.ll30
-rw-r--r--test/Feature/llvm2cpp.ll795
-rw-r--r--tools/llvm-upgrade/UpgradeLexer.cpp.cvs332
-rw-r--r--tools/llvm-upgrade/UpgradeParser.cpp.cvs626
-rw-r--r--tools/llvm-upgrade/UpgradeParser.h.cvs2
-rw-r--r--tools/llvm-upgrade/UpgradeParser.y.cvs90
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp12
55 files changed, 7464 insertions, 1727 deletions
diff --git a/Makefile.rules b/Makefile.rules
index 888c5bdf0406..d83f2fa548b3 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -1359,15 +1359,12 @@ all:: $(YaccFiles:%.y=$(PROJ_SRC_DIR)/%.cpp.cvs)
%.h: %.y
# Rule for building the bison based parsers...
-$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
ifneq ($(BISON),)
+$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
$(Echo) "Bisoning $*.y"
$(Verb) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c $<
$(Verb) $(MV) -f $*.tab.c $(PROJ_SRC_DIR)/$*.cpp
$(Verb) $(MV) -f $*.tab.h $(PROJ_SRC_DIR)/$*.h
-else
- $(Echo) "Bison of $*.y SKIPPED -- bison not found"
-endif
# IFF the .y file has changed since it was last checked into CVS, copy the .y
# file to .y.cvs and the generated .cpp/.h file to .cpp.cvs/.h.cvs. We use this
@@ -1380,6 +1377,16 @@ $(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp
$(CP) $(PROJ_SRC_DIR)/$*.y $(PROJ_SRC_DIR)/$*.y.cvs; \
$(CP) $(PROJ_SRC_DIR)/$*.h $(PROJ_SRC_DIR)/$*.h.cvs)
+else
+$(PROJ_SRC_DIR)/%.cpp : $(PROJ_SRC_DIR)/%.cpp.cvs
+ $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .cpp.cvs"
+ $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.cpp.cvs $(PROJ_SRC_DIR)/$*.cpp
+
+$(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.h.cvs
+ $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .h.cvs"
+ $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.h.cvs $(PROJ_SRC_DIR)/$*.h
+endif
+
$(YaccFiles:%.y=$(ObjDir)/%.o): $(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
diff --git a/autoconf/configure.ac b/autoconf/configure.ac
index 293406160c11..674b9054d9ad 100644
--- a/autoconf/configure.ac
+++ b/autoconf/configure.ac
@@ -31,7 +31,7 @@ dnl===
dnl===-----------------------------------------------------------------------===
dnl Initialize autoconf and define the package name, version number and
dnl email address for reporting bugs.
-AC_INIT([[llvm]],[[2.0cvs]],[llvmbugs@cs.uiuc.edu])
+AC_INIT([[llvm]],[[2.0]],[llvmbugs@cs.uiuc.edu])
dnl Provide a copyright substitution and ensure the copyright notice is included
dnl in the output of --version option of the generated configure script.
@@ -495,6 +495,7 @@ LLVM_PROG_PERL([5.006])
AC_SUBST(PERL)
if test x"$PERL" = xnone; then
AC_SUBST(HAVE_PERL,0)
+ AC_MSG_ERROR([perl is required but was not found, please install it])
else
AC_SUBST(HAVE_PERL,1)
fi
diff --git a/configure b/configure
index 820080c210ae..7c417e103ae0 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.60 for llvm 2.0cvs.
+# Generated by GNU Autoconf 2.60 for llvm 2.0.
#
# Report bugs to <llvmbugs@cs.uiuc.edu>.
#
@@ -715,8 +715,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='llvm'
PACKAGE_TARNAME='-llvm-'
-PACKAGE_VERSION='2.0cvs'
-PACKAGE_STRING='llvm 2.0cvs'
+PACKAGE_VERSION='2.0'
+PACKAGE_STRING='llvm 2.0'
PACKAGE_BUGREPORT='llvmbugs@cs.uiuc.edu'
ac_unique_file="lib/VMCore/Module.cpp"
@@ -1450,7 +1450,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures llvm 2.0cvs to adapt to many kinds of systems.
+\`configure' configures llvm 2.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1516,7 +1516,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of llvm 2.0cvs:";;
+ short | recursive ) echo "Configuration of llvm 2.0:";;
esac
cat <<\_ACEOF
@@ -1641,7 +1641,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-llvm configure 2.0cvs
+llvm configure 2.0
generated by GNU Autoconf 2.60
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1657,7 +1657,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by llvm $as_me 2.0cvs, which was
+It was created by llvm $as_me 2.0, which was
generated by GNU Autoconf 2.60. Invocation command line was
$ $0 $@
@@ -7374,6 +7374,9 @@ fi
if test x"$PERL" = xnone; then
HAVE_PERL=0
+ { { echo "$as_me:$LINENO: error: perl is required but was not found, please install it" >&5
+echo "$as_me: error: perl is required but was not found, please install it" >&2;}
+ { (exit 1); exit 1; }; }
else
HAVE_PERL=1
@@ -10340,7 +10343,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10343 "configure"
+#line 10346 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12484,7 +12487,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 12487 "configure"' > conftest.$ac_ext
+ echo '#line 12490 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -14202,11 +14205,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14205: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14208: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14209: \$? = $ac_status" >&5
+ echo "$as_me:14212: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -14470,11 +14473,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14473: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14476: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14477: \$? = $ac_status" >&5
+ echo "$as_me:14480: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -14574,11 +14577,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14577: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14580: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14581: \$? = $ac_status" >&5
+ echo "$as_me:14584: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17026,7 +17029,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17029 "configure"
+#line 17032 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17126,7 +17129,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 17129 "configure"
+#line 17132 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19494,11 +19497,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:19497: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19500: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:19501: \$? = $ac_status" >&5
+ echo "$as_me:19504: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -19598,11 +19601,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:19601: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19604: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:19605: \$? = $ac_status" >&5
+ echo "$as_me:19608: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -21168,11 +21171,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21171: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21174: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:21175: \$? = $ac_status" >&5
+ echo "$as_me:21178: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -21272,11 +21275,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21275: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21278: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:21279: \$? = $ac_status" >&5
+ echo "$as_me:21282: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -23507,11 +23510,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:23510: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:23513: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:23514: \$? = $ac_status" >&5
+ echo "$as_me:23517: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -23775,11 +23778,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:23778: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:23781: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:23782: \$? = $ac_status" >&5
+ echo "$as_me:23785: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -23879,11 +23882,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:23882: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:23885: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:23886: \$? = $ac_status" >&5
+ echo "$as_me:23889: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -34017,7 +34020,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by llvm $as_me 2.0cvs, which was
+This file was extended by llvm $as_me 2.0, which was
generated by GNU Autoconf 2.60. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -34070,7 +34073,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-llvm config.status 2.0cvs
+llvm config.status 2.0
configured by $0, generated by GNU Autoconf 2.60,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/docs/BitCodeFormat.html b/docs/BitCodeFormat.html
index 0579a42115eb..7194c7a6d343 100644
--- a/docs/BitCodeFormat.html
+++ b/docs/BitCodeFormat.html
@@ -1,59 +1,612 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>LLVM Bitcode File Format</title>
<link rel="stylesheet" href="llvm.css" type="text/css">
- <style type="text/css">
- TR, TD { border: 2px solid gray; padding-left: 4pt; padding-right: 4pt;
- padding-top: 2pt; padding-bottom: 2pt; }
- TH { border: 2px solid gray; font-weight: bold; font-size: 105%; }
- TABLE { text-align: center; border: 2px solid black;
- border-collapse: collapse; margin-top: 1em; margin-left: 1em;
- margin-right: 1em; margin-bottom: 1em; }
- .td_left { border: 2px solid gray; text-align: left; }
- </style>
</head>
<body>
<div class="doc_title"> LLVM Bitcode File Format </div>
<ol>
<li><a href="#abstract">Abstract</a></li>
- <li><a href="#concepts">Concepts</a></li>
+ <li><a href="#overview">Overview</a></li>
+ <li><a href="#bitstream">Bitstream Format</a>
+ <ol>
+ <li><a href="#magic">Magic Numbers</a></li>
+ <li><a href="#primitives">Primitives</a></li>
+ <li><a href="#abbrevid">Abbreviation IDs</a></li>
+ <li><a href="#blocks">Blocks</a></li>
+ <li><a href="#datarecord">Data Records</a></li>
+ <li><a href="#abbreviations">Abbreviations</a></li>
+ <li><a href="#stdblocks">Standard Blocks</a></li>
+ </ol>
+ </li>
+ <li><a href="#llvmir">LLVM IR Encoding</a>
+ <ol>
+ <li><a href="#basics">Basics</a></li>
+ </ol>
+ </li>
</ol>
<div class="doc_author">
- <p>Written by <a href="mailto:rspencer@x10sys.com">Reid Spencer</a> and
- <a href="mailto:sabre@nondot.org">Chris Lattner</a>.
+ <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>.
</p>
</div>
+
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="abstract">Abstract </a></div>
+<div class="doc_section"> <a name="abstract">Abstract</a></div>
<!-- *********************************************************************** -->
+
<div class="doc_text">
-<p>This document describes the LLVM bitcode file format. It specifies
-the binary encoding rules of the bitcode file format so that
-equivalent systems can encode bitcode files correctly. The LLVM
-bitcode representation is used to store the intermediate
-representation on disk in a compacted form.</p>
-<p>This document supercedes the LLVM bytecode file format for the 2.0
-release.</p>
+
+<p>This document describes the LLVM bitstream file format and the encoding of
+the LLVM IR into it.</p>
+
</div>
+
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="concepts">Concepts</a> </div>
+<div class="doc_section"> <a name="overview">Overview</a></div>
<!-- *********************************************************************** -->
+
<div class="doc_text">
-<p>This section describes the general concepts of the bitcode file
-format without getting into specific layout details. It is recommended
-that you read this section thoroughly before interpreting the detailed
-descriptions.</p>
+
+<p>
+What is commonly known as the LLVM bitcode file format (also, sometimes
+anachronistically known as bytecode) is actually two things: a <a
+href="#bitstream">bitstream container format</a>
+and an <a href="#llvmir">encoding of LLVM IR</a> into the container format.</p>
+
+<p>
+The bitstream format is an abstract encoding of structured data, very
+similar to XML in some ways. Like XML, bitstream files contain tags, and nested
+structures, and you can parse the file without having to understand the tags.
+Unlike XML, the bitstream format is a binary encoding, and unlike XML it
+provides a mechanism for the file to self-describe "abbreviations", which are
+effectively size optimizations for the content.</p>
+
+<p>This document first describes the LLVM bitstream format, then describes the
+record structure used by LLVM IR files.
+</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"> <a name="bitstream">Bitstream Format</a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>
+The bitstream format is literally a stream of bits, with a very simple
+structure. This structure consists of the following concepts:
+</p>
+
+<ul>
+<li>A "<a href="#magic">magic number</a>" that identifies the contents of
+ the stream.</li>
+<li>Encoding <a href="#primitives">primitives</a> like variable bit-rate
+ integers.</li>
+<li><a href="#blocks">Blocks</a>, which define nested content.</li>
+<li><a href="#datarecord">Data Records</a>, which describe entities within the
+ file.</li>
+<li>Abbreviations, which specify compression optimizations for the file.</li>
+</ul>
+
+<p>Note that the <a
+href="CommandGuide/html/llvm-bcanalyzer.html">llvm-bcanalyzer</a> tool can be
+used to dump and inspect arbitrary bitstreams, which is very useful for
+understanding the encoding.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="magic">Magic Numbers</a>
+</div>
+
+<div class="doc_text">
+
+<p>The first four bytes of the stream identify the encoding of the file. This
+is used by a reader to know what is contained in the file.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="primitives">Primitives</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+A bitstream literally consists of a stream of bits. This stream is made up of a
+number of primitive values that encode a stream of unsigned integer values.
+These
+integers are are encoded in two ways: either as <a href="#fixedwidth">Fixed
+Width Integers</a> or as <a href="#variablewidth">Variable Width
+Integers</a>.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="fixedwidth">Fixed Width Integers</a>
+</div>
+
+<div class="doc_text">
+
+<p>Fixed-width integer values have their low bits emitted directly to the file.
+ For example, a 3-bit integer value encodes 1 as 001. Fixed width integers
+ are used when there are a well-known number of options for a field. For
+ example, boolean values are usually encoded with a 1-bit wide integer.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="variablewidth">Variable Width
+Integers</a></div>
+
+<div class="doc_text">
+
+<p>Variable-width integer (VBR) values encode values of arbitrary size,
+optimizing for the case where the values are small. Given a 4-bit VBR field,
+any 3-bit value (0 through 7) is encoded directly, with the high bit set to
+zero. Values larger than N-1 bits emit their bits in a series of N-1 bit
+chunks, where all but the last set the high bit.</p>
+
+<p>For example, the value 27 (0x1B) is encoded as 1011 0011 when emitted as a
+vbr4 value. The first set of four bits indicates the value 3 (011) with a
+continuation piece (indicated by a high bit of 1). The next word indicates a
+value of 24 (011 << 3) with no continuation. The sum (3+24) yields the value
+27.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="char6">6-bit characters</a></div>
+
+<div class="doc_text">
+
+<p>6-bit characters encode common characters into a fixed 6-bit field. They
+represent the following characters with the following 6-bit values:</p>
+
+<ul>
+<li>'a' .. 'z' - 0 .. 25</li>
+<li>'A' .. 'Z' - 26 .. 52</li>
+<li>'0' .. '9' - 53 .. 61</li>
+<li>'.' - 62</li>
+<li>'_' - 63</li>
+</ul>
+
+<p>This encoding is only suitable for encoding characters and strings that
+consist only of the above characters. It is completely incapable of encoding
+characters not in the set.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="wordalign">Word Alignment</a></div>
+
+<div class="doc_text">
+
+<p>Occasionally, it is useful to emit zero bits until the bitstream is a
+multiple of 32 bits. This ensures that the bit position in the stream can be
+represented as a multiple of 32-bit words.</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="abbrevid">Abbreviation IDs</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+A bitstream is a sequential series of <a href="#blocks">Blocks</a> and
+<a href="#datarecord">Data Records</a>. Both of these start with an
+abbreviation ID encoded as a fixed-bitwidth field. The width is specified by
+the current block, as described below. The value of the abbreviation ID
+specifies either a builtin ID (which have special meanings, defined below) or
+one of the abbreviation IDs defined by the stream itself.
+</p>
+
+<p>
+The set of builtin abbrev IDs is:
+</p>
+
+<ul>
+<li>0 - <a href="#END_BLOCK">END_BLOCK</a> - This abbrev ID marks the end of the
+ current block.</li>
+<li>1 - <a href="#ENTER_SUBBLOCK">ENTER_SUBBLOCK</a> - This abbrev ID marks the
+ beginning of a new block.</li>
+<li>2 - <a href="#DEFINE_ABBREV">DEFINE_ABBREV</a> - This defines a new
+ abbreviation.</li>
+<li>3 - <a href="#UNABBREV_RECORD">UNABBREV_RECORD</a> - This ID specifies the
+ definition of an unabbreviated record.</li>
+</ul>
+
+<p>Abbreviation IDs 4 and above are defined by the stream itself, and specify
+an <a href="#abbrev_records">abbreviated record encoding</a>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="blocks">Blocks</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+Blocks in a bitstream denote nested regions of the stream, and are identified by
+a content-specific id number (for example, LLVM IR uses an ID of 12 to represent
+function bodies). Nested blocks capture the hierachical structure of the data
+encoded in it, and various properties are associated with blocks as the file is
+parsed. Block definitions allow the reader to efficiently skip blocks
+in constant time if the reader wants a summary of blocks, or if it wants to
+efficiently skip data they do not understand. The LLVM IR reader uses this
+mechanism to skip function bodies, lazily reading them on demand.
+</p>
+
+<p>
+When reading and encoding the stream, several properties are maintained for the
+block. In particular, each block maintains:
+</p>
+
+<ol>
+<li>A current abbrev id width. This value starts at 2, and is set every time a
+ block record is entered. The block entry specifies the abbrev id width for
+ the body of the block.</li>
+
+<li>A set of abbreviations. Abbreviations may be defined within a block, or
+ they may be associated with all blocks of a particular ID.
+</li>
+</ol>
+
+<p>As sub blocks are entered, these properties are saved and the new sub-block
+has its own set of abbreviations, and its own abbrev id width. When a sub-block
+is popped, the saved values are restored.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="ENTER_SUBBLOCK">ENTER_SUBBLOCK
+Encoding</a></div>
+
+<div class="doc_text">
+
+<p><tt>[ENTER_SUBBLOCK, blockid<sub>vbr8</sub>, newabbrevlen<sub>vbr4</sub>,
+ &lt;align32bits&gt;, blocklen<sub>32</sub>]</tt></p>
+
+<p>
+The ENTER_SUBBLOCK abbreviation ID specifies the start of a new block record.
+The <tt>blockid</tt> value is encoded as a 8-bit VBR identifier, and indicates
+the type of block being entered (which is application specific). The
+<tt>newabbrevlen</tt> value is a 4-bit VBR which specifies the
+abbrev id width for the sub-block. The <tt>blocklen</tt> is a 32-bit aligned
+value that specifies the size of the subblock, in 32-bit words. This value
+allows the reader to skip over the entire block in one jump.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="END_BLOCK">END_BLOCK
+Encoding</a></div>
+
+<div class="doc_text">
+
+<p><tt>[END_BLOCK, &lt;align32bits&gt;]</tt></p>
+
+<p>
+The END_BLOCK abbreviation ID specifies the end of the current block record.
+Its end is aligned to 32-bits to ensure that the size of the block is an even
+multiple of 32-bits.</p>
+
+</div>
+
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="datarecord">Data Records</a>
+</div>
+
+<div class="doc_text">
+<p>
+Data records consist of a record code and a number of (up to) 64-bit integer
+values. The interpretation of the code and values is application specific and
+there are multiple different ways to encode a record (with an unabbrev record
+or with an abbreviation). In the LLVM IR format, for example, there is a record
+which encodes the target triple of a module. The code is MODULE_CODE_TRIPLE,
+and the values of the record are the ascii codes for the characters in the
+string.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="UNABBREV_RECORD">UNABBREV_RECORD
+Encoding</a></div>
+
+<div class="doc_text">
+
+<p><tt>[UNABBREV_RECORD, code<sub>vbr6</sub>, numops<sub>vbr6</sub>,
+ op0<sub>vbr6</sub>, op1<sub>vbr6</sub>, ...]</tt></p>
+
+<p>An UNABBREV_RECORD provides a default fallback encoding, which is both
+completely general and also extremely inefficient. It can describe an arbitrary
+record, by emitting the code and operands as vbrs.</p>
+
+<p>For example, emitting an LLVM IR target triple as an unabbreviated record
+requires emitting the UNABBREV_RECORD abbrevid, a vbr6 for the
+MODULE_CODE_TRIPLE code, a vbr6 for the length of the string (which is equal to
+the number of operands), and a vbr6 for each character. Since there are no
+letters with value less than 32, each letter would need to be emitted as at
+least a two-part VBR, which means that each letter would require at least 12
+bits. This is not an efficient encoding, but it is fully general.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="abbrev_records">Abbreviated Record
+Encoding</a></div>
+
+<div class="doc_text">
+
+<p><tt>[&lt;abbrevid&gt;, fields...]</tt></p>
+
+<p>An abbreviated record is a abbreviation id followed by a set of fields that
+are encoded according to the <a href="#abbreviations">abbreviation
+definition</a>. This allows records to be encoded significantly more densely
+than records encoded with the <a href="#UNABBREV_RECORD">UNABBREV_RECORD</a>
+type, and allows the abbreviation types to be specified in the stream itself,
+which allows the files to be completely self describing. The actual encoding
+of abbreviations is defined below.
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="abbreviations">Abbreviations</a>
+</div>
+
+<div class="doc_text">
+<p>
+Abbreviations are an important form of compression for bitstreams. The idea is
+to specify a dense encoding for a class of records once, then use that encoding
+to emit many records. It takes space to emit the encoding into the file, but
+the space is recouped (hopefully plus some) when the records that use it are
+emitted.
+</p>
+
+<p>
+Abbreviations can be determined dynamically per client, per file. Since the
+abbreviations are stored in the bitstream itself, different streams of the same
+format can contain different sets of abbreviations if the specific stream does
+not need it. As a concrete example, LLVM IR files usually emit an abbreviation
+for binary operators. If a specific LLVM module contained no or few binary
+operators, the abbreviation does not need to be emitted.
+</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="DEFINE_ABBREV">DEFINE_ABBREV
+ Encoding</a></div>
+
+<div class="doc_text">
+
+<p><tt>[DEFINE_ABBREV, numabbrevops<sub>vbr5</sub>, abbrevop0, abbrevop1,
+ ...]</tt></p>
+
+<p>An abbreviation definition consists of the DEFINE_ABBREV abbrevid followed
+by a VBR that specifies the number of abbrev operands, then the abbrev
+operands themselves. Abbreviation operands come in three forms. They all start
+with a single bit that indicates whether the abbrev operand is a literal operand
+(when the bit is 1) or an encoding operand (when the bit is 0).</p>
+
+<ol>
+<li>Literal operands - <tt>[1<sub>1</sub>, litvalue<sub>vbr8</sub>]</tt> -
+Literal operands specify that the value in the result
+is always a single specific value. This specific value is emitted as a vbr8
+after the bit indicating that it is a literal operand.</li>
+<li>Encoding info without data - <tt>[0<sub>1</sub>, encoding<sub>3</sub>]</tt>
+ - Operand encodings that do not have extra data are just emitted as their code.
+</li>
+<li>Encoding info with data - <tt>[0<sub>1</sub>, encoding<sub>3</sub>,
+value<sub>vbr5</sub>]</tt> - Operand encodings that do have extra data are
+emitted as their code, followed by the extra data.
+</li>
+</ol>
+
+<p>The possible operand encodings are:</p>
+
+<ul>
+<li>1 - Fixed - The field should be emitted as a <a
+ href="#fixedwidth">fixed-width value</a>, whose width
+ is specified by the encoding operand.</li>
+<li>2 - VBR - The field should be emitted as a <a
+ href="#variablewidth">variable-width value</a>, whose width
+ is specified by the encoding operand.</li>
+<li>3 - Array - This field is an array of values. The element type of the array
+ is specified by the next encoding operand.</li>
+<li>4 - Char6 - This field should be emitted as a <a href="#char6">char6-encoded
+ value</a>.</li>
+</ul>
+
+<p>For example, target triples in LLVM modules are encoded as a record of the
+form <tt>[TRIPLE, 'a', 'b', 'c', 'd']</tt>. Consider if the bitstream emitted
+the following abbrev entry:</p>
+
+<ul>
+<li><tt>[0, Fixed, 4]</tt></li>
+<li><tt>[0, Array]</tt></li>
+<li><tt>[0, Char6]</tt></li>
+</ul>
+
+<p>When emitting a record with this abbreviation, the above entry would be
+emitted as:</p>
+
+<p><tt>[4<sub>abbrevwidth</sub>, 2<sub>4</sub>, 4<sub>vbr6</sub>,
+ 0<sub>6</sub>, 1<sub>6</sub>, 2<sub>6</sub>, 3<sub>6</sub>]</tt></p>
+
+<p>These values are:</p>
+
+<ol>
+<li>The first value, 4, is the abbreviation ID for this abbreviation.</li>
+<li>The second value, 2, is the code for TRIPLE in LLVM IR files.</li>
+<li>The third value, 4, is the length of the array.</li>
+<li>The rest of the values are the char6 encoded values for "abcd".</li>
+</ol>
+
+<p>With this abbreviation, the triple is emitted with only 37 bits (assuming a
+abbrev id width of 3). Without the abbreviation, significantly more space would
+be required to emit the target triple. Also, since the TRIPLE value is not
+emitted as a literal in the abbreviation, the abbreviation can also be used for
+any other string value.
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="stdblocks">Standard Blocks</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+In addition to the basic block structure and record encodings, the bitstream
+also defines specific builtin block types. These block types specify how the
+stream is to be decoded or other metadata. In the future, new standard blocks
+may be added.
+</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="BLOCKINFO">#0 - BLOCKINFO
+Block</a></div>
+
+<div class="doc_text">
+
+<p>The BLOCKINFO block allows the description of metadata for other blocks. The
+ currently specified records are:</p>
+
+<ul>
+<li><tt>[SETBID (#1), blockid]</tt></li>
+<li><tt>[DEFINE_ABBREV, ...]</tt></li>
+</ul>
+
+<p>
+The SETBID record indicates which block ID is being described. The standard
+DEFINE_ABBREV record specifies an abbreviation. The abbreviation is associated
+with the record ID, and any records with matching ID automatically get the
+abbreviation.
+</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"> <a name="llvmir">LLVM IR Encoding</a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>LLVM IR is encoded into a bitstream by defining blocks and records. It uses
+blocks for things like constant pools, functions, symbol tables, etc. It uses
+records for things like instructions, global variable descriptors, type
+descriptions, etc. This document does not describe the set of abbreviations
+that the writer uses, as these are fully self-described in the file, and the
+reader is not allowed to build in any knowledge of this.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="basics">Basics</a>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="ir_magic">LLVM IR Magic Number</a></div>
+
+<div class="doc_text">
+
+<p>
+The magic number for LLVM IR files is:
+</p>
+
+<p><tt>['B'<sub>8</sub>, 'C'<sub>8</sub>, 0x0<sub>4</sub>, 0xC<sub>4</sub>,
+0xE<sub>4</sub>, 0xD<sub>4</sub>]</tt></p>
+
+<p>When viewed as bytes, this is "BC 0xC0DE".</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="ir_signed_vbr">Signed VBRs</a></div>
+
+<div class="doc_text">
+
+<p>
+<a href="#variablewidth">Variable Width Integers</a> are an efficient way to
+encode arbitrary sized unsigned values, but is an extremely inefficient way to
+encode signed values (as signed values are otherwise treated as maximally large
+unsigned values).</p>
+
+<p>As such, signed vbr values of a specific width are emitted as follows:</p>
+
+<ul>
+<li>Positive values are emitted as vbrs of the specified width, but with their
+ value shifted left by one.</li>
+<li>Negative values are emitted as vbrs of the specified width, but the negated
+ value is shifted left by one, and the low bit is set.</li>
+</ul>
+
+<p>With this encoding, small positive and small negative values can both be
+emitted efficiently.</p>
+
+</div>
+
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="ir_blocks">LLVM IR Blocks</a></div>
+
+<div class="doc_text">
+
+<p>
+LLVM IR is defined with the following blocks:
+</p>
+
+<ul>
+<li>8 - MODULE_BLOCK - This is the top-level block that contains the
+ entire module, and describes a variety of per-module information.</li>
+<li>9 - PARAMATTR_BLOCK - This enumerates the parameter attributes.</li>
+<li>10 - TYPE_BLOCK - This describes all of the types in the module.</li>
+<li>11 - CONSTANTS_BLOCK - This describes constants for a module or
+ function.</li>
+<li>12 - FUNCTION_BLOCK - This describes a function body.</li>
+<li>13 - TYPE_SYMTAB_BLOCK - This describes the type symbol table.</li>
+<li>14 - VALUE_SYMTAB_BLOCK - This describes a value symbol table.</li>
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="MODULE_BLOCK">MODULE_BLOCK Contents</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+</p>
+
</div>
+
+
<!-- *********************************************************************** -->
<hr>
<address> <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
<a href="http://validator.w3.org/check/referer"><img
src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a>
-<a href="mailto:rspencer@x10sys.com">Reid Spencer</a> and <a
- href="mailto:sabre@nondot.org">Chris Lattner</a><br>
+ <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
<a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
Last modified: $Date$
</address>
diff --git a/docs/CommandGuide/man/man1/bugpoint.1 b/docs/CommandGuide/man/man1/bugpoint.1
new file mode 100644
index 000000000000..422be7a2ee01
--- /dev/null
+++ b/docs/CommandGuide/man/man1/bugpoint.1
@@ -0,0 +1,240 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "BUGPOINT 1"
+.TH BUGPOINT 1 "2006-09-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+bugpoint \- automatic test case reduction tool
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBbugpoint\fR [\fIoptions\fR] [\fIinput \s-1LLVM\s0 ll/bc files\fR] [\fI\s-1LLVM\s0 passes\fR] \fB\-\-args\fR
+\&\fIprogram arguments\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBbugpoint\fR narrows down the source of problems in \s-1LLVM\s0 tools and passes. It
+can be used to debug three types of failures: optimizer crashes, miscompilations
+by optimizers, or bad native code generation (including problems in the static
+and \s-1JIT\s0 compilers). It aims to reduce large test cases to small, useful ones.
+For more information on the design and inner workings of \fBbugpoint\fR, as well as
+advice for using bugpoint, see \fIllvm/docs/Bugpoint.html\fR in the \s-1LLVM\s0
+distribution.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-additional\-so\fR \fIlibrary\fR" 4
+.IX Item "--additional-so library"
+Load the dynamic shared object \fIlibrary\fR into the test program whenever it is
+run. This is useful if you are debugging programs which depend on non-LLVM
+libraries (such as the X or curses libraries) to run.
+.IP "\fB\-\-args\fR \fIprogram args\fR" 4
+.IX Item "--args program args"
+Pass all arguments specified after \-args to the test program whenever it runs.
+Note that if any of the \fIprogram args\fR start with a '\-', you should use:
+.Sp
+.Vb 1
+\& bugpoint [bugpoint args] --args -- [program args]
+.Ve
+.Sp
+The \*(L"\-\-\*(R" right after the \fB\-\-args\fR option tells \fBbugpoint\fR to consider any
+options starting with \f(CW\*(C`\-\*(C'\fR to be part of the \fB\-\-args\fR option, not as options to
+\&\fBbugpoint\fR itself.
+.IP "\fB\-\-tool\-args\fR \fItool args\fR" 4
+.IX Item "--tool-args tool args"
+Pass all arguments specified after \-\-tool\-args to the \s-1LLVM\s0 tool under test
+(\fBllc\fR, \fBlli\fR, etc.) whenever it runs. You should use this option in the
+following way:
+.Sp
+.Vb 1
+\& bugpoint [bugpoint args] --tool-args -- [tool args]
+.Ve
+.Sp
+The \*(L"\-\-\*(R" right after the \fB\-\-tool\-args\fR option tells \fBbugpoint\fR to consider any
+options starting with \f(CW\*(C`\-\*(C'\fR to be part of the \fB\-\-tool\-args\fR option, not as
+options to \fBbugpoint\fR itself. (See \fB\-\-args\fR, above.)
+.IP "\fB\-\-check\-exit\-code\fR=\fI{true,false}\fR" 4
+.IX Item "--check-exit-code={true,false}"
+Assume a non-zero exit code or core dump from the test program is a failure.
+Defaults to true.
+.IP "\fB\-\-disable\-{dce,simplifycfg}\fR" 4
+.IX Item "--disable-{dce,simplifycfg}"
+Do not run the specified passes to clean up and reduce the size of the test
+program. By default, \fBbugpoint\fR uses these passes internally when attempting to
+reduce test programs. If you're trying to find a bug in one of these passes,
+\&\fBbugpoint\fR may crash.
+.IP "\fB\-find\-bugs\fR" 4
+.IX Item "-find-bugs"
+Continually randomize the specified passes and run them on the test program
+until a bug is found or the user kills \fBbugpoint\fR.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-\-input\fR \fIfilename\fR" 4
+.IX Item "--input filename"
+Open \fIfilename\fR and redirect the standard input of the test program, whenever
+it runs, to come from that file.
+.IP "\fB\-\-load\fR \fIplugin\fR" 4
+.IX Item "--load plugin"
+Load the dynamic object \fIplugin\fR into \fBbugpoint\fR itself. This object should
+register new optimization passes. Once loaded, the object will add new command
+line options to enable various optimizations. To see the new complete list of
+optimizations, use the \fB\-\-help\fR and \fB\-\-load\fR options together; for example:
+.Sp
+.Vb 1
+\& bugpoint --load myNewPass.so --help
+.Ve
+.IP "\fB\-\-output\fR \fIfilename\fR" 4
+.IX Item "--output filename"
+Whenever the test program produces output on its standard output stream, it
+should match the contents of \fIfilename\fR (the \*(L"reference output\*(R"). If you
+do not use this option, \fBbugpoint\fR will attempt to generate a reference output
+by compiling the program with the C backend and running it.
+.IP "\fB\-\-profile\-info\-file\fR \fIfilename\fR" 4
+.IX Item "--profile-info-file filename"
+Profile file loaded by \fB\-\-profile\-loader\fR.
+.IP "\fB\-\-run\-{int,jit,llc,cbe}\fR" 4
+.IX Item "--run-{int,jit,llc,cbe}"
+Whenever the test program is compiled, \fBbugpoint\fR should generate code for it
+using the specified code generator. These options allow you to choose the
+interpreter, the \s-1JIT\s0 compiler, the static native code compiler, or the C
+backend, respectively.
+.IP "\fB\-\-enable\-valgrind\fR" 4
+.IX Item "--enable-valgrind"
+Use valgrind to find faults in the optimization phase. This will allow
+bugpoint to find otherwise asymptomatic problems caused by memory
+mis\-management.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBbugpoint\fR succeeds in finding a problem, it will exit with 0. Otherwise,
+if an error occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+opt
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llc.1 b/docs/CommandGuide/man/man1/llc.1
new file mode 100644
index 000000000000..81832b10a6b7
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llc.1
@@ -0,0 +1,277 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLC 1"
+.TH LLC 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llc \- LLVM static compiler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllc\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllc\fR command compiles \s-1LLVM\s0 bytecode into assembly language for a
+specified architecture. The assembly language output can then be passed through
+a native assembler and linker to generate a native executable.
+.PP
+The choice of architecture for the output assembly code is automatically
+determined from the input bytecode file, unless the \fB\-march\fR option is used to
+override the default.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+If \fIfilename\fR is \- or omitted, \fBllc\fR reads \s-1LLVM\s0 bytecode from standard input.
+Otherwise, it will read \s-1LLVM\s0 bytecode from \fIfilename\fR.
+.PP
+If the \fB\-o\fR option is omitted, then \fBllc\fR will send its output to standard
+output if the input is from standard input. If the \fB\-o\fR option specifies \-,
+then the output will also be sent to standard output.
+.PP
+If no \fB\-o\fR option is specified and an input file other than \- is specified,
+then \fBllc\fR creates the output filename by taking the input filename,
+removing any existing \fI.bc\fR extension, and adding a \fI.s\fR suffix.
+.PP
+Other \fBllc\fR options are as follows:
+.Sh "End-user Options"
+.IX Subsection "End-user Options"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Overwrite output files. By default, \fBllc\fR will refuse to overwrite
+an output file which already exists.
+.IP "\fB\-mtriple\fR=\fItarget triple\fR" 4
+.IX Item "-mtriple=target triple"
+Override the target triple specified in the input bytecode file with the
+specified string.
+.IP "\fB\-march\fR=\fIarch\fR" 4
+.IX Item "-march=arch"
+Specify the architecture for which to generate assembly, overriding the target
+encoded in the bytecode file. See the output of \fBllc \-\-help\fR for a list of
+valid architectures. By default this is inferred from the target triple or
+autodetected to the current architecture.
+.IP "\fB\-mcpu\fR=\fIcpuname\fR" 4
+.IX Item "-mcpu=cpuname"
+Specify a specific chip in the current architecture to generate code for.
+By default this is inferred from the target triple and autodetected to
+the current architecture. For a list of available CPUs, use:
+\&\fBllvm-as < /dev/null | llc \-march=xyz \-mcpu=help\fR
+.IP "\fB\-mattr\fR=\fIa1,+a2,\-a3,...\fR" 4
+.IX Item "-mattr=a1,+a2,-a3,..."
+Override or control specific attributes of the target, such as whether \s-1SIMD\s0
+operations are enabled or not. The default set of attributes is set by the
+current \s-1CPU\s0. For a list of available attributes, use:
+\&\fBllvm-as < /dev/null | llc \-march=xyz \-mattr=help\fR
+.IP "\fB\-\-disable\-fp\-elim\fR" 4
+.IX Item "--disable-fp-elim"
+Disable frame pointer elimination optimization.
+.IP "\fB\-\-disable\-excess\-fp\-precision\fR" 4
+.IX Item "--disable-excess-fp-precision"
+Disable optimizations that may produce excess precision for floating point.
+Note that this option can dramatically slow down code on some systems
+(e.g. X86).
+.IP "\fB\-\-enable\-unsafe\-fp\-math\fR" 4
+.IX Item "--enable-unsafe-fp-math"
+Enable optimizations that make unsafe assumptions about \s-1IEEE\s0 math (e.g. that
+addition is associative) or may not work for all input ranges. These
+optimizations allow the code generator to make use of some instructions which
+would otherwise not be usable (such as fsin on X86).
+.IP "\fB\-\-enable\-correct\-eh\-support\fR" 4
+.IX Item "--enable-correct-eh-support"
+Instruct the \fBlowerinvoke\fR pass to insert code for correct exception handling
+support. This is expensive and is by default omitted for efficiency.
+.IP "\fB\-\-stats\fR" 4
+.IX Item "--stats"
+Print statistics recorded by code-generation passes.
+.IP "\fB\-\-time\-passes\fR" 4
+.IX Item "--time-passes"
+Record the amount of time needed for each pass and print a report to standard
+error.
+.IP "\fB\-\-load\fR=\fIdso_path\fR" 4
+.IX Item "--load=dso_path"
+Dynamically load \fIdso_path\fR (a path to a dynamically shared object) that
+implements an \s-1LLVM\s0 target. This will permit the target name to be used with the
+\&\fB\-march\fR option so that code can be generated for that target.
+.Sh "Tuning/Configuration Options"
+.IX Subsection "Tuning/Configuration Options"
+.IP "\fB\-\-print\-machineinstrs\fR" 4
+.IX Item "--print-machineinstrs"
+Print generated machine code between compilation phases (useful for debugging).
+.IP "\fB\-\-regalloc\fR=\fIallocator\fR" 4
+.IX Item "--regalloc=allocator"
+Specify the register allocator to use. The default \fIallocator\fR is \fIlocal\fR.
+Valid register allocators are:
+.RS 4
+.IP "\fIsimple\fR" 4
+.IX Item "simple"
+Very simple \*(L"always spill\*(R" register allocator
+.IP "\fIlocal\fR" 4
+.IX Item "local"
+Local register allocator
+.IP "\fIlinearscan\fR" 4
+.IX Item "linearscan"
+Linear scan global register allocator
+.IP "\fIiterativescan\fR" 4
+.IX Item "iterativescan"
+Iterative scan global register allocator
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-spiller\fR=\fIspiller\fR" 4
+.IX Item "--spiller=spiller"
+Specify the spiller to use for register allocators that support it. Currently
+this option is used only by the linear scan register allocator. The default
+\&\fIspiller\fR is \fIlocal\fR. Valid spillers are:
+.RS 4
+.IP "\fIsimple\fR" 4
+.IX Item "simple"
+Simple spiller
+.IP "\fIlocal\fR" 4
+.IX Item "local"
+Local spiller
+.RE
+.RS 4
+.RE
+.Sh "Intel IA\-32\-specific Options"
+.IX Subsection "Intel IA-32-specific Options"
+.IP "\fB\-\-x86\-asm\-syntax=att|intel\fR" 4
+.IX Item "--x86-asm-syntax=att|intel"
+Specify whether to emit assembly code in \s-1AT&T\s0 syntax (the default) or intel
+syntax.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllc\fR succeeds, it will exit with 0. Otherwise, if an error occurs,
+it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+lli
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/lli.1 b/docs/CommandGuide/man/man1/lli.1
new file mode 100644
index 000000000000..ee21774b8862
--- /dev/null
+++ b/docs/CommandGuide/man/man1/lli.1
@@ -0,0 +1,206 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLI 1"
+.TH LLI 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+lli \- directly execute programs from LLVM bytecode
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBlli\fR [\fIoptions\fR] [\fIfilename\fR] [\fIprogram args\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBlli\fR directly executes programs in \s-1LLVM\s0 bytecode format. It takes a program
+in \s-1LLVM\s0 bytecode format and executes it using a just-in-time compiler, if one is
+available for the current architecture, or an interpreter. \fBlli\fR takes all of
+the same code generator options as llc, but they are only effective when
+\&\fBlli\fR is using the just-in-time compiler.
+.PP
+If \fIfilename\fR is not specified, then \fBlli\fR reads the \s-1LLVM\s0 bytecode for the
+program from standard input.
+.PP
+The optional \fIargs\fR specified on the command line are passed to the program as
+arguments.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-help\fR" 4
+.IX Item "-help"
+Print a summary of command line options.
+.IP "\fB\-stats\fR" 4
+.IX Item "-stats"
+Print statistics from the code-generation passes. This is only meaningful for
+the just-in-time compiler, at present.
+.IP "\fB\-time\-passes\fR" 4
+.IX Item "-time-passes"
+Record the amount of time needed for each code-generation pass and print it to
+standard error.
+.IP "\fB\-mtriple\fR=\fItarget triple\fR" 4
+.IX Item "-mtriple=target triple"
+Override the target triple specified in the input bytecode file with the
+specified string. This may result in a crash if you pick an
+architecture which is not compatible with the current system.
+.IP "\fB\-march\fR=\fIarch\fR" 4
+.IX Item "-march=arch"
+Specify the architecture for which to generate assembly, overriding the target
+encoded in the bytecode file. See the output of \fBllc \-\-help\fR for a list of
+valid architectures. By default this is inferred from the target triple or
+autodetected to the current architecture.
+.IP "\fB\-mcpu\fR=\fIcpuname\fR" 4
+.IX Item "-mcpu=cpuname"
+Specify a specific chip in the current architecture to generate code for.
+By default this is inferred from the target triple and autodetected to
+the current architecture. For a list of available CPUs, use:
+\&\fBllvm-as < /dev/null | llc \-march=xyz \-mcpu=help\fR
+.IP "\fB\-mattr\fR=\fIa1,+a2,\-a3,...\fR" 4
+.IX Item "-mattr=a1,+a2,-a3,..."
+Override or control specific attributes of the target, such as whether \s-1SIMD\s0
+operations are enabled or not. The default set of attributes is set by the
+current \s-1CPU\s0. For a list of available attributes, use:
+\&\fBllvm-as < /dev/null | llc \-march=xyz \-mattr=help\fR
+.IP "\fB\-force\-interpreter\fR=\fI{false,true}\fR" 4
+.IX Item "-force-interpreter={false,true}"
+If set to true, use the interpreter even if a just-in-time compiler is available
+for this architecture. Defaults to false.
+.IP "\fB\-f\fR=\fIname\fR" 4
+.IX Item "-f=name"
+Call the function named \fIname\fR to start the program. Note: The
+function is assumed to have the C signature \f(CW\*(C`int\*(C'\fR \fIname\fR \f(CW\*(C`(int,
+char **, char **)\*(C'\fR. If you try to use this option to call a function of
+incompatible type, undefined behavior may result. Defaults to \f(CW\*(C`main\*(C'\fR.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBlli\fR fails to load the program, it will exit with an exit code of 1.
+Otherwise, it will return the exit code of the program it executes.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llc
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-ar.1 b/docs/CommandGuide/man/man1/llvm-ar.1
new file mode 100644
index 000000000000..a624f46f9cd2
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-ar.1
@@ -0,0 +1,461 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-AR 1"
+.TH LLVM-AR 1 "2006-11-20" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-ar \- LLVM archiver
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-ar\fR [\-]{dmpqrtx}[Rabfikouz] [relpos] [count] <archive> [files...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-ar\fR command is similar to the common Unix utility, \f(CW\*(C`ar\*(C'\fR. It
+archives several files together into a single file. The intent for this is
+to produce archive libraries by \s-1LLVM\s0 bytecode that can be linked into an
+\&\s-1LLVM\s0 program. However, the archive can contain any kind of file. By default,
+\&\fBllvm-ar\fR generates a symbol table that makes linking faster because
+only the symbol table needs to be consulted, not each individual file member
+of the archive.
+.PP
+The \fBllvm-ar\fR command can be used to \fIread\fR both \s-1SVR4\s0 and \s-1BSD\s0 style archive
+files. However, it cannot be used to write them. While the \fBllvm-ar\fR command
+produces files that are \fIalmost\fR identical to the format used by other \f(CW\*(C`ar\*(C'\fR
+implementations, it has two significant departures in order to make the
+archive appropriate for \s-1LLVM\s0. The first departure is that \fBllvm-ar\fR only
+uses \s-1BSD4\s0.4 style long path names (stored immediately after the header) and
+never contains a string table for long names. The second departure is that the
+symbol table is formated for efficient construction of an in-memory data
+structure that permits rapid (red\-black tree) lookups. Consequently, archives
+produced with \fBllvm-ar\fR usually won't be readable or editable with any
+\&\f(CW\*(C`ar\*(C'\fR implementation or useful for linking. Using the \f(CW\*(C`f\*(C'\fR modifier to flatten
+file names will make the archive readable by other \f(CW\*(C`ar\*(C'\fR implementations
+but not for linking because the symbol table format for \s-1LLVM\s0 is unique. If an
+\&\s-1SVR4\s0 or \s-1BSD\s0 style archive is used with the \f(CW\*(C`r\*(C'\fR (replace) or \f(CW\*(C`q\*(C'\fR (quick
+update) operations, the archive will be reconstructed in \s-1LLVM\s0 format. This
+means that the string table will be dropped (in deference to \s-1BSD\s0 4.4 long names)
+and an \s-1LLVM\s0 symbol table will be added (by default). The system symbol table
+will be retained.
+.PP
+Here's where \fBllvm-ar\fR departs from previous \f(CW\*(C`ar\*(C'\fR implementations:
+.IP "\fISymbol Table\fR" 4
+.IX Item "Symbol Table"
+Since \fBllvm-ar\fR is intended to archive bytecode files, the symbol table
+won't make much sense to anything but \s-1LLVM\s0. Consequently, the symbol table's
+format has been simplified. It consists simply of a sequence of pairs
+of a file member index number as an \s-1LSB\s0 4byte integer and a null-terminated
+string.
+.IP "\fILong Paths\fR" 4
+.IX Item "Long Paths"
+Some \f(CW\*(C`ar\*(C'\fR implementations (\s-1SVR4\s0) use a separate file member to record long
+path names (> 15 characters). \fBllvm-ar\fR takes the \s-1BSD\s0 4.4 and Mac \s-1OS\s0 X
+approach which is to simply store the full path name immediately preceding
+the data for the file. The path name is null terminated and may contain the
+slash (/) character.
+.IP "\fICompression\fR" 4
+.IX Item "Compression"
+\&\fBllvm-ar\fR can compress the members of an archive to save space. The
+compression used depends on what's available on the platform and what choices
+the \s-1LLVM\s0 Compressor utility makes. It generally favors bzip2 but will select
+between \*(L"no compression\*(R" or bzip2 depending on what makes sense for the
+file's content.
+.IP "\fIDirectory Recursion\fR" 4
+.IX Item "Directory Recursion"
+Most \f(CW\*(C`ar\*(C'\fR implementations do not recurse through directories but simply
+ignore directories if they are presented to the program in the \fIfiles\fR
+option. \fBllvm-ar\fR, however, can recurse through directory structures and
+add all the files under a directory, if requested.
+.IP "\fI\s-1TOC\s0 Verbose Output\fR" 4
+.IX Item "TOC Verbose Output"
+When \fBllvm-ar\fR prints out the verbose table of contents (\f(CW\*(C`tv\*(C'\fR option), it
+precedes the usual output with a character indicating the basic kind of
+content in the file. A blank means the file is a regular file. A 'Z' means
+the file is compressed. A 'B' means the file is an \s-1LLVM\s0 bytecode file. An
+\&'S' means the file is the symbol table.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The options to \fBllvm-ar\fR are compatible with other \f(CW\*(C`ar\*(C'\fR implementations.
+However, there are a few modifiers (\fIzR\fR) that are not found in other
+\&\f(CW\*(C`ar\*(C'\fRs. The options to \fBllvm-ar\fR specify a single basic operation to
+perform on the archive, a variety of modifiers for that operation, the
+name of the archive file, and an optional list of file names. These options
+are used to determine how \fBllvm-ar\fR should process the archive file.
+.PP
+The Operations and Modifiers are explained in the sections below. The minimal
+set of options is at least one operator and the name of the archive. Typically
+archive files end with a \f(CW\*(C`.a\*(C'\fR suffix, but this is not required. Following
+the \fIarchive-name\fR comes a list of \fIfiles\fR that indicate the specific members
+of the archive to operate on. If the \fIfiles\fR option is not specified, it
+generally means either \*(L"none\*(R" or \*(L"all\*(R" members, depending on the operation.
+.Sh "Operations"
+.IX Subsection "Operations"
+.IP "d" 4
+.IX Item "d"
+Delete files from the archive. No modifiers are applicable to this operation.
+The \fIfiles\fR options specify which members should be removed from the
+archive. It is not an error if a specified file does not appear in the archive.
+If no \fIfiles\fR are specified, the archive is not modified.
+.IP "m[abi]" 4
+.IX Item "m[abi]"
+Move files from one location in the archive to another. The \fIa\fR, \fIb\fR, and
+\&\fIi\fR modifiers apply to this operation. The \fIfiles\fR will all be moved
+to the location given by the modifiers. If no modifiers are used, the files
+will be moved to the end of the archive. If no \fIfiles\fR are specified, the
+archive is not modified.
+.IP "p[k]" 4
+.IX Item "p[k]"
+Print files to the standard output. The \fIk\fR modifier applies to this
+operation. This operation simply prints the \fIfiles\fR indicated to the
+standard output. If no \fIfiles\fR are specified, the entire archive is printed.
+Printing bytecode files is ill-advised as they might confuse your terminal
+settings. The \fIp\fR operation never modifies the archive.
+.IP "q[Rfz]" 4
+.IX Item "q[Rfz]"
+Quickly append files to the end of the archive. The \fIR\fR, \fIf\fR, and \fIz\fR
+modifiers apply to this operation. This operation quickly adds the
+\&\fIfiles\fR to the archive without checking for duplicates that should be
+removed first. If no \fIfiles\fR are specified, the archive is not modified.
+Because of the way that \fBllvm-ar\fR constructs the archive file, its dubious
+whether the \fIq\fR operation is any faster than the \fIr\fR operation.
+.IP "r[Rabfuz]" 4
+.IX Item "r[Rabfuz]"
+Replace or insert file members. The \fIR\fR, \fIa\fR, \fIb\fR, \fIf\fR, \fIu\fR, and \fIz\fR
+modifiers apply to this operation. This operation will replace existing
+\&\fIfiles\fR or insert them at the end of the archive if they do not exist. If no
+\&\fIfiles\fR are specified, the archive is not modified.
+.IP "t[v]" 4
+.IX Item "t[v]"
+Print the table of contents. Without any modifiers, this operation just prints
+the names of the members to the standard output. With the \fIv\fR modifier,
+\&\fBllvm-ar\fR also prints out the file type (B=bytecode, Z=compressed, S=symbol
+table, blank=regular file), the permission mode, the owner and group, the
+size, and the date. If any \fIfiles\fR are specified, the listing is only for
+those files. If no \fIfiles\fR are specified, the table of contents for the
+whole archive is printed.
+.IP "x[oP]" 4
+.IX Item "x[oP]"
+Extract archive members back to files. The \fIo\fR modifier applies to this
+operation. This operation retrieves the indicated \fIfiles\fR from the archive
+and writes them back to the operating system's file system. If no
+\&\fIfiles\fR are specified, the entire archive is extract.
+.Sh "Modifiers (operation specific)"
+.IX Subsection "Modifiers (operation specific)"
+The modifiers below are specific to certain operations. See the Operations
+section (above) to determine which modifiers are applicable to which operations.
+.IP "[a]" 4
+.IX Item "[a]"
+When inserting or moving member files, this option specifies the destination of
+the new files as being \f(CW\*(C`a\*(C'\fRfter the \fIrelpos\fR member. If \fIrelpos\fR is not found,
+the files are placed at the end of the archive.
+.IP "[b]" 4
+.IX Item "[b]"
+When inserting or moving member files, this option specifies the destination of
+the new files as being \f(CW\*(C`b\*(C'\fRefore the \fIrelpos\fR member. If \fIrelpos\fR is not
+found, the files are placed at the end of the archive. This modifier is
+identical to the the \fIi\fR modifier.
+.IP "[f]" 4
+.IX Item "[f]"
+Normally, \fBllvm-ar\fR stores the full path name to a file as presented to it on
+the command line. With this option, truncated (15 characters max) names are
+used. This ensures name compatibility with older versions of \f(CW\*(C`ar\*(C'\fR but may also
+thwart correct extraction of the files (duplicates may overwrite). If used with
+the \fIR\fR option, the directory recursion will be performed but the file names
+will all be \f(CW\*(C`f\*(C'\fRlattened to simple file names.
+.IP "[i]" 4
+.IX Item "[i]"
+A synonym for the \fIb\fR option.
+.IP "[k]" 4
+.IX Item "[k]"
+Normally, \fBllvm-ar\fR will not print the contents of bytecode files when the
+\&\fIp\fR operation is used. This modifier defeats the default and allows the
+bytecode members to be printed.
+.IP "[N]" 4
+.IX Item "[N]"
+This option is ignored by \fBllvm-ar\fR but provided for compatibility.
+.IP "[o]" 4
+.IX Item "[o]"
+When extracting files, this option will cause \fBllvm-ar\fR to preserve the
+original modification times of the files it writes.
+.IP "[P]" 4
+.IX Item "[P]"
+use full path names when matching
+.IP "[R]" 4
+.IX Item "[R]"
+This modifier instructions the \fIr\fR option to recursively process directories.
+Without \fIR\fR, directories are ignored and only those \fIfiles\fR that refer to
+files will be added to the archive. When \fIR\fR is used, any directories specified
+with \fIfiles\fR will be scanned (recursively) to find files to be added to the
+archive. Any file whose name begins with a dot will not be added.
+.IP "[u]" 4
+.IX Item "[u]"
+When replacing existing files in the archive, only replace those files that have
+a time stamp than the time stamp of the member in the archive.
+.IP "[z]" 4
+.IX Item "[z]"
+When inserting or replacing any file in the archive, compress the file first.
+This
+modifier is safe to use when (previously) compressed bytecode files are added to
+the archive; the compressed bytecode files will not be doubly compressed.
+.Sh "Modifiers (generic)"
+.IX Subsection "Modifiers (generic)"
+The modifiers below may be applied to any operation.
+.IP "[c]" 4
+.IX Item "[c]"
+For all operations, \fBllvm-ar\fR will always create the archive if it doesn't
+exist. Normally, \fBllvm-ar\fR will print a warning message indicating that the
+archive is being created. Using this modifier turns off that warning.
+.IP "[s]" 4
+.IX Item "[s]"
+This modifier requests that an archive index (or symbol table) be added to the
+archive. This is the default mode of operation. The symbol table will contain
+all the externally visible functions and global variables defined by all the
+bytecode files in the archive. Using this modifier is more efficient that using
+llvm-ranlib which also creates the symbol table.
+.IP "[S]" 4
+.IX Item "[S]"
+This modifier is the opposite of the \fIs\fR modifier. It instructs \fBllvm-ar\fR to
+not build the symbol table. If both \fIs\fR and \fIS\fR are used, the last modifier to
+occur in the options will prevail.
+.IP "[v]" 4
+.IX Item "[v]"
+This modifier instructs \fBllvm-ar\fR to be verbose about what it is doing. Each
+editing operation taken against the archive will produce a line of output saying
+what is being done.
+.SH "STANDARDS"
+.IX Header "STANDARDS"
+The \fBllvm-ar\fR utility is intended to provide a superset of the \s-1IEEE\s0 Std 1003.2
+(\s-1POSIX\s0.2) functionality for \f(CW\*(C`ar\*(C'\fR. \fBllvm-ar\fR can read both \s-1SVR4\s0 and \s-1BSD4\s0.4 (or
+Mac \s-1OS\s0 X) archives. If the \f(CW\*(C`f\*(C'\fR modifier is given to the \f(CW\*(C`x\*(C'\fR or \f(CW\*(C`r\*(C'\fR operations
+then \fBllvm-ar\fR will write \s-1SVR4\s0 compatible archives. Without this modifier,
+\&\fBllvm-ar\fR will write \s-1BSD4\s0.4 compatible archives that have long names
+immediately after the header and indicated using the \*(L"#1/ddd\*(R" notation for the
+name in the header.
+.SH "FILE FORMAT"
+.IX Header "FILE FORMAT"
+The file format for \s-1LLVM\s0 Archive files is similar to that of \s-1BSD\s0 4.4 or Mac \s-1OSX\s0
+archive files. In fact, except for the symbol table, the \f(CW\*(C`ar\*(C'\fR commands on those
+operating systems should be able to read \s-1LLVM\s0 archive files. The details of the
+file format follow.
+.PP
+Each archive begins with the archive magic number which is the eight printable
+characters \*(L"!<arch>\en\*(R" where \en represents the newline character (0x0A).
+Following the magic number, the file is composed of even length members that
+begin with an archive header and end with a \en padding character if necessary
+(to make the length even). Each file member is composed of a header (defined
+below), an optional newline-terminated \*(L"long file name\*(R" and the contents of
+the file.
+.PP
+The fields of the header are described in the items below. All fields of the
+header contain only \s-1ASCII\s0 characters, are left justified and are right padded
+with space characters.
+.IP "name \- char[16]" 4
+.IX Item "name - char[16]"
+This field of the header provides the name of the archive member. If the name is
+longer than 15 characters or contains a slash (/) character, then this field
+contains \f(CW\*(C`#1/nnn\*(C'\fR where \f(CW\*(C`nnn\*(C'\fR provides the length of the name and the \f(CW\*(C`#1/\*(C'\fR
+is literal. In this case, the actual name of the file is provided in the \f(CW\*(C`nnn\*(C'\fR
+bytes immediately following the header. If the name is 15 characters or less, it
+is contained directly in this field and terminated with a slash (/) character.
+.IP "date \- char[12]" 4
+.IX Item "date - char[12]"
+This field provides the date of modification of the file in the form of a
+decimal encoded number that provides the number of seconds since the epoch
+(since 00:00:00 Jan 1, 1970) per Posix specifications.
+.IP "uid \- char[6]" 4
+.IX Item "uid - char[6]"
+This field provides the user id of the file encoded as a decimal \s-1ASCII\s0 string.
+This field might not make much sense on non-Unix systems. On Unix, it is the
+same value as the st_uid field of the stat structure returned by the \fIstat\fR\|(2)
+operating system call.
+.IP "gid \- char[6]" 4
+.IX Item "gid - char[6]"
+This field provides the group id of the file encoded as a decimal \s-1ASCII\s0 string.
+This field might not make much sense on non-Unix systems. On Unix, it is the
+same value as the st_gid field of the stat structure returned by the \fIstat\fR\|(2)
+operating system call.
+.IP "mode \- char[8]" 4
+.IX Item "mode - char[8]"
+This field provides the access mode of the file encoded as an octal \s-1ASCII\s0
+string. This field might not make much sense on non-Unix systems. On Unix, it
+is the same value as the st_mode field of the stat structure returned by the
+\&\fIstat\fR\|(2) operating system call.
+.IP "size \- char[10]" 4
+.IX Item "size - char[10]"
+This field provides the size of the file, in bytes, encoded as a decimal \s-1ASCII\s0
+string. If the size field is negative (starts with a minus sign, 0x02D), then
+the archive member is stored in compressed form. The first byte of the archive
+member's data indicates the compression type used. A value of 0 (0x30) indicates
+that no compression was used. A value of 2 (0x32) indicates that bzip2
+compression was used.
+.IP "fmag \- char[2]" 4
+.IX Item "fmag - char[2]"
+This field is the archive file member magic number. Its content is always the
+two characters back tick (0x60) and newline (0x0A). This provides some measure
+utility in identifying archive files that have been corrupted.
+.PP
+The \s-1LLVM\s0 symbol table has the special name \*(L"#_LLVM_SYM_TAB_#\*(R". It is presumed
+that no regular archive member file will want this name. The \s-1LLVM\s0 symbol table
+is simply composed of a sequence of triplets: byte offset, length of symbol,
+and the symbol itself. Symbols are not null or newline terminated. Here are
+the details on each of these items:
+.IP "offset \- vbr encoded 32\-bit integer" 4
+.IX Item "offset - vbr encoded 32-bit integer"
+The offset item provides the offset into the archive file where the bytecode
+member is stored that is associated with the symbol. The offset value is 0
+based at the start of the first \*(L"normal\*(R" file member. To derive the actual
+file offset of the member, you must add the number of bytes occupied by the file
+signature (8 bytes) and the symbol tables. The value of this item is encoded
+using variable bit rate encoding to reduce the size of the symbol table.
+Variable bit rate encoding uses the high bit (0x80) of each byte to indicate
+if there are more bytes to follow. The remaining 7 bits in each byte carry bits
+from the value. The final byte does not have the high bit set.
+.IP "length \- vbr encoded 32\-bit integer" 4
+.IX Item "length - vbr encoded 32-bit integer"
+The length item provides the length of the symbol that follows. Like this
+\&\fIoffset\fR item, the length is variable bit rate encoded.
+.IP "symbol \- character array" 4
+.IX Item "symbol - character array"
+The symbol item provides the text of the symbol that is associated with the
+\&\fIoffset\fR. The symbol is not terminated by any character. Its length is provided
+by the \fIlength\fR field. Note that is allowed (but unwise) to use non-printing
+characters (even 0x00) in the symbol. This allows for multiple encodings of
+symbol names.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-ar\fR succeeds, it will exit with 0. A usage error, results
+in an exit code of 1. A hard (file system typically) error results in an
+exit code of 2. Miscellaneous or unknown errors result in an
+exit code of 3.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-ranlib, \fIar\fR\|(1)
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-as.1 b/docs/CommandGuide/man/man1/llvm-as.1
new file mode 100644
index 000000000000..fe17759761ff
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-as.1
@@ -0,0 +1,182 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-AS 1"
+.TH LLVM-AS 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-as \- LLVM assembler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-as\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvm-as\fR is the \s-1LLVM\s0 assembler. It reads a file containing human-readable
+\&\s-1LLVM\s0 assembly language, translates it to \s-1LLVM\s0 bytecode, and writes the result
+into a file or to standard output.
+.PP
+If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-as\fR reads its input from
+standard input.
+.PP
+If an output file is not specified with the \fB\-o\fR option, then
+\&\fBllvm-as\fR sends its output to a file or standard output by following
+these rules:
+.IP "\(bu" 4
+If the input is standard input, then the output is standard output.
+.IP "\(bu" 4
+If the input is a file that ends with \f(CW\*(C`.ll\*(C'\fR, then the output file is of
+the same name, except that the suffix is changed to \f(CW\*(C`.bc\*(C'\fR.
+.IP "\(bu" 4
+If the input is a file that does not end with the \f(CW\*(C`.ll\*(C'\fR suffix, then the
+output file has the same name as the input file, except that the \f(CW\*(C`.bc\*(C'\fR
+suffix is appended.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBllvm-as\fR will refuse to overwrite an
+output file that already exists. With this option, \fBllvm-as\fR
+will overwrite the output file and replace it with new bytecode.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-as\fR
+sends its output to standard output.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-as\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-dis, gccas
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-bcanalyzer.1 b/docs/CommandGuide/man/man1/llvm-bcanalyzer.1
new file mode 100644
index 000000000000..eeb6270fd39b
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-bcanalyzer.1
@@ -0,0 +1,370 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-BCANALYZER 1"
+.TH LLVM-BCANALYZER 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-bcanalyzer \- LLVM bytecode analyzer
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-bcanalyzer\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-bcanalyzer\fR command is a small utility for analyzing bytecode files.
+The tool reads a bytecode file (such as generated with the \fBllvm-as\fR tool) and
+produces a statistical report on the contents of the byteocde file. The tool
+can also dump a low level but human readable version of the bytecode file.
+This tool is probably not of much interest or utility except for those working
+directly with the bytecode file format. Most \s-1LLVM\s0 users can just ignore
+this tool.
+.PP
+If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-bcanalyzer\fR reads its input
+from standard input. This is useful for combining the tool into a pipeline.
+Output is written to the standard output.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-nodetails\fR" 4
+.IX Item "-nodetails"
+Causes \fBllvm-bcanalyzer\fR to abbreviate its output by writing out only a module
+level summary. The details for individual functions are not displayed.
+.IP "\fB\-dump\fR" 4
+.IX Item "-dump"
+Causes \fBllvm-bcanalyzer\fR to dump the bytecode in a human readable format. This
+format is significantly different from \s-1LLVM\s0 assembly and provides details about
+the encoding of the bytecode file.
+.IP "\fB\-verify\fR" 4
+.IX Item "-verify"
+Causes \fBllvm-bcanalyzer\fR to verify the module produced by reading the
+bytecode. This ensures that the statistics generated are based on a consistent
+module.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-bcanalyzer\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value, usually 1.
+.SH "SUMMARY OUTPUT DEFINITIONS"
+.IX Header "SUMMARY OUTPUT DEFINITIONS"
+The following items are always printed by llvm\-bcanalyzer. They comprize the
+summary output.
+.IP "\fBBytecode Analysis Of Module\fR" 4
+.IX Item "Bytecode Analysis Of Module"
+This just provides the name of the module for which bytecode analysis is being
+generated.
+.IP "\fBBytecode Version Number\fR" 4
+.IX Item "Bytecode Version Number"
+The bytecode version (not \s-1LLVM\s0 version) of the file read by the analyzer.
+.IP "\fBFile Size\fR" 4
+.IX Item "File Size"
+The size, in bytes, of the entire bytecode file.
+.IP "\fBModule Bytes\fR" 4
+.IX Item "Module Bytes"
+The size, in bytes, of the module block. Percentage is relative to File Size.
+.IP "\fBFunction Bytes\fR" 4
+.IX Item "Function Bytes"
+The size, in bytes, of all the function blocks. Percentage is relative to File
+Size.
+.IP "\fBGlobal Types Bytes\fR" 4
+.IX Item "Global Types Bytes"
+The size, in bytes, of the Global Types Pool. Percentage is relative to File
+Size. This is the size of the definitions of all types in the bytecode file.
+.IP "\fBConstant Pool Bytes\fR" 4
+.IX Item "Constant Pool Bytes"
+The size, in bytes, of the Constant Pool Blocks Percentage is relative to File
+Size.
+.IP "\fBModule Globals Bytes\fR" 4
+.IX Item "Module Globals Bytes"
+Ths size, in bytes, of the Global Variable Definitions and their initializers.
+Percentage is relative to File Size.
+.IP "\fBInstruction List Bytes\fR" 4
+.IX Item "Instruction List Bytes"
+The size, in bytes, of all the instruction lists in all the functions.
+Percentage is relative to File Size. Note that this value is also included in
+the Function Bytes.
+.IP "\fBCompaction Table Bytes\fR" 4
+.IX Item "Compaction Table Bytes"
+The size, in bytes, of all the compaction tables in all the functions.
+Percentage is relative to File Size. Note that this value is also included in
+the Function Bytes.
+.IP "\fBSymbol Table Bytes\fR" 4
+.IX Item "Symbol Table Bytes"
+The size, in bytes, of all the symbol tables in all the functions. Percentage is
+relative to File Size. Note that this value is also included in the Function
+Bytes.
+.IP "\fBDependent Libraries Bytes\fR" 4
+.IX Item "Dependent Libraries Bytes"
+The size, in bytes, of the list of dependent libraries in the module. Percentage
+is relative to File Size. Note that this value is also included in the Module
+Global Bytes.
+.IP "\fBNumber Of Bytecode Blocks\fR" 4
+.IX Item "Number Of Bytecode Blocks"
+The total number of blocks of any kind in the bytecode file.
+.IP "\fBNumber Of Functions\fR" 4
+.IX Item "Number Of Functions"
+The total number of function definitions in the bytecode file.
+.IP "\fBNumber Of Types\fR" 4
+.IX Item "Number Of Types"
+The total number of types defined in the Global Types Pool.
+.IP "\fBNumber Of Constants\fR" 4
+.IX Item "Number Of Constants"
+The total number of constants (of any type) defined in the Constant Pool.
+.IP "\fBNumber Of Basic Blocks\fR" 4
+.IX Item "Number Of Basic Blocks"
+The total number of basic blocks defined in all functions in the bytecode file.
+.IP "\fBNumber Of Instructions\fR" 4
+.IX Item "Number Of Instructions"
+The total number of instructions defined in all functions in the bytecode file.
+.IP "\fBNumber Of Long Instructions\fR" 4
+.IX Item "Number Of Long Instructions"
+The total number of long instructions defined in all functions in the bytecode
+file. Long instructions are those taking greater than 4 bytes. Typically long
+instructions are GetElementPtr with several indices, \s-1PHI\s0 nodes, and calls to
+functions with large numbers of arguments.
+.IP "\fBNumber Of Operands\fR" 4
+.IX Item "Number Of Operands"
+The total number of operands used in all instructions in the bytecode file.
+.IP "\fBNumber Of Compaction Tables\fR" 4
+.IX Item "Number Of Compaction Tables"
+The total number of compaction tables in all functions in the bytecode file.
+.IP "\fBNumber Of Symbol Tables\fR" 4
+.IX Item "Number Of Symbol Tables"
+The total number of symbol tables in all functions in the bytecode file.
+.IP "\fBNumber Of Dependent Libs\fR" 4
+.IX Item "Number Of Dependent Libs"
+The total number of dependent libraries found in the bytecode file.
+.IP "\fBTotal Instruction Size\fR" 4
+.IX Item "Total Instruction Size"
+The total size of the instructions in all functions in the bytecode file.
+.IP "\fBAverage Instruction Size\fR" 4
+.IX Item "Average Instruction Size"
+The average number of bytes per instruction across all functions in the bytecode
+file. This value is computed by dividing Total Instruction Size by Number Of
+Instructions.
+.IP "\fBMaximum Type Slot Number\fR" 4
+.IX Item "Maximum Type Slot Number"
+The maximum value used for a type's slot number. Larger slot number values take
+more bytes to encode.
+.IP "\fBMaximum Value Slot Number\fR" 4
+.IX Item "Maximum Value Slot Number"
+The maximum value used for a value's slot number. Larger slot number values take
+more bytes to encode.
+.IP "\fBBytes Per Value\fR" 4
+.IX Item "Bytes Per Value"
+The average size of a Value definition (of any type). This is computed by
+dividing File Size by the total number of values of any type.
+.IP "\fBBytes Per Global\fR" 4
+.IX Item "Bytes Per Global"
+The average size of a global definition (constants and global variables).
+.IP "\fBBytes Per Function\fR" 4
+.IX Item "Bytes Per Function"
+The average number of bytes per function definition. This is computed by
+dividing Function Bytes by Number Of Functions.
+.IP "\fB# of \s-1VBR\s0 32\-bit Integers\fR" 4
+.IX Item "# of VBR 32-bit Integers"
+The total number of 32\-bit integers encoded using the Variable Bit Rate
+encoding scheme.
+.IP "\fB# of \s-1VBR\s0 64\-bit Integers\fR" 4
+.IX Item "# of VBR 64-bit Integers"
+The total number of 64\-bit integers encoded using the Variable Bit Rate encoding
+scheme.
+.IP "\fB# of \s-1VBR\s0 Compressed Bytes\fR" 4
+.IX Item "# of VBR Compressed Bytes"
+The total number of bytes consumed by the 32\-bit and 64\-bit integers that use
+the Variable Bit Rate encoding scheme.
+.IP "\fB# of \s-1VBR\s0 Expanded Bytes\fR" 4
+.IX Item "# of VBR Expanded Bytes"
+The total number of bytes that would have been consumed by the 32\-bit and 64\-bit
+integers had they not been compressed with the Variable Bit Rage encoding
+scheme.
+.IP "\fBBytes Saved With \s-1VBR\s0\fR" 4
+.IX Item "Bytes Saved With VBR"
+The total number of bytes saved by using the Variable Bit Rate encoding scheme.
+The percentage is relative to # of \s-1VBR\s0 Expanded Bytes.
+.SH "DETAILED OUTPUT DEFINITIONS"
+.IX Header "DETAILED OUTPUT DEFINITIONS"
+The following definitions occur only if the \-nodetails option was not given.
+The detailed output provides additional information on a per-function basis.
+.IP "\fBType\fR" 4
+.IX Item "Type"
+The type signature of the function.
+.IP "\fBByte Size\fR" 4
+.IX Item "Byte Size"
+The total number of bytes in the function's block.
+.IP "\fBBasic Blocks\fR" 4
+.IX Item "Basic Blocks"
+The number of basic blocks defined by the function.
+.IP "\fBInstructions\fR" 4
+.IX Item "Instructions"
+The number of instructions defined by the function.
+.IP "\fBLong Instructions\fR" 4
+.IX Item "Long Instructions"
+The number of instructions using the long instruction format in the function.
+.IP "\fBOperands\fR" 4
+.IX Item "Operands"
+The number of operands used by all instructions in the function.
+.IP "\fBInstruction Size\fR" 4
+.IX Item "Instruction Size"
+The number of bytes consumed by instructions in the function.
+.IP "\fBAverage Instruction Size\fR" 4
+.IX Item "Average Instruction Size"
+The average number of bytes consumed by the instructions in the funtion. This
+value is computed by dividing Instruction Size by Instructions.
+.IP "\fBBytes Per Instruction\fR" 4
+.IX Item "Bytes Per Instruction"
+The average number of bytes used by the function per instruction. This value is
+computed by dividing Byte Size by Instructions. Note that this is not the same
+as Average Instruction Size. It computes a number relative to the total function
+size not just the size of the instruction list.
+.IP "\fBNumber of \s-1VBR\s0 32\-bit Integers\fR" 4
+.IX Item "Number of VBR 32-bit Integers"
+The total number of 32\-bit integers found in this function (for any use).
+.IP "\fBNumber of \s-1VBR\s0 64\-bit Integers\fR" 4
+.IX Item "Number of VBR 64-bit Integers"
+The total number of 64\-bit integers found in this function (for any use).
+.IP "\fBNumber of \s-1VBR\s0 Compressed Bytes\fR" 4
+.IX Item "Number of VBR Compressed Bytes"
+The total number of bytes in this function consumed by the 32\-bit and 64\-bit
+integers that use the Variable Bit Rate encoding scheme.
+.IP "\fBNumber of \s-1VBR\s0 Expanded Bytes\fR" 4
+.IX Item "Number of VBR Expanded Bytes"
+The total number of bytes in this function that would have been consumed by
+the 32\-bit and 64\-bit integers had they not been compressed with the Variable
+Bit Rate encoding scheme.
+.IP "\fBBytes Saved With \s-1VBR\s0\fR" 4
+.IX Item "Bytes Saved With VBR"
+The total number of bytes saved in this function by using the Variable Bit
+Rate encoding scheme. The percentage is relative to # of \s-1VBR\s0 Expanded Bytes.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-dis, <http://llvm.org/docs/BytecodeFormat.html>
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-config.1 b/docs/CommandGuide/man/man1/llvm-config.1
new file mode 100644
index 000000000000..5246ecaccb46
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-config.1
@@ -0,0 +1,227 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-CONFIG 1"
+.TH LLVM-CONFIG 1 "2006-08-01" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-config \- Print LLVM compilation options
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-config\fR \fIoption\fR [\fIcomponents\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvm-config\fR makes it easier to build applications that use \s-1LLVM\s0. It can
+print the compiler flags, linker flags and object libraries needed to link
+against \s-1LLVM\s0.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+To link against the \s-1JIT:\s0
+.PP
+.Vb 3
+\& g++ `llvm-config --cxxflags` -o HowToUseJIT.o -c HowToUseJIT.cpp
+\& g++ `llvm-config --ldflags` -o HowToUseJIT HowToUseJIT.o \e
+\& `llvm-config --libs engine bcreader scalaropts`
+.Ve
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Print the version number of \s-1LLVM\s0.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of \fBllvm-config\fR arguments.
+.IP "\fB\-\-prefix\fR" 4
+.IX Item "--prefix"
+Print the installation prefix for \s-1LLVM\s0.
+.IP "\fB\-\-src\-root\fR" 4
+.IX Item "--src-root"
+Print the source root from which \s-1LLVM\s0 was built.
+.IP "\fB\-\-obj\-root\fR" 4
+.IX Item "--obj-root"
+Print the object root used to build \s-1LLVM\s0.
+.IP "\fB\-\-bindir\fR" 4
+.IX Item "--bindir"
+Print the installation directory for \s-1LLVM\s0 binaries.
+.IP "\fB\-\-includedir\fR" 4
+.IX Item "--includedir"
+Print the installation directory for \s-1LLVM\s0 headers.
+.IP "\fB\-\-libdir\fR" 4
+.IX Item "--libdir"
+Print the installation directory for \s-1LLVM\s0 libraries.
+.IP "\fB\-\-cxxflags\fR" 4
+.IX Item "--cxxflags"
+Print the \*(C+ compiler flags needed to use \s-1LLVM\s0 headers.
+.IP "\fB\-\-ldflags\fR" 4
+.IX Item "--ldflags"
+Print the flags needed to link against \s-1LLVM\s0 libraries.
+.IP "\fB\-\-libs\fR" 4
+.IX Item "--libs"
+Print all the libraries needed to link against the specified \s-1LLVM\s0
+\&\fIcomponents\fR, including any dependencies.
+.IP "\fB\-\-libnames\fR" 4
+.IX Item "--libnames"
+Similar to \fB\-\-libs\fR, but prints the bare filenames of the libraries
+without \fB\-l\fR or pathnames. Useful for linking against a not-yet-installed
+copy of \s-1LLVM\s0.
+.IP "\fB\-\-libfiles\fR" 4
+.IX Item "--libfiles"
+Similar to \fB\-\-libs\fR, but print the full path to each library file. This is
+useful when creating makefile dependencies, to ensure that a tool is relinked if
+any library it uses changes.
+.IP "\fB\-\-components\fR" 4
+.IX Item "--components"
+Print all valid component names.
+.IP "\fB\-\-targets\-built\fR" 4
+.IX Item "--targets-built"
+Print the component names for all targets supported by this copy of \s-1LLVM\s0.
+.IP "\fB\-\-build\-mode\fR" 4
+.IX Item "--build-mode"
+Print the build mode used when \s-1LLVM\s0 was built (e.g. Debug or Release)
+.SH "COMPONENTS"
+.IX Header "COMPONENTS"
+To print a list of all available components, run \fBllvm-config
+\&\-\-components\fR. In most cases, components correspond directly to \s-1LLVM\s0
+libraries. Useful \*(L"virtual\*(R" components include:
+.IP "\fBall\fR" 4
+.IX Item "all"
+Includes all \s-1LLVM\s0 libaries. The default if no components are specified.
+.IP "\fBbackend\fR" 4
+.IX Item "backend"
+Includes either a native backend or the C backend.
+.IP "\fBengine\fR" 4
+.IX Item "engine"
+Includes either a native \s-1JIT\s0 or the bytecode interpreter.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-config\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-db.1 b/docs/CommandGuide/man/man1/llvm-db.1
new file mode 100644
index 000000000000..d27844360ed0
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-db.1
@@ -0,0 +1,141 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-DB 1"
+.TH LLVM-DB 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-db \- LLVM debugger (alpha)
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+Details coming soon. Please see
+<http://llvm.org/docs/SourceLevelDebugging.html> in the meantime.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-dis.1 b/docs/CommandGuide/man/man1/llvm-dis.1
new file mode 100644
index 000000000000..2633ad5d715b
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-dis.1
@@ -0,0 +1,175 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-DIS 1"
+.TH LLVM-DIS 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-dis \- LLVM disassembler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-dis\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-dis\fR command is the \s-1LLVM\s0 disassembler. It takes an \s-1LLVM\s0
+bytecode file and converts it into human-readable \s-1LLVM\s0 assembly language.
+.PP
+If filename is omitted or specified as \f(CW\*(C`\-\*(C'\fR, \fBllvm-dis\fR reads its
+input from standard input.
+.PP
+If the input is being read from standard input, then \fBllvm-dis\fR
+will send its output to standard output by default. Otherwise, the
+output will be written to a file named after the input file, with
+a \f(CW\*(C`.ll\*(C'\fR suffix added (any existing \f(CW\*(C`.bc\*(C'\fR suffix will first be
+removed). You can override the choice of output file using the
+\&\fB\-o\fR option.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBllvm-dis\fR will refuse to overwrite
+an output file that already exists. With this option, \fBllvm-dis\fR
+will overwrite the output file.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \-, then the output is sent
+to standard output.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-dis\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-as
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-extract.1 b/docs/CommandGuide/man/man1/llvm-extract.1
new file mode 100644
index 000000000000..fdbef37a3a0b
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-extract.1
@@ -0,0 +1,177 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-EXTRACT 1"
+.TH LLVM-EXTRACT 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-extract \- extract a function from an LLVM module
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-extract\fR [\fIoptions\fR] \fB\-\-func\fR \fIfunction-name\fR [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-extract\fR command takes the name of a function and extracts it from
+the specified \s-1LLVM\s0 bytecode file. It is primarily used as a debugging tool to
+reduce test cases from larger programs that are triggering a bug.
+.PP
+In addition to extracting the bytecode of the specified function,
+\&\fBllvm-extract\fR will also remove unreachable global variables, prototypes, and
+unused types.
+.PP
+The \fBllvm-extract\fR command reads its input from standard input if filename is
+omitted or if filename is \-. The output is always written to standard output,
+unless the \fB\-o\fR option is specified (see below).
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBllvm-extract\fR will refuse to overwrite an
+output file that already exists. With this option, \fBllvm-extract\fR
+will overwrite the output file and replace it with new bytecode.
+.IP "\fB\-\-func\fR \fIfunction-name\fR" 4
+.IX Item "--func function-name"
+Extract the function named \fIfunction-name\fR from the \s-1LLVM\s0 bytecode.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output filename. If filename is \*(L"\-\*(R" (the default), then
+\&\fBllvm-extract\fR sends its output to standard output.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-extract\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+bugpoint
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-ld.1 b/docs/CommandGuide/man/man1/llvm-ld.1
new file mode 100644
index 000000000000..cd079b5994d6
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-ld.1
@@ -0,0 +1,348 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-LD 1"
+.TH LLVM-LD 1 "2007-05-06" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-ld \- LLVM linker
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-ld\fR <options> <files>
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-ld\fR tool takes a set of \s-1LLVM\s0 bytecode files and links them
+together into a single \s-1LLVM\s0 bytecode file. The output bytecode file can be
+another bytecode file or an executable bytecode program. Using additional
+options, \fBllvm-ld\fR is able to produce native code executables.
+.PP
+The \fBllvm-ld\fR tool is the main linker for \s-1LLVM\s0. It is used to link together
+the output of \s-1LLVM\s0 front-end compilers and run \*(L"link time\*(R" optimizations (mostly
+the inter-procedural kind).
+.PP
+The \fBllvm-ld\fR tools attemps to mimic the interface provided by the default
+system linker so that it can act as a \fIdrop-in\fR replacement.
+.Sh "Search Order"
+.IX Subsection "Search Order"
+When looking for objects specified on the command line, \fBllvm-ld\fR will search
+for the object first in the current directory and then in the directory
+specified by the \fB\s-1LLVM_LIB_SEARCH_PATH\s0\fR environment variable. If it cannot
+find the object, it fails.
+.PP
+When looking for a library specified with the \fB\-l\fR option, \fBllvm-ld\fR first
+attempts to load a file with that name from the current directory. If that
+fails, it looks for lib\fIlibrary\fR.bc, lib\fIlibrary\fR.a, or lib\fIlibrary\fR.\fIshared
+library extension\fR, in that order, in each directory added to the library search
+path with the \fB\-L\fR option. These directories are searched in the order they
+are specified. If the library cannot be located, then \fBllvm-ld\fR looks in the
+directory specified by the \fB\s-1LLVM_LIB_SEARCH_PATH\s0\fR environment variable. If it
+does not find a library there, it fails.
+.PP
+The \fIshared library extension\fR may be \fI.so\fR, \fI.dyld\fR, \fI.dll\fR, or something
+different, depending upon the system.
+.PP
+The \fB\-L\fR option is global. It does not matter where it is specified in the
+list of command line arguments; the directory is simply added to the search path
+and is applied to all libraries, preceding or succeeding, in the command line.
+.Sh "Link order"
+.IX Subsection "Link order"
+All object and bytecode files are linked first in the order they were
+specified on the command line. All library files are linked next.
+Some libraries may not be linked into the object program; see below.
+.Sh "Library Linkage"
+.IX Subsection "Library Linkage"
+Object files and static bytecode objects are always linked into the output
+file. Library archives (.a files) load only the objects within the archive
+that define symbols needed by the output file. Hence, libraries should be
+listed after the object files and libraries which need them; otherwise, the
+library may not be linked in, and the dependent library will not have its
+undefined symbols defined.
+.Sh "Native code generation"
+.IX Subsection "Native code generation"
+The \fBllvm-ld\fR program has limited support for native code generation, when
+using the \fB\-native\fR or \fB\-native\-cbe\fR options. Native code generation is
+perfomed by converting the linked bytecode into native assembly (.s) or C code
+and running the system compiler (typically gcc) on the result.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.Sh "General Options"
+.IX Subsection "General Options"
+.IP "\fB\-help\fR" 4
+.IX Item "-help"
+Print a summary of command line options.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Specifies verbose mode. In this mode the linker will print additional
+information about the actions it takes, programs it executes, etc.
+.IP "\fB\-stats\fR" 4
+.IX Item "-stats"
+Print statistics.
+.IP "\fB\-time\-passes\fR" 4
+.IX Item "-time-passes"
+Record the amount of time needed for each pass and print it to standard
+error.
+.Sh "Input/Output Options"
+.IX Subsection "Input/Output Options"
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+This overrides the default output file and specifies the name of the file that
+should be generated by the linker. By default, \fBllvm-ld\fR generates a file named
+\&\fIa.out\fR for compatibility with \fBld\fR. The output will be written to
+\&\fIfilename\fR.
+.IP "\fB\-l\fR\fIname\fR" 4
+.IX Item "-lname"
+This option specifies the \fIname\fR of a library to search when resolving symbols
+for the program. Only the base name should be specified as \fIname\fR, without a
+\&\fIlib\fR prefix or any suffix.
+.IP "\fB\-L\fR\fIPath\fR" 4
+.IX Item "-LPath"
+This option tells \fBllvm-ld\fR to look in \fIPath\fR to find any library subsequently
+specified with the \fB\-l\fR option. The paths will be searched in the order in
+which they are specified on the command line. If the library is still not found,
+a small set of system specific directories will also be searched. Note that
+libraries specified with the \fB\-l\fR option that occur \fIbefore\fR any \fB\-L\fR options
+will not search the paths given by the \fB\-L\fR options following it.
+.IP "\fB\-link\-as\-library\fR" 4
+.IX Item "-link-as-library"
+Link the bytecode files together as a library, not an executable. In this mode,
+undefined symbols will be permitted.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+An alias for \-link\-as\-library.
+.ie n .IP "\fB\-march=\fR""target""" 4
+.el .IP "\fB\-march=\fR\f(CWtarget\fR" 4
+.IX Item "-march=target"
+Specifies the kind of machine for which code or assembly should be generated.
+.IP "\fB\-native\fR" 4
+.IX Item "-native"
+Generate a native machine code executable.
+.Sp
+When generating native executables, \fBllvm-ld\fR first checks for a bytecode
+version of the library and links it in, if necessary. If the library is
+missing, \fBllvm-ld\fR skips it. Then, \fBllvm-ld\fR links in the same
+libraries as native code.
+.Sp
+In this way, \fBllvm-ld\fR should be able to link in optimized bytecode
+subsets of common libraries and then link in any part of the library that
+hasn't been converted to bytecode.
+.IP "\fB\-native\-cbe\fR" 4
+.IX Item "-native-cbe"
+Generate a native machine code executable with the \s-1LLVM\s0 C backend.
+.Sp
+This option is identical to the \fB\-native\fR option, but uses the
+C backend to generate code for the program instead of an \s-1LLVM\s0 native
+code generator.
+.Sh "Optimization Options"
+.IX Subsection "Optimization Options"
+.IP "\fB\-O0\fR" 4
+.IX Item "-O0"
+An alias for the \-O1 option.
+.IP "\fB\-O1\fR" 4
+.IX Item "-O1"
+Optimize for linking speed, not execution speed. The optimizer will attempt to
+reduce the size of the linked program to reduce I/O but will not otherwise
+perform any link-time optimizations.
+.IP "\fB\-O2\fR" 4
+.IX Item "-O2"
+Perform only the minimal or required set of scalar optimizations.
+.IP "\fB\-03\fR" 4
+.IX Item "-03"
+An alias for the \-O2 option.
+.IP "\fB\-04\fR" 4
+.IX Item "-04"
+Perform the standard link time inter-procedural optimizations. This will
+attempt to optimize the program taking the entire program into consideration.
+.IP "\fB\-O5\fR" 4
+.IX Item "-O5"
+Perform aggressive link time optimizations. This is the same as \-O4 but works
+more aggressively to optimize the program.
+.IP "\fB\-disable\-inlining\fR" 4
+.IX Item "-disable-inlining"
+Do not run the inlining pass. Functions will not be inlined into other
+functions.
+.IP "\fB\-disable\-opt\fR" 4
+.IX Item "-disable-opt"
+Completely disable optimization. The various \fB\-On\fR options will be ignored and
+no link time optimization passes will be run.
+.IP "\fB\-disable\-internalize\fR" 4
+.IX Item "-disable-internalize"
+Do not mark all symbols as internal.
+.IP "\fB\-verify\-each\fR" 4
+.IX Item "-verify-each"
+Run the verification pass after each of the passes to verify intermediate
+results.
+.IP "\fB\-strip\-all\fR" 4
+.IX Item "-strip-all"
+Strip all debug and symbol information from the executable to make it smaller.
+.IP "\fB\-strip\-debug\fR" 4
+.IX Item "-strip-debug"
+Strip all debug information from the executable to make it smaller.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+An alias for \fB\-strip\-all\fR.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+An alias for \fB\-strip\-debug\fR.
+.IP "\fB\-export\-dynamic\fR" 4
+.IX Item "-export-dynamic"
+An alias for \fB\-disable\-internalize\fR
+.IP "\fB\-load\fR \fImodule\fR" 4
+.IX Item "-load module"
+Load an optimization module, \fImodule\fR, which is expected to be a dynamic
+library that provides the function name \f(CW\*(C`RunOptimizations\*(C'\fR. This function will
+be passed the PassManager, and the optimization level (values 0\-5 based on the
+\&\fB\-On\fR option). This function may add passes to the PassManager that should be
+run. This feature allows the optimization passes of \fBllvm-ld\fR to be extended.
+.IP "\fB\-post\-link\-opt\fR\fIPath\fR" 4
+.IX Item "-post-link-optPath"
+Run post-link optimization program. After linking is completed a bytecode file
+will be generated. It will be passed to the program specified by \fIPath\fR as the
+first argument. The second argument to the program will be the name of a
+temporary file into which the program should place its optimized output. For
+example, the \*(L"no\-op optimization\*(R" would be a simple shell script:
+.Sp
+.Vb 2
+\& #!/bin/bash
+\& cp $1 $2
+.Ve
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-ld\fR succeeds, it will exit with 0 return code. If an error occurs,
+it will exit with a non-zero return code.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The \f(CW\*(C`LLVM_LIB_SEARCH_PATH\*(C'\fR environment variable is used to find bytecode
+libraries. Any paths specified in this variable will be searched after the \f(CW\*(C`\-L\*(C'\fR
+options.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-link
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-link.1 b/docs/CommandGuide/man/man1/llvm-link.1
new file mode 100644
index 000000000000..1702dbe392eb
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-link.1
@@ -0,0 +1,186 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-LINK 1"
+.TH LLVM-LINK 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-link \- LLVM linker
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-link\fR [\fIoptions\fR] \fIfilename ...\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvm-link\fR takes several \s-1LLVM\s0 bytecode files and links them together into a
+single \s-1LLVM\s0 bytecode file. It writes the output file to standard output, unless
+the \fB\-o\fR option is used to specify a filename.
+.PP
+\&\fBllvm-link\fR attempts to load the input files from the current directory. If
+that fails, it looks for each file in each of the directories specified by the
+\&\fB\-L\fR options on the command line. The library search paths are global; each
+one is searched for every input file if necessary. The directories are searched
+in the order they were specified on the command line.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-L\fR \fIdirectory\fR" 4
+.IX Item "-L directory"
+Add the specified \fIdirectory\fR to the library search path. When looking for
+libraries, \fBllvm-link\fR will look in pathname for libraries. This option can be
+specified multiple times; \fBllvm-link\fR will search inside these directories in
+the order in which they were specified on the command line.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Overwrite output files. By default, \fBllvm-link\fR will not overwrite an output
+file if it alreadys exists.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-link\fR will
+write its output to standard output.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+If specified, \fBllvm-link\fR prints a human-readable version of the output
+bytecode file to standard error.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Verbose mode. Print information about what \fBllvm-link\fR is doing. This
+typically includes a message for each bytecode file linked in and for each
+library found.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-link\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+gccld
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-nm.1 b/docs/CommandGuide/man/man1/llvm-nm.1
new file mode 100644
index 000000000000..386d9e6e3c52
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-nm.1
@@ -0,0 +1,219 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-NM 1"
+.TH LLVM-NM 1 "2006-11-20" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-nm \- list LLVM bytecode file's symbol table
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-nm\fR [\fIoptions\fR] [\fIfilenames...\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-nm\fR utility lists the names of symbols from the \s-1LLVM\s0 bytecode files,
+or \fBar\fR archives containing \s-1LLVM\s0 bytecode files, named on the command line.
+Each symbol is listed along with some simple information about its provenance.
+If no filename is specified, or \fI\-\fR is used as a filename, \fBllvm-nm\fR will
+process a bytecode file on its standard input stream.
+.PP
+\&\fBllvm-nm\fR's default output format is the traditional \s-1BSD\s0 \fBnm\fR output format.
+Each such output record consists of an (optional) 8\-digit hexadecimal address,
+followed by a type code character, followed by a name, for each symbol. One
+record is printed per line; fields are separated by spaces. When the address is
+omitted, it is replaced by 8 spaces.
+.PP
+Type code characters currently supported, and their meanings, are as follows:
+.IP "U" 4
+.IX Item "U"
+Named object is referenced but undefined in this bytecode file
+.IP "C" 4
+.IX Item "C"
+Common (multiple defs link together into one def)
+.IP "W" 4
+.IX Item "W"
+Weak reference (multiple defs link together into zero or one defs)
+.IP "t" 4
+.IX Item "t"
+Local function (text) object
+.IP "T" 4
+.IX Item "T"
+Global function (text) object
+.IP "d" 4
+.IX Item "d"
+Local data object
+.IP "D" 4
+.IX Item "D"
+Global data object
+.IP "?" 4
+Something unrecognizable
+.PP
+Because \s-1LLVM\s0 bytecode files typically contain objects that are not considered to
+have addresses until they are linked into an executable image or dynamically
+compiled \*(L"just\-in\-time\*(R", \fBllvm-nm\fR does not print an address for any symbol,
+even symbols which are defined in the bytecode file.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-P\fR" 4
+.IX Item "-P"
+Use \s-1POSIX\s0.2 output format. Alias for \fB\-\-format=posix\fR.
+.IP "\fB\-B\fR (default)" 4
+.IX Item "-B (default)"
+Use \s-1BSD\s0 output format. Alias for \fB\-\-format=bsd\fR.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command-line options and their meanings.
+.IP "\fB\-\-defined\-only\fR" 4
+.IX Item "--defined-only"
+Print only symbols defined in this bytecode file (as opposed to
+symbols which may be referenced by objects in this file, but not
+defined in this file.)
+.IP "\fB\-\-extern\-only\fR, \fB\-g\fR" 4
+.IX Item "--extern-only, -g"
+Print only symbols whose definitions are external; that is, accessible
+from other bytecode files.
+.IP "\fB\-\-undefined\-only\fR, \fB\-u\fR" 4
+.IX Item "--undefined-only, -u"
+Print only symbols referenced but not defined in this bytecode file.
+.IP "\fB\-\-format=\fR\fIfmt\fR, \fB\-f\fR" 4
+.IX Item "--format=fmt, -f"
+Select an output format; \fIfmt\fR may be \fIsysv\fR, \fIposix\fR, or \fIbsd\fR. The
+default is \fIbsd\fR.
+.SH "BUGS"
+.IX Header "BUGS"
+\&\fBllvm-nm\fR cannot demangle \*(C+ mangled names, like \s-1GNU\s0 \fBnm\fR can.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+\&\fBllvm-nm\fR exits with an exit code of zero.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-dis, \fIar\fR\|(1), \fInm\fR\|(1)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-prof.1 b/docs/CommandGuide/man/man1/llvm-prof.1
new file mode 100644
index 000000000000..d7d765163a5e
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-prof.1
@@ -0,0 +1,173 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-PROF 1"
+.TH LLVM-PROF 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-prof \- print execution profile of LLVM program
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-prof\fR [\fIoptions\fR] [\fIbytecode file\fR] [\fIllvmprof.out\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-prof\fR tool reads in an \fIllvmprof.out\fR file (which can
+optionally use a specific file with the third program argument), a bytecode file
+for the program, and produces a human readable report, suitable for determining
+where the program hotspots are.
+.PP
+This program is often used in conjunction with the \fIutils/profile.pl\fR
+script. This script automatically instruments a program, runs it with the \s-1JIT\s0,
+then runs \fBllvm-prof\fR to format a report. To get more information about
+\&\fIutils/profile.pl\fR, execute it with the \fB\-\-help\fR option.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-annotated\-llvm\fR or \fB\-A\fR" 4
+.IX Item "--annotated-llvm or -A"
+In addition to the normal report printed, print out the code for the
+program, annotated with execution frequency information. This can be
+particularly useful when trying to visualize how frequently basic blocks
+are executed. This is most useful with basic block profiling
+information or better.
+.IP "\fB\-\-print\-all\-code\fR" 4
+.IX Item "--print-all-code"
+Using this option enables the \fB\-\-annotated\-llvm\fR option, but it
+prints the entire module, instead of just the most commonly executed
+functions.
+.IP "\fB\-\-time\-passes\fR" 4
+.IX Item "--time-passes"
+Record the amount of time needed for each pass and print it to standard
+error.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+\&\fBllvm-prof\fR returns 1 if it cannot load the bytecode file or the profile
+information. Otherwise, it exits with zero.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+\&\fBllvm-prof\fR is maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-ranlib.1 b/docs/CommandGuide/man/man1/llvm-ranlib.1
new file mode 100644
index 000000000000..daccd0e0efca
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-ranlib.1
@@ -0,0 +1,167 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-RANLIB 1"
+.TH LLVM-RANLIB 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-ranlib \- Generate index for LLVM archive
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-ranlib\fR [\-\-version] [\-\-help] <archive\-file>
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-ranlib\fR command is similar to the common Unix utility, \f(CW\*(C`ranlib\*(C'\fR. It
+adds or updates the symbol table in an \s-1LLVM\s0 archive file. Note that using the
+\&\fBllvm-ar\fR modifier \fIs\fR is usually more efficient than running \fBllvm-ranlib\fR
+which is only provided only for completness and compatibility. Unlike other
+implementations of \f(CW\*(C`ranlib\*(C'\fR, \fBllvm-ranlib\fR indexes \s-1LLVM\s0 bytecode files, not
+native object modules. You can list the contents of the symbol table with the
+\&\f(CW\*(C`llvm\-nm \-s\*(C'\fR command.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fIarchive-file\fR" 4
+.IX Item "archive-file"
+Specifies the archive-file to which the symbol table is added or updated.
+.IP "\fI\-\-version\fR" 4
+.IX Item "--version"
+Print the version of \fBllvm-ranlib\fR and exit without building a symbol table.
+.IP "\fI\-\-help\fR" 4
+.IX Item "--help"
+Print usage help for \fBllvm-ranlib\fR and exit without building a symbol table.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-ranlib\fR succeeds, it will exit with 0. If an error occurs, a non-zero
+exit code will be returned.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-ar, \fIranlib\fR\|(1)
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm-upgrade.1 b/docs/CommandGuide/man/man1/llvm-upgrade.1
new file mode 100644
index 000000000000..26860c14fb5e
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm-upgrade.1
@@ -0,0 +1,179 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM-UPGRADE 1"
+.TH LLVM-UPGRADE 1 "2006-12-02" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-upgrade \- LLVM assembly upgrader
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-upgrade\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvm-upgrade\fR is the \s-1LLVM\s0 assembly upgrader. It reads a file containing
+human-readable \s-1LLVM\s0 assembly language, and upgrades that assembly to the current
+version of \s-1LLVM\s0. If the input is in the form currently accepted by \s-1LLVM\s0, then
+no upgrades are performed.
+.PP
+The expected usage of this tool is as a filter, like this:
+.Sp
+.RS 4
+\&\fBllvm\-1.9/bin/llvm\-dis < 1.9.bc | llvm-upgrade | llvm\-2.0/bin/llvm\-as \-o 2.0.bc\fR
+.RE
+.PP
+If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-upgrade\fR reads its input from
+standard input.
+.PP
+If an output file is not specified with the \fB\-o\fR option, then
+\&\fBllvm-upgrade\fR sends its output to standard output.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBllvm-upgrade\fR will refuse to overwrite an
+output file that already exists. With this option, \fBllvm-upgrade\fR
+will overwrite the output file.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-upgrade\fR
+sends its output to standard output.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-upgrade\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-as, llvm-dis
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvm2cpp.1 b/docs/CommandGuide/man/man1/llvm2cpp.1
new file mode 100644
index 000000000000..1c8a6381bbf3
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvm2cpp.1
@@ -0,0 +1,301 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVM2CPP 1"
+.TH LLVM2CPP 1 "2006-08-10" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm2xpp \- LLVM bytecode to LLVM C++ IR translator
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm2cpp\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvm2cpp\fR translates from \s-1LLVM\s0 bytecode (.bc files) to a
+corresponding \*(C+ source file that will make calls against the \s-1LLVM\s0 \*(C+ \s-1API\s0 to
+build the same module as the input. By default, the \*(C+ output is a complete
+program that builds the module, verifies it and then emits the module as
+\&\s-1LLVM\s0 assembly. This technique assists with testing because the input to
+\&\fBllvm2cpp\fR and the output of the generated \*(C+ program should be identical.
+.PP
+If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBllvm2cpp\fR reads its input from
+standard input.
+.PP
+If an output file is not specified with the \fB\-o\fR option, then
+\&\fBllvm2cpp\fR sends its output to a file or standard output by following
+these rules:
+.IP "\(bu" 4
+If the input is standard input, then the output is standard output.
+.IP "\(bu" 4
+If the input is a file that ends with \f(CW\*(C`.bc\*(C'\fR, then the output file is of
+the same name, except that the suffix is changed to \f(CW\*(C`.cpp\*(C'\fR.
+.IP "\(bu" 4
+If the input is a file that does not end with the \f(CW\*(C`.bc\*(C'\fR suffix, then the
+output file has the same name as the input file, except that the \f(CW\*(C`.cpp\*(C'\fR
+suffix is appended.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBllvm2cpp\fR will refuse to overwrite an
+output file that already exists. With this option, \fBllvm2cpp\fR
+will overwrite the output file and replace it with new \*(C+ source code.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Normally, \fBllvm2cpp\fR will not overwrite an existing output file. With this
+option, that default behavior is changed and the program will overwrite existing
+output files.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm2cpp\fR
+sends its output to standard output.
+.IP "\fB\-funcname\fR \fIfunctionName\fR" 4
+.IX Item "-funcname functionName"
+Specify the name of the function to be generated. The generated code contains a
+single function that produces the input module. By default its name is
+\&\fImakeLLVMModule\fR. The \fB\-funcname\fR option overrides this default and allows
+you to control the name of the generated function. This is handy in conjunction
+with the \fB\-fragment\fR option when you only want \fBllvm2cpp\fR to generate a
+single function that produces the module. With both options, such generated code
+could be \fI#included\fR into another program.
+.IP "\fB\-for\fR" 4
+.IX Item "-for"
+Specify the name of the thing for which \*(C+ code should be generated. By default
+the entire input module is re\-generated. However, use of the various \fB\-gen\-*\fR
+options can restrict what is produced. This option indicates what that
+restriction is.
+.IP "\fB\-gen\-program\fR" 4
+.IX Item "-gen-program"
+Specify that the output should be a complete program. Such program will recreate
+\&\fBllvm2cpp\fR's input as an \s-1LLVM\s0 module, verify that module, and then write out
+the module in \s-1LLVM\s0 assembly format. This is useful for doing identity tests
+where the output of the generated program is identical to the input to
+\&\fBllvm2cpp\fR. The \s-1LLVM\s0 DejaGnu test suite can make use of this fact. This is the
+default form of generated output.
+.Sp
+If the \fB\-for\fR option is given with this option, it specifies the module
+identifier to use for the module created.
+.IP "\fB\-gen\-module\fR" 4
+.IX Item "-gen-module"
+Specify that the output should be a function that regenerates the module. It is
+assumed that this output will be #included into another program that has already
+arranged for the correct header files to be #included. The function generated
+takes no arguments and returns a \fIModule*\fR.
+.Sp
+If the \fB\-for\fR option is given with this option, it specifies the module
+identifier to use in creating the module returned by the generated function.
+.IP "\fB\-gen\-contents\fR" 4
+.IX Item "-gen-contents"
+Specify that the output should be a function that adds the contents of the input
+module to another module. It is assumed that the output will be #included into
+another program that has already arranged for the correct header files to be
+#included. The function generated takes a single argument of type \fIModule*\fR and
+returns that argument. Note that Module level attributes such as endianess,
+pointer size, target triple and inline asm are not passed on from the input
+module to the destination module. Only the sub-elements of the module (types,
+constants, functions, global variables) will be added to the input module.
+.Sp
+If the \fB\-for\fR option is given with this option, it specifies the module
+identifier to set in the input module by the generated function.
+.IP "\fB\-gen\-function\fR" 4
+.IX Item "-gen-function"
+Specify that the output should be a function that produces the definitions
+necessary for a specific function to be added to a module. It is assumed that
+the output will be #included into another program that has already arranged
+for the correct header files to be #included. The function generated takes a
+single argument of type \fIModule*\fR and returns the \fIFunction*\fR that it added to
+the module. Note that only those things (types, constants, etc.) directly
+needed in the definition of the function will be placed in the generated
+function.
+.Sp
+The \fB\-for\fR option must be given with this option or an error will be produced.
+The value of the option must be the name of a function in the input module for
+which code should be generated. If the named function does not exist an error
+will be produced.
+.IP "\fB\-gen\-inline\fR" 4
+.IX Item "-gen-inline"
+This option is very analagous to \fB\-gen\-function\fR except that the generated
+function will not re-produce the target function's definition. Instead, the body
+of the target function is inserted into some other function passed as an
+argument to the generated function. Similarly any arguments to the function must
+be passed to the generated function. The result of the generated function is the
+first basic block of the target function.
+.Sp
+The \fB\-for\fR option works the same way as it does for \fB\-gen\-function\fR.
+.IP "\fB\-gen\-variable\fR" 4
+.IX Item "-gen-variable"
+Specify that the output should be a function that produces the definitions
+necessary for a specific global variable to be added to a module. It is assumed
+that the output will be #included into another program that has already arranged
+for the correct header files to be #included. The function generated takes a
+single argument of type \fIModule*\fR and returns the \fIGlobalVariable*\fR that it
+added to the module. Note that only those things (types, constants, etc.)
+directly needed in the definition of the global variable will be placed in the
+generated function.
+.Sp
+The \fB\-for\fR option must be given with this option or an error will be produced.
+THe value of the option must be the name of a global variable in the input
+module for which code should be generated. If the named global variable does not
+exist an error will be produced.
+.IP "\fB\-gen\-type\fR" 4
+.IX Item "-gen-type"
+Specify that the output should be a function that produces the definitions
+necessary for specific type to be added to a module. It is assumed that the
+otuput will be #included into another program that has already arranged for the
+correct header files to be #included. The function generated take a single
+argument of type \fIModule*\fR and returns the \fIType*\fR that it added to the
+module. Note that the generated function will only add the necessary type
+definitions to (possibly recursively) define the requested type.
+.Sp
+The \fB\-for\fR option must be given with this option or an error will be produced.
+The value of the option must be the name of a global type in the input module
+for which code should be generated. If the named type does not exist an error
+will be produced.
+.IP "\fB\-stats\fR" 4
+.IX Item "-stats"
+Show pass statistics (not interesting in this program).
+.IP "\fB\-time\-passes\fR" 4
+.IX Item "-time-passes"
+Show pass timing statistics (not interesting in this program).
+.IP "\fB\-version\fR" 4
+.IX Item "-version"
+Show the version number of this program.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm2cpp\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-as tblgen
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Written by Reid Spencer (<http://hlvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvmc.1 b/docs/CommandGuide/man/man1/llvmc.1
new file mode 100644
index 000000000000..9506c5e495c2
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvmc.1
@@ -0,0 +1,455 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVMC 1"
+.TH LLVMC 1 "2007-02-11" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvmc \- The LLVM Compiler Driver (experimental)
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvmc\fR [\fIoptions\fR] [\fIfilenames\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBllvmc\fR is a configurable driver for invoking other \s-1LLVM\s0 (and non\-LLVM) tools
+in order to compile, optimize and link software for multiple languages. For
+those familiar with \s-1FSF\s0's \fBgcc\fR tool, it is very similar. Please note that
+\&\fBllvmc\fR is considered an experimental tool. \fBllvmc\fR has the following goals:
+.IP "* provide a single point of access to the \s-1LLVM\s0 tool set," 4
+.IX Item "provide a single point of access to the LLVM tool set,"
+.PD 0
+.IP "* hide the complexities of the \s-1LLVM\s0 tools through a single interface," 4
+.IX Item "hide the complexities of the LLVM tools through a single interface,"
+.IP "* make integration of existing non-LLVM tools simple," 4
+.IX Item "make integration of existing non-LLVM tools simple,"
+.IP "* extend the capabilities of minimal front ends, and" 4
+.IX Item "extend the capabilities of minimal front ends, and"
+.IP "* make the interface for compiling consistent for all languages." 4
+.IX Item "make the interface for compiling consistent for all languages."
+.PD
+.PP
+The tool itself does nothing with a user's program. It merely invokes other
+tools to get the compilation tasks done.
+.PP
+The options supported by \fBllvmc\fR generalize the compilation process and
+provide a consistent and simple interface for multiple programming languages.
+This makes it easier for developers to get their software compiled with \s-1LLVM\s0.
+Without \fBllvmc\fR, developers would need to understand how to invoke the
+front-end compiler, optimizer, assembler, and linker in order to compile their
+programs. \fBllvmc\fR's sole mission is to trivialize that process.
+.Sh "Basic Operation"
+.IX Subsection "Basic Operation"
+\&\fBllvmc\fR always takes the following basic actions:
+.IP "* Command line options and filenames are collected." 4
+.IX Item "Command line options and filenames are collected."
+The command line options provide the marching orders to \fBllvmc\fR on what actions
+it should perform. This is the \fIrequest\fR the user is making of \fBllvmc\fR and it
+is interpreted first.
+.IP "* Configuration files are read." 4
+.IX Item "Configuration files are read."
+Based on the options and the suffixes of the filenames presented, a set of
+configuration files are read to configure the actions \fBllvmc\fR will take.
+Configuration files are provided by either \s-1LLVM\s0 or the front end compiler tools
+that \fBllvmc\fR invokes. Users generally don't need to be concerned with the
+contents of the configuration files.
+.IP "* Determine actions to take." 4
+.IX Item "Determine actions to take."
+The tool chain needed to complete the task is determined. This is the primary
+work of \fBllvmc\fR. It breaks the request specified by the command line options
+into a set of basic actions to be done:
+.RS 4
+.IP "* Pre\-processing: gathering/filtering compiler input (optional)." 4
+.IX Item "Pre-processing: gathering/filtering compiler input (optional)."
+.PD 0
+.IP "* Translation: source language to bytecode conversion." 4
+.IX Item "Translation: source language to bytecode conversion."
+.IP "* Assembly: bytecode to native code conversion." 4
+.IX Item "Assembly: bytecode to native code conversion."
+.IP "* Optimization: conversion of bytecode to something that runs faster." 4
+.IX Item "Optimization: conversion of bytecode to something that runs faster."
+.IP "* Linking: combining multiple bytecodes to produce executable program." 4
+.IX Item "Linking: combining multiple bytecodes to produce executable program."
+.RE
+.RS 4
+.RE
+.IP "* Execute actions." 4
+.IX Item "Execute actions."
+.PD
+The actions determined previously are executed sequentially and then
+\&\fBllvmc\fR terminates.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.Sh "Control Options"
+.IX Subsection "Control Options"
+Control options tell \fBllvmc\fR what to do at a high level. The
+following control options are defined:
+.IP "\fB\-c\fR or \fB\-\-compile\fR" 4
+.IX Item "-c or --compile"
+This option specifies that the linking phase is not to be run. All
+previous phases, if applicable will run. This is generally how a given
+bytecode file is compiled and optimized for a source language module.
+.IP "\fB\-k\fR or \fB\-\-link\fR or default" 4
+.IX Item "-k or --link or default"
+This option (or the lack of any control option) specifies that all stages
+of compilation, optimization, and linking should be attempted. Source files
+specified on the command line will be compiled and linked with objects and
+libraries also specified.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+This option specifies that compilation should end in the creation of
+an \s-1LLVM\s0 assembly file that can be later converted to an \s-1LLVM\s0 object
+file.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+This option specifies that no compilation or linking should be
+performed. Only pre\-processing, if applicable to the language being
+compiled, is performed. For languages that support it, this will
+result in the output containing the raw input to the compiler.
+.Sh "Optimization Options"
+.IX Subsection "Optimization Options"
+Optimization with \fBllvmc\fR is based on goals and specified with
+the following \-O options. The specific details of which
+optimizations run is controlled by the configuration files because
+each source language will have different needs.
+.IP "\fB\-O1\fR or \fB\-O0\fR (default, fast compilation)" 4
+.IX Item "-O1 or -O0 (default, fast compilation)"
+Only those optimizations that will hasten the compilation (mostly by reducing
+the output) are applied. In general these are extremely fast and simple
+optimizations that reduce emitted code size. The goal here is not to make the
+resulting program fast but to make the compilation fast. If not specified,
+this is the default level of optimization.
+.IP "\fB\-O2\fR (basic optimization)" 4
+.IX Item "-O2 (basic optimization)"
+This level of optimization specifies a balance between generating good code
+that will execute reasonably quickly and not spending too much time optimizing
+the code to get there. For example, this level of optimization may include
+things like global common subexpression elimination, aggressive dead code
+elimination, and scalar replication.
+.IP "\fB\-O3\fR (aggressive optimization)" 4
+.IX Item "-O3 (aggressive optimization)"
+This level of optimization aggressively optimizes each set of files compiled
+together. However, no link-time inter-procedural optimization is performed.
+This level implies all the optimizations of the \fB\-O1\fR and \fB\-O2\fR optimization
+levels, and should also provide loop optimizations and compile time
+inter-procedural optimizations. Essentially, this level tries to do as much
+as it can with the input it is given but doesn't do any link time \s-1IPO\s0.
+.IP "\fB\-O4\fR (link time optimization)" 4
+.IX Item "-O4 (link time optimization)"
+In addition to the previous three levels of optimization, this level of
+optimization aggressively optimizes each program at link time. It employs
+basic analysis and basic link-time inter-procedural optimizations,
+considering the program as a whole.
+.IP "\fB\-O5\fR (aggressive link time optimization)" 4
+.IX Item "-O5 (aggressive link time optimization)"
+This is the same as \fB\-O4\fR except it employs aggressive analyses and
+aggressive inter-procedural optimization.
+.IP "\fB\-O6\fR (profile guided optimization: not implemented)" 4
+.IX Item "-O6 (profile guided optimization: not implemented)"
+This is the same as \fB\-O5\fR except that it employs profile-guided
+re-optimization of the program after it has executed. Note that this implies
+a single level of re-optimization based on runtime profile analysis. Once
+the re-optimization has completed, the profiling instrumentation is
+removed and final optimizations are employed.
+.IP "\fB\-O7\fR (lifelong optimization: not implemented)" 4
+.IX Item "-O7 (lifelong optimization: not implemented)"
+This is the same as \fB\-O5\fR and similar to \fB\-O6\fR except that re-optimization
+is performed through the life of the program. That is, each run will update
+the profile by which future re-optimizations are directed.
+.Sh "Input Options"
+.IX Subsection "Input Options"
+.IP "\fB\-l\fR \fI\s-1LIBRARY\s0\fR" 4
+.IX Item "-l LIBRARY"
+This option instructs \fBllvmc\fR to locate a library named \fI\s-1LIBRARY\s0\fR and search
+it for unresolved symbols when linking the program.
+.IP "\fB\-L\fR \fIpath\fR" 4
+.IX Item "-L path"
+This option instructs \fBllvmc\fR to add \fIpath\fR to the list of places in which
+the linker will
+.IP "\fB\-x\fR \fI\s-1LANGUAGE\s0\fR" 4
+.IX Item "-x LANGUAGE"
+This option instructs \fBllvmc\fR to regard the following input files as
+containing programs in the language \fI\s-1LANGUAGE\s0\fR. Normally, input file languages
+are identified by their suffix but this option will override that default
+behavior. The \fB\-x\fR option stays in effect until the end of the options or
+a new \fB\-x\fR option is encountered.
+.Sh "Output Options"
+.IX Subsection "Output Options"
+.IP "\fB\-m\fR\fIarch\fR" 4
+.IX Item "-march"
+This option selects the back end code generator to use. The \fIarch\fR portion
+of the option names the back end to use.
+.IP "\fB\-\-native\fR" 4
+.IX Item "--native"
+Normally, \fBllvmc\fR produces bytecode files at most stages of compilation.
+With this option, \fBllvmc\fR will arrange for native object files to be
+generated with the \fB\-c\fR option, native assembly files to be generated
+with the \fB\-S\fR option, and native executables to be generated with the
+\&\fB\-\-link\fR option. In the case of the \fB\-E\fR option, the output will not
+differ as there is no \fInative\fR version of pre-processed output.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. The contents of the file depend on other
+options.
+.Sh "Information Options"
+.IX Subsection "Information Options"
+.IP "\fB\-n\fR or \fB\-\-no\-op\fR" 4
+.IX Item "-n or --no-op"
+This option tells \fBllvmc\fR to do everything but actually execute the
+resulting tools. In combination with the \fB\-v\fR option, this causes \fBllvmc\fR
+to merely print out what it would have done.
+.IP "\fB\-v\fR or \fB\-\-verbose\fR" 4
+.IX Item "-v or --verbose"
+This option will cause \fBllvmc\fR to print out (on standard output) each of the
+actions it takes to accomplish the objective. The output will immediately
+precede the invocation of other tools.
+.IP "\fB\-\-stats\fR" 4
+.IX Item "--stats"
+Print all statistics gathered during the compilation to the standard error.
+Note that this option is merely passed through to the sub-tools to do with
+as they please.
+.IP "\fB\-\-time\-passes\fR" 4
+.IX Item "--time-passes"
+Record the amount of time needed for each optimization pass and print it
+to standard error. Like \fB\-\-stats\fR this option is just passed through to
+the sub-tools to do with as they please.
+.IP "\fB\-\-time\-programs\fR" 4
+.IX Item "--time-programs"
+Record the amount of time each program (compilation tool) takes and print
+it to the standard error.
+.Sh "Language Specific Options"
+.IX Subsection "Language Specific Options"
+.IP "\fB\-T,pre\fR=\fIoptions\fR" 4
+.IX Item "-T,pre=options"
+Pass an arbitrary option to the pre\-processor.
+.IP "\fB\-T,opt\fR=\fIoptions\fR" 4
+.IX Item "-T,opt=options"
+Pass an arbitrary option to the optimizer.
+.IP "\fB\-T,lnk\fR=\fIoptions\fR" 4
+.IX Item "-T,lnk=options"
+Pass an arbitrary option to the linker.
+.IP "\fB\-T,asm\fR=\fIoptions\fR" 4
+.IX Item "-T,asm=options"
+Pass an arbitrary option to the code generator.
+.Sh "C/\*(C+ Specific Options"
+.IX Subsection "C/ Specific Options"
+.IP "\fB\-I\fR\fIpath\fR" 4
+.IX Item "-Ipath"
+This option is just passed through to a C or \*(C+ front end compiler to tell it
+where include files can be found.
+.IP "\fB\-D\fR\fIsymbol\fR" 4
+.IX Item "-Dsymbol"
+This option is just passed through to a C or \*(C+ front end compiler to tell it
+to define a symbol.
+.Sh "Miscellaneous Options"
+.IX Subsection "Miscellaneous Options"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+This option will cause \fBllvmc\fR to print out its version number and terminate.
+.Sh "Advanced Options"
+.IX Subsection "Advanced Options"
+You better know what you're doing if you use these options. Improper use
+of these options can produce drastically wrong results.
+.IP "\fB\-\-config\-dir\fR \fIdirname\fR" 4
+.IX Item "--config-dir dirname"
+This option tells \fBllvmc\fR to read configuration data from the \fIdirectory\fR
+named \fIdirname\fR. Data from such directories will be read in the order
+specified on the command line after all other standard configuration files have
+been read. This allows users or groups of users to conveniently create
+their own configuration directories in addition to the standard ones to which
+they may not have write access.
+.Sh "Unimplemented Options"
+.IX Subsection "Unimplemented Options"
+The options below are not currently implemented in \fBllvmc\fR but will be
+eventually. They are documented here as \*(L"future design\*(R".
+.IP "\fB\-\-show\-config\fR \fI[suffixes...]\fR" 4
+.IX Item "--show-config [suffixes...]"
+When this option is given, the only action taken by \fBllvmc\fR is to show its
+final configuration state in the form of a configuration file. No compilation
+tasks will be conducted when this option is given; processing will stop once
+the configuration has been printed. The optional (comma separated) list of
+suffixes controls what is printed. Without any suffixes, the configuration
+for all languages is printed. With suffixes, only the languages pertaining
+to those file suffixes will be printed. The configuration information is
+printed after all command line options and configuration files have been
+read and processed. This allows the user to verify that the correct
+configuration data has been read by \fBllvmc\fR.
+.IP "\fB\-\-config\fR :\fIsection\fR:\fIname\fR=\fIvalue\fR" 4
+.IX Item "--config :section:name=value"
+This option instructs \fBllvmc\fR to accept \fIvalue\fR as the value for configuration
+item \fIname\fR in the section named \fIsection\fR. This is a quick way to override
+a configuration item on the command line without resorting to changing the
+configuration files.
+.IP "\fB\-\-config\-only\-from\fR \fIdirname\fR" 4
+.IX Item "--config-only-from dirname"
+This option tells \fBllvmc\fR to skip the normal processing of configuration
+files and only configure from the contents of the \fIdirname\fR directory. Multiple
+\&\fB\-\-config\-only\-from\fR options may be given in which case the directories are
+read in the order given on the command line.
+.IP "\fB\-\-emit\-raw\-code\fR" 4
+.IX Item "--emit-raw-code"
+No optimization is done whatsoever. The compilers invoked by \fBllvmc\fR with
+this option given will be instructed to produce raw, unoptimized code. This
+option is useful only to front end language developers and therefore does not
+participate in the list of \fB\-O\fR options. This is distinctly different from
+the \fB\-O0\fR option (a synonym for \fB\-O1\fR) because those optimizations will
+reduce code size to make compilation faster. With \fB\-\-emit\-raw\-code\fR, only
+the full raw code produced by the compiler will be generated.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvmc\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value and no compilation actions
+will be taken. If one of the compilation tools returns a non-zero
+status, pending actions will be discarded and \fBllvmc\fR will return the
+same result code as the failing compilation tool.
+.SH "DEFICIENCIES"
+.IX Header "DEFICIENCIES"
+\&\fBllvmc\fR is considered an experimental \s-1LLVM\s0 tool because it has these
+deficiencies:
+.IP "Insufficient support for native linking" 4
+.IX Item "Insufficient support for native linking"
+Because \fBllvm-ld\fR doesn't handle native linking, neither can \fBllvmc\fR
+.IP "Poor configuration support" 4
+.IX Item "Poor configuration support"
+The support for configuring new languages, etc. is weak. There are many
+command line configurations that cannot be achieved with the current
+support. Furthermore the grammar is cumbersome for configuration files.
+Please see <http://llvm.org/PR686> for further details.
+.IP "Does not handle target specific configurations" 4
+.IX Item "Does not handle target specific configurations"
+This is one of the major deficiencies, also addressed in
+<http://llvm.org/PR686>
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-as, llvm-dis, llc, llvm-link
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvmgcc.1 b/docs/CommandGuide/man/man1/llvmgcc.1
new file mode 100644
index 000000000000..45b23cb00ac8
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvmgcc.1
@@ -0,0 +1,194 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVMGCC 1"
+.TH LLVMGCC 1 "2007-02-11" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-gcc \- LLVM C front\-end
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm-gcc\fR [\fIoptions\fR] \fIfilename\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm-gcc\fR command is the \s-1LLVM\s0 C front end. It is a modified
+version of gcc that compiles C/ObjC programs into native objects, \s-1LLVM\s0
+bytecode or \s-1LLVM\s0 assembly language, depending upon the options.
+.PP
+By default, \fBllvm-gcc\fR compiles to native objects just like \s-1GCC\s0 does. If the
+\&\fB\-emit\-llvm\fR option is given then it will generate \s-1LLVM\s0 bytecode files instead.
+If \fB\-S\fR (assembly) is also given, then it will generate \s-1LLVM\s0 assembly.
+.PP
+Being derived from the \s-1GNU\s0 Compiler Collection, \fBllvm-gcc\fR has many
+of gcc's features and accepts most of gcc's options. It handles a
+number of gcc's extensions to the C programming language.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+Do not generate an \s-1LLVM\s0 bytecode file. Rather, compile the source
+file into an \s-1LLVM\s0 assembly language file.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+Do not generate a linked executable. Rather, compile the source
+file into an \s-1LLVM\s0 bytecode file. This bytecode file can then be
+linked with other bytecode files later on to generate a full \s-1LLVM\s0
+executable.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file to be \fIfilename\fR.
+.IP "\fB\-I\fR \fIdirectory\fR" 4
+.IX Item "-I directory"
+Add a directory to the header file search path. This option can be
+repeated.
+.IP "\fB\-L\fR \fIdirectory\fR" 4
+.IX Item "-L directory"
+Add \fIdirectory\fR to the library search path. This option can be
+repeated.
+.IP "\fB\-l\fR\fIname\fR" 4
+.IX Item "-lname"
+Link in the library lib\fIname\fR.[bc | a | so]. This library should
+be a bytecode library.
+.IP "\fB\-emit\-llvm\fR" 4
+.IX Item "-emit-llvm"
+Make the output be \s-1LLVM\s0 bytecode (or assembly) instead of native object (or
+assembly).
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm-gcc\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm\-g++
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/llvmgxx.1 b/docs/CommandGuide/man/man1/llvmgxx.1
new file mode 100644
index 000000000000..362ee49a73b6
--- /dev/null
+++ b/docs/CommandGuide/man/man1/llvmgxx.1
@@ -0,0 +1,194 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LLVMGXX 1"
+.TH LLVMGXX 1 "2007-02-11" "CVS" "LLVM Command Guide"
+.SH "NAME"
+llvm\-g++ \- LLVM C++ front\-end
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBllvm\-g++\fR [\fIoptions\fR] \fIfilename\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBllvm\-g++\fR command is the \s-1LLVM\s0 \*(C+ front end. It is a modified
+version of g++ that compiles \*(C+/ObjC++ programs into native code,
+\&\s-1LLVM\s0 bytecode or assembly language, depending upon the options.
+.PP
+By default, \fBllvm\-g++\fR compiles to native objects just like \s-1GCC\s0 does. If the
+\&\fB\-emit\-llvm\fR option is given then it will generate \s-1LLVM\s0 bytecode files instead.
+If \fB\-S\fR (assembly) is also given, then it will generate \s-1LLVM\s0 assembly.
+.PP
+Being derived from the \s-1GNU\s0 Compiler Collection, \fBllvm\-g++\fR has many
+of g++'s features and accepts most of g++'s options. It handles a
+number of g++'s extensions to the \*(C+ programming language.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+Do not generate an \s-1LLVM\s0 bytecode file. Rather, compile the source
+file into an \s-1LLVM\s0 assembly language file.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+Do not generate a linked executable. Rather, compile the source
+file into an \s-1LLVM\s0 bytecode file. This bytecode file can then be
+linked with other bytecode files later on to generate a full \s-1LLVM\s0
+executable.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file to be \fIfilename\fR.
+.IP "\fB\-I\fR \fIdirectory\fR" 4
+.IX Item "-I directory"
+Add a directory to the header file search path. This option can be
+repeated.
+.IP "\fB\-L\fR \fIdirectory\fR" 4
+.IX Item "-L directory"
+Add \fIdirectory\fR to the library search path. This option can be
+repeated.
+.IP "\fB\-l\fR\fIname\fR" 4
+.IX Item "-lname"
+Link in the library lib\fIname\fR.[bc | a | so]. This library should
+be a bytecode library.
+.IP "\fB\-emit\-llvm\fR" 4
+.IX Item "-emit-llvm"
+Make the output be \s-1LLVM\s0 bytecode (or assembly) instead of native object (or
+assembly).
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBllvm\-g++\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-gcc
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/opt.1 b/docs/CommandGuide/man/man1/opt.1
new file mode 100644
index 000000000000..f080e9f8b67f
--- /dev/null
+++ b/docs/CommandGuide/man/man1/opt.1
@@ -0,0 +1,246 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "OPT 1"
+.TH OPT 1 "2007-02-02" "CVS" "LLVM Command Guide"
+.SH "NAME"
+opt \- LLVM optimizer
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBopt\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBopt\fR command is the modular \s-1LLVM\s0 optimizer and analyzer. It takes \s-1LLVM\s0
+bytecode as input, runs the specified optimizations or analyses on it, and then
+outputs the optimized \s-1LLVM\s0 bytecode or the analysis results. The function of
+\&\fBopt\fR depends on whether the \fB\-analyze\fR option is given.
+.PP
+When \fB\-analyze\fR is specified, \fBopt\fR performs various analyses of \s-1LLVM\s0
+bytecode. It will usually print the results on standard output, but in a few
+cases, it will print output to standard error or generate a file with the
+analysis output, which is usually done when the output is meant for another
+program.
+.PP
+While \fB\-analyze\fR is \fInot\fR given, \fBopt\fR attempts to produce an optimized
+bytecode file. The optimizations available via \fBopt\fR depend upon what
+libraries were linked into it as well as any additional libraries that have
+been loaded with the \fB\-load\fR option. Use the \fB\-help\fR option to determine
+what optimizations you can use.
+.PP
+If \fIfilename\fR is omitted from the command line or is \fI\-\fR, \fBopt\fR reads its
+input from standard input. The input must be an \s-1LLVM\s0 bytecode file.
+.PP
+If an output filename is not specified with the \fB\-o\fR option, \fBopt\fR
+writes its output to the standard output.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force overwrite. Normally, \fBopt\fR will refuse to overwrite an
+output file that already exists. With this option, \fBopt\fR will
+overwrite the output file and replace it with new bytecode.
+.IP "\fB\-help\fR" 4
+.IX Item "-help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output filename.
+.IP "\fB\-{passname}\fR" 4
+.IX Item "-{passname}"
+\&\fBopt\fR provides the ability to run any of \s-1LLVM\s0's optimization or analysis passes
+in any order. The \fB\-help\fR option lists all the passes available. The order in
+which the options occur on the command line are the order in which they are
+executed (within pass constraints).
+.IP "\fB\-std\-compile\-opts\fR" 4
+.IX Item "-std-compile-opts"
+This is short hand for a standard list of \fIcompile time optimization\fR passes.
+This is typically used to optimize the output from the llvm-gcc front end. It
+might be useful for other front end compilers as well. To discover the full set
+of options available, use the following command:
+.Sp
+.Vb 1
+\& llvm-as < /dev/null | opt -std-compile-opts -disable-output -debug-pass=Arguments
+.Ve
+.IP "\fB\-disable\-inlining\fR" 4
+.IX Item "-disable-inlining"
+This option is only meaningful when \fB\-std\-compile\-opts\fR is given. It simply
+removes the inlining pass from the standard list.
+.IP "\fB\-disable\-opt\fR" 4
+.IX Item "-disable-opt"
+This option is only meaningful when \fB\-std\-compile\-opts\fR is given. It disables
+most, but not all, of the \fB\-std\-compile\-opts\fR. The ones that remain are
+\&\fB\-verify\fR, \fB\-lower\-setjmp\fR, and \fB\-funcresolve\fR.
+.IP "\fB\-strip\-debug\fR" 4
+.IX Item "-strip-debug"
+This option causes opt to strip debug information from the module before
+applying other optimizations. It is essentially the same as \fB\-strip\fR but it
+ensures that stripping of debug information is done first.
+.IP "\fB\-verify\-each\fR" 4
+.IX Item "-verify-each"
+This option causes opt to add a verify pass after every pass otherwise specified
+on the command line (including \fB\-verify\fR). This is useful for cases where it
+is suspected that a pass is creating an invalid module but it is not clear which
+pass is doing it. The combination of \fB\-std\-compile\-opts\fR and \fB\-verify\-each\fR
+can quickly track down this kind of problem.
+.IP "\fB\-profile\-info\-file\fR \fIfilename\fR" 4
+.IX Item "-profile-info-file filename"
+Specify the name of the file loaded by the \-profile\-loader option.
+.IP "\fB\-stats\fR" 4
+.IX Item "-stats"
+Print statistics.
+.IP "\fB\-time\-passes\fR" 4
+.IX Item "-time-passes"
+Record the amount of time needed for each pass and print it to standard
+error.
+.IP "\fB\-debug\fR" 4
+.IX Item "-debug"
+If this is a debug build, this option will enable debug printouts
+from passes which use the \fI\s-1\fIDEBUG\s0()\fI\fR macro. See the \fB\s-1LLVM\s0 Programmer's
+Manual\fR, section \fI#DEBUG\fR for more information.
+.IP "\fB\-load\fR=\fIplugin\fR" 4
+.IX Item "-load=plugin"
+Load the dynamic object \fIplugin\fR. This object should register new optimization
+or analysis passes. Once loaded, the object will add new command line options to
+enable various optimizations or analyses. To see the new complete list of
+optimizations, use the \fB\-help\fR and \fB\-load\fR options together. For example:
+.Sp
+.Vb 1
+\& opt -load=plugin.so -help
+.Ve
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+Print module after each transformation.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBopt\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/stkrc.1 b/docs/CommandGuide/man/man1/stkrc.1
new file mode 100644
index 000000000000..46c1584d6802
--- /dev/null
+++ b/docs/CommandGuide/man/man1/stkrc.1
@@ -0,0 +1,198 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "STKRC 1"
+.TH STKRC 1 "2006-03-13" "CVS" "LLVM Command Guide"
+.SH "NAME"
+stkrc \- Stacker Compiler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBstkrc\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \fBstkrc\fR command is the compiler for the Stacker language. Stacker is a
+simple stack based, Forth-like language that was written as a demonstration
+language for \s-1LLVM\s0. For details on the language, please see
+<http://llvm.org/docs/Stacker.html> . The \fBstkrc\fR compiler is fairly
+minimal. It compiles to bytecode only and doesn't perform any optimizations.
+The output of stkrc (a bytecode file) can be piped through other \s-1LLVM\s0 tools
+for optimization and linking.
+.PP
+If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBstkrc\fR reads its input
+from standard input. This is useful for combining the tool into a pipeline.
+.PP
+If an output file is not specified with the \fB\-o\fR option, then
+\&\fBllvm-as\fR sends its output to a file or standard output by following
+these rules:
+.IP "\(bu" 4
+If the input is standard input, then the output is standard output.
+.IP "\(bu" 4
+If the input is a file that ends with \f(CW\*(C`.st\*(C'\fR, then the output file is of
+the same name, except that the suffix is changed to \f(CW\*(C`.bc\*(C'\fR.
+.IP "\(bu" 4
+If the input is a file that does not end with the \f(CW\*(C`.st\*(C'\fR suffix, then the
+output file has the same name as the input file, except that the \f(CW\*(C`.bc\*(C'\fR
+suffix is appended.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm-as\fR
+sends its output to standard output.
+.IP "\fB\-stats\fR" 4
+.IX Item "-stats"
+Print statistics acquired during compilation.
+.IP "\fB\-time\-passes\fR" 4
+.IX Item "-time-passes"
+Record the amount of time needed for each pass and print it to standard
+error.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+Force the output to be written. Normally, \fBstkrc\fR won't overwrite an existing
+bytecode file. This option overrides that behavior.
+.IP "\fB\-s\fR \fIstacksize\fR" 4
+.IX Item "-s stacksize"
+Specify the stack size for the program. The default stack size, 1024, should be
+sufficient for most programs. For very large programs, especially those that
+recurse a lot, you might want to provide a larger value. Each unit of this
+value consumes 8 bytes of memory.
+.IP "\fB\-help\fR" 4
+.IX Item "-help"
+Print a summary of command line options.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBstkrc\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value, usually 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+llvm-as, <http://llvm.org/docs/Stacker.html>
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/CommandGuide/man/man1/tblgen.1 b/docs/CommandGuide/man/man1/tblgen.1
new file mode 100644
index 000000000000..021f79919af5
--- /dev/null
+++ b/docs/CommandGuide/man/man1/tblgen.1
@@ -0,0 +1,215 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "TBLGEN 1"
+.TH TBLGEN 1 "2006-06-02" "CVS" "LLVM Command Guide"
+.SH "NAME"
+tblgen \- Target Description To C++ Code Generator
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBtblgen\fR [\fIoptions\fR] [\fIfilename\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBtblgen\fR translates from target description (.td) files into \*(C+ code that can
+be included in the definition of an \s-1LLVM\s0 target library. Most users of \s-1LLVM\s0 will
+not need to use this program. It is only for assisting with writing an \s-1LLVM\s0
+target backend.
+.PP
+The input and output of \fBtblgen\fR is beyond the scope of this short
+introduction. Please see the \fICodeGeneration\fR page in the \s-1LLVM\s0 documentation.
+.PP
+The \fIfilename\fR argument specifies the name of a Target Description (.td) file
+to read as input.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of command line options.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+Specify the output file name. If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBtblgen\fR
+sends its output to standard output.
+.IP "\fB\-I\fR \fIdirectory\fR" 4
+.IX Item "-I directory"
+Specify where to find other target description files for inclusion. The
+\&\fIdirectory\fR value should be a full or partial path to a directory that contains
+target description files.
+.IP "\fB\-asmwriternum\fR \fIN\fR" 4
+.IX Item "-asmwriternum N"
+Make \-gen\-asm\-writer emit assembly writer number \fIN\fR.
+.IP "\fB\-class\fR \fIclass Name\fR" 4
+.IX Item "-class class Name"
+Print the enumeration list for this class.
+.IP "\fB\-print\-records\fR" 4
+.IX Item "-print-records"
+Print all records to standard output (default).
+.IP "\fB\-print\-enums\fR" 4
+.IX Item "-print-enums"
+Print enumeration values for a class
+.IP "\fB\-gen\-emitter\fR" 4
+.IX Item "-gen-emitter"
+Generate machine code emitter.
+.IP "\fB\-gen\-register\-enums\fR" 4
+.IX Item "-gen-register-enums"
+Generate the enumeration values for all registers.
+.IP "\fB\-gen\-register\-desc\fR" 4
+.IX Item "-gen-register-desc"
+Generate a register info description for each register.
+.IP "\fB\-gen\-register\-desc\-header\fR" 4
+.IX Item "-gen-register-desc-header"
+Generate a register info description header for each register.
+.IP "\fB\-gen\-instr\-enums\fR" 4
+.IX Item "-gen-instr-enums"
+Generate enumeration values for instructions.
+.IP "\fB\-gen\-instr\-desc\fR" 4
+.IX Item "-gen-instr-desc"
+Generate instruction descriptions.
+.IP "\fB\-gen\-asm\-writer\fR" 4
+.IX Item "-gen-asm-writer"
+Generate the assembly writer.
+.IP "\fB\-gen\-dag\-isel\fR" 4
+.IX Item "-gen-dag-isel"
+Generate a \s-1DAG\s0 (Directed Acycle Graph) instruction selector.
+.IP "\fB\-gen\-subtarget\fR" 4
+.IX Item "-gen-subtarget"
+Generate subtarget enumerations.
+.IP "\fB\-gen\-intrinsic\fR" 4
+.IX Item "-gen-intrinsic"
+Generate intrinsic information.
+.IP "\fB\-version\fR" 4
+.IX Item "-version"
+Show the version number of this program.
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+If \fBtblgen\fR succeeds, it will exit with 0. Otherwise, if an error
+occurs, it will exit with a non-zero value.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Maintained by The \s-1LLVM\s0 Team (<http://llvm.org>).
diff --git a/docs/GettingStarted.html b/docs/GettingStarted.html
index 0e871336deb8..b8f330df7042 100644
--- a/docs/GettingStarted.html
+++ b/docs/GettingStarted.html
@@ -499,8 +499,8 @@ href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
<p>LLVM is very demanding of the host C++ compiler, and as such tends to expose
bugs in the compiler. In particular, several versions of GCC crash when trying
to compile LLVM. We routinely use GCC 3.3.3, 3.4.0, and Apple 4.0.1
-successfully with them (however, see below). Other versions of GCC will
-probably work as well. GCC versions listed
+successfully with them (however, see important notes below). Other versions
+of GCC will probably work as well. GCC versions listed
here are known to not work. If you are using one of these versions, please try
to upgrade your GCC to something more recent. If you run into a problem with a
version of GCC not listed here, please <a href="mailto:llvmdev@cs.uiuc.edu">let
@@ -525,6 +525,13 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
possibly others) does not compile LLVM correctly (it appears that exception
handling is broken in some cases). Please download the FSF 3.3.3 or upgrade
to a newer version of GCC.</p>
+<p><b>GCC 3.4.0</b> on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
+ code generator, causing an infinite loop in the llvm-gcc build when built
+ with optimizations enabled (i.e. a release build).</p>
+<p><b>GCC 3.4.2</b> on linux/x86 (32-bit)</b>: GCC miscompiles portions of the
+ code generator at -O3, as with 3.4.0. However gcc 3.4.2 (unlike 3.4.0)
+ correctly compiles LLVM at -O2. A work around is to build release LLVM
+ builds with "make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ..."</p>
<p><b>GCC 3.4.x</b> on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
miscompiles portions of LLVM</a>.</p>
<p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 58e0e3c5f39f..40a344a68ae2 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -908,9 +908,6 @@ system. The current set of primitive types is as follows:</p>
<tbody>
<tr><th>Type</th><th>Description</th></tr>
<tr><td><tt><a name="t_void">void</a></tt></td><td>No value</td></tr>
- <tr><td><tt>i8</tt></td><td>8-bit value</td></tr>
- <tr><td><tt>i32</tt></td><td>32-bit value</td></tr>
- <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
<tr><td><tt>label</tt></td><td>Branch destination</td></tr>
</tbody>
</table>
@@ -919,9 +916,7 @@ system. The current set of primitive types is as follows:</p>
<table>
<tbody>
<tr><th>Type</th><th>Description</th></tr>
- <tr><td><tt>i1</tt></td><td>True or False value</td></tr>
- <tr><td><tt>i16</tt></td><td>16-bit value</td></tr>
- <tr><td><tt>i64</tt></td><td>64-bit value</td></tr>
+ <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
<tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
</tbody>
</table>
@@ -942,7 +937,7 @@ classifications:</p>
<tr><th>Classification</th><th>Types</th></tr>
<tr>
<td><a name="t_integer">integer</a></td>
- <td><tt>i1, i8, i16, i32, i64</tt></td>
+ <td><tt>i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... </tt></td>
</tr>
<tr>
<td><a name="t_floating">floating point</a></td>
@@ -950,7 +945,7 @@ classifications:</p>
</tr>
<tr>
<td><a name="t_firstclass">first class</a></td>
- <td><tt>i1, i8, i16, i32, i64, float, double, <br/>
+ <td><tt>i1, ..., float, double, <br/>
<a href="#t_pointer">pointer</a>,<a href="#t_vector">vector</a></tt>
</td>
</tr>
@@ -977,6 +972,51 @@ recursive: For example, it is possible to have a two dimensional array.</p>
</div>
<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="t_integer">Integer Type</a> </div>
+
+<div class="doc_text">
+
+<h5>Overview:</h5>
+<p>The integer type is a very simple derived type that simply specifies an
+arbitrary bit width for the integer type desired. Any bit width from 1 bit to
+2^23-1 (about 8 million) can be specified.</p>
+
+<h5>Syntax:</h5>
+
+<pre>
+ iN
+</pre>
+
+<p>The number of bits the integer will occupy is specified by the <tt>N</tt>
+value.</p>
+
+<h5>Examples:</h5>
+<table class="layout">
+ <tr class="layout">
+ <td class="left">
+ <tt>i1</tt><br/>
+ <tt>i4</tt><br/>
+ <tt>i8</tt><br/>
+ <tt>i16</tt><br/>
+ <tt>i32</tt><br/>
+ <tt>i42</tt><br/>
+ <tt>i64</tt><br/>
+ <tt>i1942652</tt><br/>
+ </td>
+ <td class="left">
+ A boolean integer of 1 bit<br/>
+ A nibble sized integer of 4 bits.<br/>
+ A byte sized integer of 8 bits.<br/>
+ A half word sized integer of 16 bits.<br/>
+ A word sized integer of 32 bits.<br/>
+ An integer whose bit width is the answer. <br/>
+ A double word sized integer of 64 bits.<br/>
+ A really big integer of over 1 million bits.<br/>
+ </td>
+ </tr>
+</table>
+
+<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>
<div class="doc_text">
diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html
index 279a17906ce6..c3449e51e96b 100644
--- a/docs/ReleaseNotes.html
+++ b/docs/ReleaseNotes.html
@@ -4,11 +4,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="llvm.css" type="text/css">
- <title>LLVM 1.9 Release Notes</title>
+ <title>LLVM 2.0 Release Notes</title>
</head>
<body>
-<div class="doc_title">LLVM 1.9 Release Notes</div>
+<div class="doc_title">LLVM 2.0 Release Notes</div>
<ol>
<li><a href="#intro">Introduction</a></li>
@@ -32,13 +32,10 @@
<div class="doc_text">
<p>This document contains the release notes for the LLVM compiler
-infrastructure, release 1.9. Here we describe the status of LLVM, including any
-known problems and major improvements from the previous release. The most
-up-to-date version of this document (corresponding to LLVM CVS) can be found
-on the <a
-href="http://llvm.org/releases/">LLVM releases web site</a>. If you are
-not reading this on the LLVM web pages, you should probably go there because
-this document may be updated after the release.</p>
+infrastructure, release 2.0. Here we describe the status of LLVM, including
+major improvements from the previous release and any known problems. All LLVM
+releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM
+releases web site</a>.</p>
<p>For more information about LLVM, including information about the latest
release, please check out the <a href="http://llvm.org/">main LLVM
@@ -61,67 +58,175 @@ href="http://llvm.org/releases/">releases page</a>.</p>
<div class="doc_text">
-<p>This is the tenth public release of the LLVM Compiler Infrastructure. This
-release incorporates a large number of enhancements, new features, and bug
-fixes. We recommend that all users of previous LLVM versions upgrade.
-</p>
+<p>This is the eleventh public release of the LLVM Compiler Infrastructure.
+Being the first major release since 1.0, this release is different in several
+ways from our previous releases:</p>
+
+<ol>
+<li>We took this as an opportunity to
+break backwards compatibility with the LLVM 1.x bytecode and .ll file format.
+If you have LLVM 1.9 .ll files that you would like to upgrade to LLVM 2.x, we
+recommend the use of the stand alone <a href="#llvm-upgrade">llvm-upgrade</a>
+tool (which is included with 2.0). We intend to keep compatibility with .ll
+and .bc formats within the 2.x release series, like we did within the 1.x
+series.</li>
+<li>There are several significant change to the LLVM IR and internal APIs, such
+ as a major overhaul of the type system, the completely new bitcode file
+ format, etc (described below).</li>
+<li>We designed the release around a 6 month release cycle instead of the usual
+ 3-month cycle. This gave us extra time to develop and test some of the
+ more invasive features in this release.</li>
+<li>LLVM 2.0 no longer supports the llvm-gcc3 front-end. Users are required to
+ upgrade to llvm-gcc4. llvm-gcc4 includes many features over
+ llvm-gcc3, is faster, and is <a href="CFEBuildInstrs.html">much easier to
+ build from source</a>.</li>
+</ol>
+
+<p>Note that while this is a major version bump, this release has been
+ extensively tested on a wide range of software. It is easy to say that this
+ is our best release yet, in terms of both features and correctness. This is
+ the first LLVM release to correctly compile and optimize major software like
+ LLVM itself, Mozilla/Seamonkey, Qt 4.3rc1, kOffice, etc out of the box on
+ linux/x86.
+ </p>
</div>
<!--=========================================================================-->
<div class="doc_subsection">
-<a name="newfeatures">New Features in LLVM 1.9</a>
+<a name="newfeatures">New Features in LLVM 2.0</a>
</div>
<!--_________________________________________________________________________-->
-<div class="doc_subsubsection"><a name="x86-64">New X86-64 Backend</a></div>
+<div class="doc_subsubsection"><a name="majorchanges">Major Changes</a></div>
<div class="doc_text">
-<p>LLVM 1.9 now fully supports the x86-64 instruction set on Mac OS/X, and
-supports it on Linux (and other operating systems) when compiling in -static
-mode. LLVM includes JIT support for X86-64, and supports both Intel EMT-64T
-and AMD-64 architectures. The X86-64 instruction set permits addressing a
-64-bit addressing space and provides the compiler with twice the
-number of integer registers to use.</p>
-</div>
-<!--_________________________________________________________________________-->
-<div class="doc_subsubsection"><a name="lto">Link-Time Optimization integration
-with native linkers</a></div>
-<div class="doc_text">
-<p>LLVM now includes <a href="LinkTimeOptimization.html">liblto</a> which can
-be used to integrate LLVM Link-Time Optimization support into a native linker.
-This allows LLVM .bc to transparently participate with linking an application,
-even when some .o files are in LLVM form and some are not.</p>
+<p>Changes to the LLVM IR itself:</p>
+
+<ul>
+
+<li>Integer types are now completely signless. This means that we
+ have types like i8/i16/i32 instead of ubyte/sbyte/short/ushort/int
+ etc. LLVM operations that depend on sign have been split up into
+ separate instructions (<a href="http://llvm.org/PR950">PR950</a>). This
+ eliminates cast instructions that just change the sign of the operands (e.g.
+ int -> uint), which reduces the size of the IR and makes optimizers
+ simpler to write.</li>
+
+<li>Integer types with arbitrary bitwidths (e.g. i13, i36, i42, i1057, etc) are
+ now supported in the LLVM IR and optimizations (<a
+ href="http://llvm.org/PR1043">PR1043</a>). However, neither llvm-gcc
+ (<a href="http://llvm.org/PR1284">PR1284</a>) nor the native code generators
+ (<a href="http://llvm.org/PR1270">PR1270</a>) support non-standard width
+ integers yet.</li>
+
+<li>'Type planes' have been removed (<a href="http://llvm.org/PR411">PR411</a>).
+ It is no longer possible to have two values with the same name in the
+ same symbol table. This simplifies LLVM internals, allowing significant
+ speedups.</li>
+
+<li>Global variables and functions in .ll files are now prefixed with
+ @ instead of % (<a href="http://llvm.org/PR645">PR645</a>).</li>
+
+<li>The LLVM 1.x "bytecode" format has been replaced with a
+ completely new binary representation, named 'bitcode'. The <a
+ href="BitCodeFormat.html">Bitcode Format</a> brings a
+ number of advantages to the LLVM over the old bytecode format: it is denser
+ (files are smaller), more extensible, requires less memory to read,
+ is easier to keep backwards compatible (so LLVM 2.5 will read 2.0 .bc
+ files), and has many other nice features.</li>
+
+<li>Load and store instructions now track the alignment of their pointer
+ (<a href="http://www.llvm.org/PR400">PR400</a>). This allows the IR to
+ express loads that are not sufficiently aligned (e.g. due to '<tt>#pragma
+ packed</tt>') or to capture extra alignment information.</li>
+</ul>
+
+<p>Major new features:</p>
+
+<ul>
+
+<li>A number of ELF features are now supported by LLVM, including 'visibility',
+ extern weak linkage, Thread Local Storage (TLS) with the <tt>__thread</tt>
+ keyword, and symbol aliases.
+ Among other things, this means that many of the special options needed to
+ configure llvm-gcc on linux are no longer needed, and special hacks to build
+ large C++ libraries like Qt are not needed.</li>
+
+<li>LLVM now has a new MSIL backend. <tt>llc -march=msil</tt> will now turn LLVM
+ into MSIL (".net") bytecode. This is still fairly early development
+ with a number of limitations.</li>
+
+<li>A new <a href="CommandGuide/html/llvm-upgrade.html">llvm-upgrade</a> tool
+ exists to migrates LLVM 1.9 .ll files to LLVM 2.0 syntax.</li>
+</ul>
+
</div>
+
<!--_________________________________________________________________________-->
-<div class="doc_subsubsection"><a name="dwarf">DWARF debugging
-support for Linux, Cygwin and MinGW on X86</a></div>
+<div class="doc_subsubsection"><a name="llvmgccfeatures">llvm-gcc
+Improvements</a></div>
<div class="doc_text">
-<p>llvm-gcc4 now supports generating debugging info for Linux, Cygwin and MinGW.
-This extends the PPC/Darwin and X86/Darwin debugging support available in the
-1.8 release. DWARF is a standard debugging format used on many platforms.</p>
+<p>New features include:
+</p>
+
+<ul>
+<li>Precompiled Headers (PCH) are now supported.</li>
+
+<li>"<tt>#pragma packed</tt>" is now supported, as are the various features
+ described above (visibility, extern weak linkage, __thread, aliases,
+ etc).</li>
+
+<li>Tracking function parameter/result attributes is now possible.</li>
+
+<li>Many internal enhancements have been added, such as improvements to
+ NON_LVALUE_EXPR, arrays with non-zero base, structs with variable sized
+ fields, VIEW_CONVERT_EXPR, CEIL_DIV_EXPR, nested functions, and many other
+ things. This is primarily to supports non-C GCC front-ends, like Ada.</li>
+
+<li>It is simpler to configure llvm-gcc for linux.</li>
+
+</ul>
+
</div>
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="optimizer">Optimizer
Improvements</a></div>
+
<div class="doc_text">
-<p>The mid-level optimizer is now faster and produces better code in many cases.
- Significant changes include:</p>
+<p>New features include:
+</p>
<ul>
-<li>LLVM includes a new 'predicate simplifier' pass, which
- currently performs dominator tree-based optimizations.</li>
-<li>The complete loop unroll pass now supports unrolling of
- multiple basic block loops.</li>
-<li>The 'globalopt' pass can now perform the scalar replacement of
- aggregates transformation on some heap allocations.</li>
-<li>The globalsmodref-aa alias analysis can now track 'indirect pointer
- globals' more accurately.</li>
-<li>The instruction combiner can now perform element propagation
-analysis of vector expressions, eliminating computation of vector elements
-that are not used.</li>
+<li>The <a href="WritingAnLLVMPass.html">pass manager</a> has been entirely
+ rewritten, making it significantly smaller, simpler, and more extensible.
+ Support has been added to run <tt>FunctionPass</tt>es interlaced with
+ <tt>CallGraphSCCPass</tt>es, we now support loop transformations
+ explicitly with <tt>LoopPass</tt>, and <tt>ModulePass</tt>es may now use the
+ result of <tt>FunctionPass</tt>es.</li>
+
+<li>LLVM 2.0 includes a new loop rotation pass, which converts "for loops" into
+ "do/while loops", where the condition is at the bottom of the loop.</li>
+
+<li>The Loop Strength Reduction pass has been improved, and we now support
+ sinking expressions across blocks to reduce register pressure.</li>
+
+<li>The <tt>-scalarrepl</tt> pass can now promote unions containing FP values
+ into a register, it can also handle unions of vectors of the same
+ size.</li>
+
+<li>The [Post]DominatorSet classes have been removed from LLVM and clients
+ switched to use the more-efficient ETForest class instead.</li>
+
+<li>The ImmediateDominator class has also been removed, and clients have been
+ switched to use DominatorTree instead.</li>
+
+<li>The predicate simplifier pass has been improved, making it able to do
+ simple value range propagation and eliminate more conditionals. However,
+ note that predsimplify is not enabled by default in llvm-gcc.</li>
+
</ul>
</div>
@@ -132,96 +237,233 @@ Generator Enhancements</a></div>
<div class="doc_text">
<p>
-The LLVM Target-Independent code generator now supports more target features and
-optimizes many cases more aggressively. New features include:
+New features include:
</p>
<ul>
-<li>LLVM now includes a late branch folding pass which optimizes code
- layout, performs several branch optzns, and deletes unreachable code.</li>
-<li>The code generator now support targets that have pre/post-increment
- addressing modes.</li>
-<li>LLVM now supports dynamically-loadable register allocators and
- schedulers.</li>
-<li>LLVM 1.9 includes several improvements to inline asm support,
- including support for new constraints and modifiers.</li>
-<li>The register coalescer is now more aggressive than before,
- allowing it to eliminate more copies.</li>
+
+<li>LLVM now supports software floating point, which allows LLVM to target
+ chips that don't have hardware FPUs (e.g. ARM thumb mode).</li>
+
+<li>A new register scavenger has been implemented, which is useful for
+ finding free registers after register allocation. This is useful when
+ rewriting frame references on RISC targets, for example.</li>
+
+<li>Heuristics have been added to avoid coalescing vregs with very large live
+ ranges to physregs. This was bad because it effectively pinned the physical
+ register for the entire lifetime of the virtual register (<a
+ href="http://llvm.org/PR711">PR711</a>).</li>
+
+<li>Support now exists for very simple (but still very useful)
+ rematerialization the register allocator, enough to move
+ instructions like "load immediate" and constant pool loads.</li>
+
+<li>Switch statement lowering is significantly better, improving codegen for
+ sparse switches that have dense subregions, and implemented support
+ for the shift/and trick.</li>
+
+<li>LLVM now supports tracking physreg sub-registers and super-registers
+ in the code generator, and includes extensive register
+ allocator changes to track them.</li>
+
+<li>There is initial support for virtreg sub-registers
+ (<a href="http://llvm.org/PR1350">PR1350</a>).</li>
+
+</ul>
+
+<p>
+Other improvements include:
+</p>
+
+<ul>
+
+<li>Inline assembly support is much more solid that before.
+ The two primary features still missing are support for 80-bit floating point
+ stack registers on X86 (<a href="http://llvm.org/PR879">PR879</a>), and
+ support for inline asm in the C backend (<a
+ href="http://llvm.org/PR802">PR802</a>).</li>
+
+<li>DWARF debug information generation has been improved. LLVM now passes
+ most of the GDB testsuite on MacOS and debug info is more dense.</li>
+
+<li>Codegen support for Zero-cost DWARF exception handling has been added (<a
+ href="http://llvm.org/PR592">PR592</a>). It is mostly
+ complete and just in need of continued bug fixes and optimizations at
+ this point. However, support in llvm-g++ is disabled with an
+ #ifdef for the 2.0 release (<a
+ href="http://llvm.org/PR870">PR870</a>).</li>
+
+<li>The code generator now has more accurate and general hooks for
+ describing addressing modes ("isLegalAddressingMode") to
+ optimizations like loop strength reduction and code sinking.</li>
+
+<li>Progress has been made on a direct Mach-o .o file writer. Many small
+ apps work, but it is still not quite complete.</li>
+
</ul>
<p>In addition, the LLVM target description format has itself been extended in
several ways:</p>
<ul>
-<li>tblgen now allows definition of '<a
- href="TableGenFundamentals.html#multiclass">multiclasses</a>' which can be
- used to factor instruction patterns more aggressively in .td files.</li>
-<li>LLVM has a new TargetAsmInfo class which captures a variety of
- information about the target assembly language format.</li>
-<li>.td files now support "<tt>${:foo}</tt>" syntax for encoding
- subtarget-specific assembler syntax into instruction descriptions.</li>
+<li>TargetData now supports better target parameterization in
+ the .ll/.bc files, eliminating the 'pointersize/endianness' attributes
+ in the files (<a href="http://llvm.org/PR761">PR761</a>).</li>
+
+<li>TargetData was generalized for finer grained alignment handling,
+ handling of vector alignment, and handling of preferred alignment</li>
+
+<li>LLVM now supports describing target calling conventions
+ explicitly in .td files, reducing the amount of C++ code that needs
+ to be written for a port.</li>
+
</ul>
-<p>Further, several significant target-specific enhancements are included in
-LLVM 1.9:</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection"><a name="specifictargets">Target-Specific
+Improvements</a></div>
+
+<div class="doc_text">
+
+<p>X86-specific Code Generator Enhancements:
+</p>
<ul>
-<li>The LLVM ARM backend now supports more instructions
- and the use of a frame pointer. It is now possible to build
- libgcc and a simple cross compiler, but it is not considered "complete" yet.
- </li>
-<li>LLVM supports the Win32 dllimport/dllexport linkage and
- stdcall/fastcall calling conventions.</li>
+<li>The MMX instruction set is now supported through intrinsics.</li>
+<li>The scheduler was improved to better reduce register pressure on
+ X86 and other targets that are register pressure sensitive.</li>
+<li>Linux/x86-64 support is much better.</li>
+<li>PIC support for linux/x86 has been added.</li>
+<li>The X86 backend now supports the GCC regparm attribute.</li>
+<li>LLVM now supports inline asm with multiple constraint letters per operand
+ (like "mri") which is common in X86 inline asms.</li>
+</ul>
+
+<p>ARM-specific Code Generator Enhancements:</p>
+
+<ul>
+<li>The ARM code generator is now stable and fully supported.</li>
+
+<li>There are major new features, including support for ARM
+ v4-v6 chips, vfp support, soft float point support, pre/postinc support,
+ load/store multiple generation, constant pool entry motion (to support
+ large functions), inline asm support, weak linkage support, static
+ ctor/dtor support and many bug fixes.</li>
+
+<li>Added support for Thumb code generation (<tt>llc -march=thumb</tt>).</li>
+
+<li>The ARM backend now supports the ARM AAPCS/EABI ABI and PIC codegen on
+ arm/linux.</li>
+
+<li>Several bugs were fixed for DWARF debug info generation on arm/linux.</li>
+
+</ul>
+
+<p>PowerPC-specific Code Generator Enhancements:</p>
+
+<ul>
+<li>The PowerPC 64 JIT now supports addressing code loaded above the 2G
+ boundary.</li>
+
+<li>Improved support for the Linux/ppc ABI and the linux/ppc JIT is fully
+ functional now. llvm-gcc and static compilation are not fully supported
+ yet though.</li>
+
+<li>Many PowerPC 64 bug fixes.</li>
+
</ul>
</div>
+
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="other">Other Improvements</a></div>
<div class="doc_text">
-<p>This release includes many other improvements, including improvements to
- the optimizers and code generators (improving the generated code) changes to
- speed up the compiler in many ways (improving algorithms and fine tuning
- code), and changes to reduce the code size of the compiler itself.</p>
<p>More specific changes include:</p>
<ul>
-<li>The llvm-test framework now supports SPEC2006.</li>
-<li>LLVM now includes a <a href="GetElementPtr.html">FAQ about the
-<tt>getelementptr</tt> instruction</a>.</li>
-<li>Bugpoint now supports a new "<tt>-find-bugs</tt>" mode. This mode makes
- bugpoint permute pass sequences to try to expose bugs due to pass
- sequencing.</li>
-<li>The JIT now supports lazily streaming code from multiple modules at a
- time, implicitly linking the code as it goes.</li>
-</ul>
-</div>
+<li>LLVM no longer relies on static destructors to shut itself down. Instead,
+ it lazily initializes itself and shuts down when <tt>llvm_shutdown()</tt> is
+ explicitly called.</li>
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="apichanges">Significant API Changes in LLVM 1.9</a>
+<li>LLVM now has significantly fewer static constructors, reducing startup time.
+ </li>
+
+<li>Several classes have been refactored to reduce the amount of code that
+ gets linked into apps that use the JIT.</li>
+
+<li>Construction of intrinsic function declarations has been simplified.</li>
+
+<li>The gccas/gccld tools have been replaced with small shell scripts.</li>
+
+<li>Support has been added to llvm-test for running on low-memory
+ or slow machines (make SMALL_PROBLEM_SIZE=1).</li>
+
+</ul>
</div>
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection"><a name="apichanges">API Changes</a></div>
<div class="doc_text">
-<p>Several significant API changes have been made. If you are maintaining
-out-of-tree code, please be aware that:</p>
+<p>LLVM 2.0 contains a revamp of the type system and several other significant
+internal changes. If you are programming to the C++ API, be aware of the
+following major changes:</p>
<ul>
-<li>The ConstantSInt and ConstantUInt classes have been merged into the
- ConstantInt class.</li>
-<li><p>As a step towards making LLVM's integer types signless, several new
-instructions have been added to LLVM. The <tt>Div</tt> instruction is now
-<tt>UDiv</tt>, <tt>SDiv</tt>, and <tt>FDiv</tt>. The <tt>Rem</tt> instruction
-is now <tt>URem</tt>, <tt>SRem</tt> and <tt>FRem</tt>. See the
-<a href="LangRef.html">Language Reference</a> for details on these new
-instructions.</p>
-<li><p><tt>ConstantBool::True</tt> and <tt>ConstantBool::False</tt> have been
- renamed to <tt>ConstantBool::getTrue()</tt> and
- <tt>ConstantBool::getFalse()</tt>.</p></li>
-<li>The 'analyze' tool has been merged into the 'opt' tool.</li>
+<li>Pass registration is slightly different in LLVM 2.0 (you now need an
+ <tt>intptr_t</tt> in your constructor), as explained in the <a
+ href="WritingAnLLVMPass.html#basiccode">Writing an LLVM Pass</a>
+ document.</li>
+
+<li><tt>ConstantBool</tt>, <tt>ConstantIntegral</tt> and <tt>ConstantInt</tt>
+ classes have been merged together, we now just have
+ <tt>ConstantInt</tt>.</li>
+
+<li><tt>Type::IntTy</tt>, <tt>Type::UIntTy</tt>, <tt>Type::SByteTy</tt>, ... are
+ replaced by <tt>Type::Int8Ty</tt>, <tt>Type::Int16Ty</tt>, etc. LLVM types
+ have always corresponded to fixed size types
+ (e.g. long was always 64-bits), but the type system no longer includes
+ information about the sign of the type. Also, the
+ <tt>Type::isPrimitiveType()</tt> method now returns false for integers.</li>
+
+<li>Several classes (<tt>CallInst</tt>, <tt>GetElementPtrInst</tt>,
+ <tt>ConstantArray</tt>, etc), that once took <tt>std::vector</tt> as
+ arguments now take ranges instead. For example, you can create a
+ <tt>GetElementPtrInst</tt> with code like:
+
+ <pre>
+ Value *Ops[] = { Op1, Op2, Op3 };
+ GEP = new GetElementPtrInst(BasePtr, Ops, 3);
+ </pre>
+
+ This avoids creation of a temporary vector (and a call to malloc/free). If
+ you have an <tt>std::vector</tt>, use code like this:
+ <pre>
+ std::vector&lt;Value*&gt; Ops = ...;
+ GEP = new GetElementPtrInst(BasePtr, &amp;Ops[0], Ops.size());
+ </pre>
+
+ </li>
+
+<li><tt>CastInst</tt> is now abstract and its functionality is split into
+ several parts, one for each of the <a href="LangRef.html#convertops">new
+ cast instructions</a>.</li>
+<li><tt>Instruction::getNext()/getPrev()</tt> are now private (along with
+ <tt>BasicBlock::getNext</tt>, etc), for efficiency reasons (they are now no
+ longer just simple pointers). Please use <tt>BasicBlock::iterator</tt>, etc
+ instead.
+</li>
+
+<li><tt>Module::getNamedFunction()</tt> is now called
+ <tt>Module::getFunction()</tt>.</li>
+
+<li><tt>SymbolTable.h</tt> has been split into <tt>ValueSymbolTable.h</tt> and
+<tt>TypeSymbolTable.h</tt>.</li>
</ul>
</div>
@@ -237,14 +479,14 @@ instructions.</p>
<p>LLVM is known to work on the following platforms:</p>
<ul>
- <li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD
+<li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD
(and probably other unix-like systems).</li>
+<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
+ 64-bit modes.</li>
<li>Intel and AMD machines running on Win32 using MinGW libraries (native)</li>
-<li>Sun UltraSPARC workstations running Solaris 8.</li>
<li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
support is available for native builds with Visual C++).</li>
-<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
- 64-bit modes.</li>
+<li>Sun UltraSPARC workstations running Solaris 8.</li>
<li>Alpha-based machines running Debian GNU/Linux.</li>
<li>Itanium-based machines running Linux and HP-UX.</li>
</ul>
@@ -289,8 +531,9 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<ul>
<li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in in a
future release.</li>
+<li>C++ EH support is disabled for this release.</li>
+<li>The MSIL backend is experimental.</li>
<li>The IA64 code generator is experimental.</li>
-<li>The ARM code generator is experimental.</li>
<li>The Alpha JIT is experimental.</li>
<li>"<tt>-filetype=asm</tt>" (the default) is the only supported value for the
<tt>-filetype</tt> llc option.</li>
@@ -307,9 +550,7 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<ul>
<li>The X86 backend does not yet support <a href="http://llvm.org/PR879">inline
- assembly that uses the X86 floating point stack</a>. See the <a
- href="http://llvm.org/PR879">bug</a> for details on workarounds on
- Linux.</li>
+ assembly that uses the X86 floating point stack</a>.</li>
</ul>
</div>
@@ -324,52 +565,41 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<ul>
<li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
implement ordered FP comparisons</a>.</li>
-<li>The 64-bit PowerPC backend is not fully stable. If you desire PPC64 support,
- please use mainline CVS LLVM, which has several important bug fixes.</li>
+<li>The Linux PPC32/ABI support needs testing for the interpreter and static
+compilation, and lacks support for debug information.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
- <a name="sparc-be">Known problems with the SPARC back-end</a>
+ <a name="arm-be">Known problems with the ARM back-end</a>
</div>
<div class="doc_text">
<ul>
-<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
- support the 64-bit SPARC ABI (-m64).</li>
+<li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
+processors, thumb program can crash or produces wrong
+results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
+<li>Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested.
+</li>
+<li>There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute
+programs compiled with LLVM. Please use more recent versions of QEMU.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
- <a name="c-be">Known problems with the C back-end</a>
+ <a name="sparc-be">Known problems with the SPARC back-end</a>
</div>
<div class="doc_text">
<ul>
-
-<li>The C back-end produces code that violates the ANSI C Type-Based Alias
-Analysis rules. As such, special options may be necessary to compile the code
-(for example, GCC requires the <tt>-fno-strict-aliasing</tt> option). This
-problem probably cannot be fixed.</li>
-
-<li><a href="http://llvm.org/PR56">Zero arg vararg functions are not
-supported</a>. This should not affect LLVM produced by the C or C++
-frontends.</li>
-
-<li>The C backend does not correctly implement the <a
-href="LangRef.html#int_stacksave"><tt>llvm.stacksave</tt></a> or
-<a href="LangRef.html#int_stackrestore"><tt>llvm.stackrestore</tt></a>
-intrinsics. This means that some code compiled by it can run out of stack
-space if they depend on these (e.g. C99 varargs).</li>
-
-<li><a href="http://llvm.org/PR802">The C backend does not support inline
- assembly code</a>.</li>
+<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32), it does not
+ support the 64-bit SPARC ABI (-m64).</li>
</ul>
</div>
@@ -415,36 +645,25 @@ programs.</li>
<li>Defining vararg functions is not supported (but calling them is ok).</li>
+<li>The Itanium backend has bitrotted somewhat.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
- <a name="arm-be">Known problems with the ARM back-end</a>
+ <a name="c-be">Known problems with the C back-end</a>
</div>
<div class="doc_text">
<ul>
-<li>The ARM backend is currently in early development stages, it is not
-ready for production use.</li>
+<li><a href="http://llvm.org/PR802">The C backend does not support inline
+ assembly code</a>.</li>
</ul>
</div>
-<!-- ======================================================================= -->
-<div class="doc_subsection">
- <a name="core">Known problems with the LLVM Core</a>
-</div>
-
-<div class="doc_text">
-
-<ul>
- <li>In the JIT, <tt>dlsym()</tt> on a symbol compiled by the JIT will not
- work.</li>
-</ul>
-</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
@@ -456,15 +675,9 @@ ready for production use.</li>
<div class="doc_text">
-<p>
-
-<p>llvm-gcc4 is far more stable and produces better code than llvm-gcc3, but
-does not currently support <a href="http://llvm.org/PR869">Link-Time
-Optimization</a> or <a href="http://llvm.org/PR870">C++ Exception Handling</a>,
-which llvm-gcc3 does.</p>
-
-<p>llvm-gcc4 does not support the <a href="http://llvm.org/PR947">GCC indirect
-goto extension</a>, but llvm-gcc3 does.</p>
+<p>llvm-gcc4 does not currently support <a href="http://llvm.org/PR869">Link-Time
+Optimization</a> on most platforms "out-of-the-box". Please inquire on the
+llvmdev mailing list if you are interested.</p>
</div>
@@ -474,86 +687,52 @@ goto extension</a>, but llvm-gcc3 does.</p>
</div>
<div class="doc_text">
-
<ul>
-<li>"long double" is transformed by the front-end into "double". There is no
-support for floating point data types of any size other than 32 and 64
-bits.</li>
+<li><p>"long double" is silently transformed by the front-end into "double". There
+is no support for floating point data types of any size other than 32 and 64
+bits.</p></li>
-<li>Although many GCC extensions are supported, some are not. In particular,
- the following extensions are known to <b>not be</b> supported:
- <ol>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.</li>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</li>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
- </ol>
-
- <p>The following GCC extensions are <b>partially</b> supported. An ignored
- attribute means that the LLVM compiler ignores the presence of the attribute,
- but the code should still work. An unsupported attribute is one which is
- ignored by the LLVM compiler and will cause a different interpretation of
- the program.</p>
+<li><p>llvm-gcc does <b>not</b> support <tt>__builtin_apply</tt> yet.
+ See <a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</p>
+</li>
+<li><p>llvm-gcc <b>partially</b> supports these GCC extensions:</p>
<ol>
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
- Arrays whose length is computed at run time.<br>
- Supported, but allocated stack space is not freed until the function returns (noted above).</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.<br>
+ Nested functions are supported, but llvm-gcc does not support non-local
+ gotos or taking the address of a nested function.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
Declaring that functions have no side effects or that they can never
return.<br>
- <b>Supported:</b> <tt>constructor</tt>, <tt>destructor</tt>,
+ <b>Supported:</b> <tt>alias</tt>, <tt>always_inline</tt>, <tt>cdecl</tt>,
+ <tt>constructor</tt>, <tt>destructor</tt>,
<tt>deprecated</tt>, <tt>fastcall</tt>, <tt>format</tt>,
- <tt>format_arg</tt>, <tt>non_null</tt>, <tt>noreturn</tt>,
+ <tt>format_arg</tt>, <tt>non_null</tt>, <tt>noreturn</tt>, <tt>regparm</tt>
<tt>section</tt>, <tt>stdcall</tt>, <tt>unused</tt>, <tt>used</tt>,
<tt>visibility</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
- <b>Ignored:</b> <tt>noinline</tt>,
- <tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
- <tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
-
- <b>Unsupported:</b> <tt>alias</tt>, <tt>regparm</tt>, all other target specific
- attributes</li>
-
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
- Specifying attributes of variables.<br>
- <b>Supported:</b> <tt>cleanup</tt>, <tt>common</tt>, <tt>nocommon</tt>,
- <tt>deprecated</tt>, <tt>dllimport</tt>, <tt>dllexport</tt>,
- <tt>section</tt>, <tt>transparent_union</tt>, <tt>unused</tt>,
- <tt>used</tt>, <tt>weak</tt><br>
-
- <b>Unsupported:</b> <tt>aligned</tt>, <tt>mode</tt>, <tt>packed</tt>,
- <tt>shared</tt>, <tt>tls_model</tt>,
- <tt>vector_size</tt>, all target specific attributes.
- </li>
-
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>: Specifying attributes of types.<br>
- <b>Supported:</b> <tt>transparent_union</tt>, <tt>unused</tt>,
- <tt>deprecated</tt>, <tt>may_alias</tt><br>
-
- <b>Unsupported:</b> <tt>aligned</tt>, <tt>packed</tt>,
- all target specific attributes.</li>
-
- <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
- Other built-in functions.<br>
- We support all builtins which have a C language equivalent (e.g.,
- <tt>__builtin_cos</tt>), <tt>__builtin_alloca</tt>,
- <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
- <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt>
- (currently ignored). We also support builtins for ISO C99 floating
- point comparison macros (e.g., <tt>__builtin_islessequal</tt>),
- <tt>__builtin_prefetch</tt>, <tt>__builtin_popcount[ll]</tt>,
- <tt>__builtin_clz[ll]</tt>, and <tt>__builtin_ctz[ll]</tt>.</li>
+ <b>Ignored:</b> <tt>noinline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
+ <tt>malloc</tt>, <tt>no_instrument_function</tt></li>
</ol>
+</li>
- <p>The following extensions <b>are</b> known to be supported:</p>
+<li><p>llvm-gcc supports the vast majority of GCC extensions, including:</p>
<ol>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
+ Other built-in functions.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
+ Specifying attributes of variables.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>: Specifying attributes of types.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
+ <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
+ Arrays whose length is computed at run time.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>: Putting statements and declarations inside expressions.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof">Typeof</a>: <code>typeof</code>: referring to the type of an expression.</li>
@@ -609,20 +788,15 @@ lists, please let us know (also including whether or not they work).</p>
<div class="doc_text">
-<p>For this release, the C++ front-end is considered to be fully
+<p>The C++ front-end is considered to be fully
tested and works for a number of non-trivial programs, including LLVM
-itself.</p>
+itself, Qt, Mozilla, etc.</p>
-</div>
-
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- Notes
-</div>
-
-<div class="doc_text">
<ul>
-<li>llvm-gcc4 does not support C++ exception handling at all yet.</li>
+<li>llvm-gcc4 only has partial support for <a href="http://llvm.org/PR870">C++
+Exception Handling</a>, and it is not enabled by default.</li>
+
+<!-- NO EH Support!
<li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
@@ -640,7 +814,7 @@ itself.</p>
<i>However</i>, the exception handling mechanism used by llvm-gcc3 is very
different from the model used in the Itanium ABI, so <b>exceptions will not
interact correctly</b>. </li>
-
+-->
</ul>
</div>
@@ -656,11 +830,10 @@ itself.</p>
<div class="doc_text">
<p>A wide variety of additional information is available on the <a
-href="http://llvm.org">LLVM web page</a>, including <a
-href="http://llvm.org/docs/">documentation</a> and <a
-href="http://llvm.org/pubs/">publications describing algorithms and
-components implemented in LLVM</a>. The web page also contains versions of the
-API documentation which is up-to-date with the CVS version of the source code.
+href="http://llvm.org">LLVM web page</a>, in particular in the <a
+href="http://llvm.org/docs/">documentation</a> section. The web page also
+contains versions of the API documentation which is up-to-date with the CVS
+version of the source code.
You can access versions of these documents specific to this release by going
into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
@@ -679,7 +852,7 @@ lists</a>.</p>
<a href="http://validator.w3.org/check/referer"><img
src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
- <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
+ <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
Last modified: $Date$
</address>
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html
index f65b6791d31d..925d9811a4ed 100644
--- a/docs/WritingAnLLVMPass.html
+++ b/docs/WritingAnLLVMPass.html
@@ -264,7 +264,7 @@ time.</p>
<div class="doc_code"><pre>
static char ID;
- Hello() : FunctionPass((intptr_t)&ID) {}
+ Hello() : FunctionPass((intptr_t)&amp;ID) {}
</pre></div><p>
<p> This declares pass identifier used by LLVM to identify pass. This allows LLVM to
@@ -312,7 +312,7 @@ argument "<tt>hello</tt>", and a name "<tt>Hello World Pass</tt>".</p>
<b>struct Hello</b> : <b>public</b> <a href="#FunctionPass">FunctionPass</a> {
static char ID;
- Hello() : FunctionPass((intptr_t)&ID) {}
+ Hello() : FunctionPass((intptr_t)&amp;ID) {}
<b>virtual bool</b> <a href="#runOnFunction">runOnFunction</a>(Function &amp;F) {
llvm::cerr &lt;&lt; "<i>Hello: </i>" &lt;&lt; F.getName() &lt;&lt; "\n";
@@ -485,7 +485,7 @@ refering to function bodies in no predictable order, or adding and removing
functions. Because nothing is known about the behavior of <tt>ModulePass</tt>
subclasses, no optimization can be done for their execution. A module pass
can use function level passes (e.g. dominators) using getAnalysis interface
-<tt> getAnalysis<DominatorTree>(Function)</tt>. </p>
+<tt> getAnalysis&lt;DominatorTree&gt;(Function)</tt>. </p>
<p>To write a correct <tt>ModulePass</tt> subclass, derive from
<tt>ModulePass</tt> and overload the <tt>runOnModule</tt> method with the
@@ -746,7 +746,7 @@ program, or false if they didn't. </p>
<b>virtual bool</b> doInitialization(Loop *, LPPassManager &amp;LPM);
</pre></div>
-The <tt>doInitialization</tt> method is designed to do simple initialization
+<p>The <tt>doInitialization</tt> method is designed to do simple initialization
type of stuff that does not depend on the functions being processed. The
<tt>doInitialization</tt> method call is not scheduled to overlap with any
other pass executions (thus it should be very fast). LPPassManager
@@ -1159,7 +1159,7 @@ For example:</p>
}
</pre></div>
-In above example, runOnFunction for DominatorTree is called by pass manager
+<p>In above example, runOnFunction for DominatorTree is called by pass manager
before returning a reference to the desired pass.</p>
<p>
@@ -1797,6 +1797,8 @@ places (for global resources). Although this is a simple extension, we simply
haven't had time (or multiprocessor machines, thus a reason) to implement this.
Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>
+</div>
+
<!-- *********************************************************************** -->
<hr>
<address>
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h
index 56b64ed2abf7..f2722b0382e1 100644
--- a/include/llvm/BasicBlock.h
+++ b/include/llvm/BasicBlock.h
@@ -17,6 +17,7 @@
#include "llvm/Instruction.h"
#include "llvm/SymbolTableListTraits.h"
#include "llvm/ADT/ilist"
+#include "llvm/Support/DataTypes.h"
namespace llvm {
diff --git a/include/llvm/IntrinsicsX86.td b/include/llvm/IntrinsicsX86.td
index c510eef6a868..0f61e24d925f 100644
--- a/include/llvm/IntrinsicsX86.td
+++ b/include/llvm/IntrinsicsX86.td
@@ -702,6 +702,10 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
// Misc.
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
+ def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
+ Intrinsic<[llvm_void_ty, llvm_v8i8_ty, llvm_v8i8_ty, llvm_ptr_ty],
+ [IntrWriteMem]>;
+
def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
Intrinsic<[llvm_i32_ty, llvm_v8i8_ty], [IntrNoMem]>;
diff --git a/include/llvm/ValueSymbolTable.h b/include/llvm/ValueSymbolTable.h
index 8f007b9559c3..a695ee8a5a63 100644
--- a/include/llvm/ValueSymbolTable.h
+++ b/include/llvm/ValueSymbolTable.h
@@ -16,6 +16,7 @@
#include "llvm/Value.h"
#include "llvm/ADT/StringMap.h"
+#include "llvm/Support/DataTypes.h"
namespace llvm {
template<typename ValueSubClass, typename ItemParentClass>
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index e9531f1e1d91..7408580b23cf 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -24,8 +24,15 @@
#include "llvm/Support/MemoryBuffer.h"
using namespace llvm;
-BitcodeReader::~BitcodeReader() {
+void BitcodeReader::FreeState() {
delete Buffer;
+ Buffer = 0;
+ std::vector<PATypeHolder>().swap(TypeList);
+ ValueList.clear();
+ std::vector<const ParamAttrsList*>().swap(ParamAttrs);
+ std::vector<BasicBlock*>().swap(FunctionBBs);
+ std::vector<Function*>().swap(FunctionsWithBodies);
+ DeferredFunctionInfo.clear();
}
//===----------------------------------------------------------------------===//
@@ -985,10 +992,10 @@ bool BitcodeReader::ParseModule(const std::string &ModuleID) {
GlobalInits.push_back(std::make_pair(NewGV, InitID-1));
break;
}
- // FUNCTION: [type, callingconv, isproto, linkage, alignment, section,
- // visibility]
+ // FUNCTION: [type, callingconv, isproto, linkage, paramattr,
+ // alignment, section, visibility]
case bitc::MODULE_CODE_FUNCTION: {
- if (Record.size() < 7)
+ if (Record.size() < 8)
return Error("Invalid MODULE_CODE_FUNCTION record");
const Type *Ty = getTypeByID(Record[0]);
if (!isa<PointerType>(Ty))
@@ -1004,13 +1011,17 @@ bool BitcodeReader::ParseModule(const std::string &ModuleID) {
Func->setCallingConv(Record[1]);
bool isProto = Record[2];
Func->setLinkage(GetDecodedLinkage(Record[3]));
- Func->setAlignment((1 << Record[4]) >> 1);
- if (Record[5]) {
- if (Record[5]-1 >= SectionTable.size())
+
+ assert(Func->getFunctionType()->getParamAttrs() ==
+ getParamAttrs(Record[4]));
+
+ Func->setAlignment((1 << Record[5]) >> 1);
+ if (Record[6]) {
+ if (Record[6]-1 >= SectionTable.size())
return Error("Invalid section ID");
- Func->setSection(SectionTable[Record[5]-1]);
+ Func->setSection(SectionTable[Record[6]-1]);
}
- Func->setVisibility(GetDecodedVisibility(Record[6]));
+ Func->setVisibility(GetDecodedVisibility(Record[7]));
ValueList.push_back(Func);
@@ -1098,42 +1109,6 @@ bool BitcodeReader::ParseBitcode() {
}
-bool BitcodeReader::materializeFunction(Function *F, std::string *ErrInfo) {
- // If it already is material, ignore the request.
- if (!F->hasNotBeenReadFromBytecode()) return false;
-
- DenseMap<Function*, std::pair<uint64_t, unsigned> >::iterator DFII =
- DeferredFunctionInfo.find(F);
- assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!");
-
- // Move the bit stream to the saved position of the deferred function body and
- // restore the real linkage type for the function.
- Stream.JumpToBit(DFII->second.first);
- F->setLinkage((GlobalValue::LinkageTypes)DFII->second.second);
- DeferredFunctionInfo.erase(DFII);
-
- if (ParseFunctionBody(F)) {
- if (ErrInfo) *ErrInfo = ErrorString;
- return true;
- }
-
- return false;
-}
-
-Module *BitcodeReader::materializeModule(std::string *ErrInfo) {
- DenseMap<Function*, std::pair<uint64_t, unsigned> >::iterator I =
- DeferredFunctionInfo.begin();
- while (!DeferredFunctionInfo.empty()) {
- Function *F = (*I++).first;
- assert(F->hasNotBeenReadFromBytecode() &&
- "Deserialized function found in map!");
- if (materializeFunction(F, ErrInfo))
- return 0;
- }
- return TheModule;
-}
-
-
/// ParseFunctionBody - Lazily parse the specified function body block.
bool BitcodeReader::ParseFunctionBody(Function *F) {
if (Stream.EnterSubBlock(bitc::FUNCTION_BLOCK_ID))
@@ -1364,12 +1339,12 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
}
case bitc::FUNC_CODE_INST_INVOKE: { // INVOKE: [cc,fnty, op0,op1,op2, ...]
- if (Record.size() < 3) return Error("Invalid INVOKE record");
- unsigned CCInfo = Record[0];
- BasicBlock *NormalBB = getBasicBlock(Record[1]);
- BasicBlock *UnwindBB = getBasicBlock(Record[2]);
+ if (Record.size() < 4) return Error("Invalid INVOKE record");
+ unsigned CCInfo = Record[1];
+ BasicBlock *NormalBB = getBasicBlock(Record[2]);
+ BasicBlock *UnwindBB = getBasicBlock(Record[3]);
- unsigned OpNum = 3;
+ unsigned OpNum = 4;
Value *Callee;
if (getValueTypePair(Record, OpNum, NextValueNo, Callee))
return Error("Invalid INVOKE record");
@@ -1383,6 +1358,8 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
Record.size() < OpNum+FTy->getNumParams())
return Error("Invalid INVOKE record");
+ assert(FTy->getParamAttrs() == getParamAttrs(Record[0]));
+
SmallVector<Value*, 16> Ops;
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
Ops.push_back(getFnValueByID(Record[OpNum], FTy->getParamType(i)));
@@ -1484,11 +1461,12 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
break;
}
case bitc::FUNC_CODE_INST_CALL: { // CALL: [cc, fnty, fnid, arg0, arg1...]
- if (Record.size() < 1)
+ if (Record.size() < 2)
return Error("Invalid CALL record");
- unsigned CCInfo = Record[0];
- unsigned OpNum = 1;
+ unsigned CCInfo = Record[1];
+
+ unsigned OpNum = 2;
Value *Callee;
if (getValueTypePair(Record, OpNum, NextValueNo, Callee))
return Error("Invalid CALL record");
@@ -1499,6 +1477,8 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
if (!FTy || Record.size() < FTy->getNumParams()+OpNum)
return Error("Invalid CALL record");
+ assert(FTy->getParamAttrs() == getParamAttrs(Record[0]));
+
SmallVector<Value*, 16> Args;
// Read the fixed params.
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
@@ -1577,6 +1557,69 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
return false;
}
+//===----------------------------------------------------------------------===//
+// ModuleProvider implementation
+//===----------------------------------------------------------------------===//
+
+
+bool BitcodeReader::materializeFunction(Function *F, std::string *ErrInfo) {
+ // If it already is material, ignore the request.
+ if (!F->hasNotBeenReadFromBytecode()) return false;
+
+ DenseMap<Function*, std::pair<uint64_t, unsigned> >::iterator DFII =
+ DeferredFunctionInfo.find(F);
+ assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!");
+
+ // Move the bit stream to the saved position of the deferred function body and
+ // restore the real linkage type for the function.
+ Stream.JumpToBit(DFII->second.first);
+ F->setLinkage((GlobalValue::LinkageTypes)DFII->second.second);
+
+ if (ParseFunctionBody(F)) {
+ if (ErrInfo) *ErrInfo = ErrorString;
+ return true;
+ }
+
+ return false;
+}
+
+void BitcodeReader::dematerializeFunction(Function *F) {
+ // If this function isn't materialized, or if it is a proto, this is a noop.
+ if (F->hasNotBeenReadFromBytecode() || F->isDeclaration())
+ return;
+
+ assert(DeferredFunctionInfo.count(F) && "No info to read function later?");
+
+ // Just forget the function body, we can remat it later.
+ F->deleteBody();
+ F->setLinkage(GlobalValue::GhostLinkage);
+}
+
+
+Module *BitcodeReader::materializeModule(std::string *ErrInfo) {
+ for (DenseMap<Function*, std::pair<uint64_t, unsigned> >::iterator I =
+ DeferredFunctionInfo.begin(), E = DeferredFunctionInfo.end(); I != E;
+ ++I) {
+ Function *F = I->first;
+ if (F->hasNotBeenReadFromBytecode() &&
+ materializeFunction(F, ErrInfo))
+ return 0;
+ }
+ return TheModule;
+}
+
+
+/// This method is provided by the parent ModuleProvde class and overriden
+/// here. It simply releases the module from its provided and frees up our
+/// state.
+/// @brief Release our hold on the generated module
+Module *BitcodeReader::releaseModule(std::string *ErrInfo) {
+ // Since we're losing control of this Module, we must hand it back complete
+ Module *M = ModuleProvider::releaseModule(ErrInfo);
+ FreeState();
+ return M;
+}
+
//===----------------------------------------------------------------------===//
// External interface
@@ -1606,12 +1649,18 @@ Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, std::string *ErrMsg){
R = static_cast<BitcodeReader*>(getBitcodeModuleProvider(Buffer, ErrMsg));
if (!R) return 0;
- // Read the whole module, get a pointer to it, tell ModuleProvider not to
- // delete it when its dtor is run.
- Module *M = R->releaseModule(ErrMsg);
-
- // Don't let the BitcodeReader dtor delete 'Buffer'.
+ // Read in the entire module.
+ Module *M = R->materializeModule(ErrMsg);
+
+ // Don't let the BitcodeReader dtor delete 'Buffer', regardless of whether
+ // there was an error.
R->releaseMemoryBuffer();
+
+ // If there was no error, tell ModuleProvider not to delete it when its dtor
+ // is run.
+ if (M)
+ M = R->releaseModule(ErrMsg);
+
delete R;
return M;
}
diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h
index b70a99c05761..2f61b06c6017 100644
--- a/lib/Bitcode/Reader/BitcodeReader.h
+++ b/lib/Bitcode/Reader/BitcodeReader.h
@@ -39,6 +39,10 @@ public:
++NumOperands;
}
+ void clear() {
+ std::vector<Use>().swap(Uses);
+ }
+
Value *operator[](unsigned i) const { return getOperand(i); }
Value *back() const { return Uses.back(); }
@@ -111,8 +115,11 @@ public:
BitcodeReader(MemoryBuffer *buffer) : Buffer(buffer), ErrorString(0) {
HasReversedFunctionsWithBodies = false;
}
- ~BitcodeReader();
+ ~BitcodeReader() {
+ FreeState();
+ }
+ void FreeState();
/// releaseMemoryBuffer - This causes the reader to completely forget about
/// the memory buffer it contains, which prevents the buffer from being
@@ -123,7 +130,9 @@ public:
virtual bool materializeFunction(Function *F, std::string *ErrInfo = 0);
virtual Module *materializeModule(std::string *ErrInfo = 0);
-
+ virtual void dematerializeFunction(Function *F);
+ virtual Module *releaseModule(std::string *ErrInfo = 0);
+
bool Error(const char *Str) {
ErrorString = Str;
return true;
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp
index 34c838343ef4..1ea763360782 100644
--- a/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -386,6 +386,12 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,
Vals.push_back(F->getCallingConv());
Vals.push_back(F->isDeclaration());
Vals.push_back(getEncodedLinkage(F));
+
+ // Note: we emit the param attr ID number for the function type of this
+ // function. In the future, we intend for attrs to be properties of
+ // functions, instead of on the type. This is to support this future work.
+ Vals.push_back(VE.getParamAttrID(F->getFunctionType()->getParamAttrs()));
+
Vals.push_back(Log2_32(F->getAlignment())+1);
Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0);
Vals.push_back(getEncodedVisibility(F));
@@ -736,15 +742,21 @@ static void WriteInstruction(const Instruction &I, unsigned InstID,
Vals.push_back(VE.getValueID(I.getOperand(i)));
break;
case Instruction::Invoke: {
+ const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
+ const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
Code = bitc::FUNC_CODE_INST_INVOKE;
+
+ // Note: we emit the param attr ID number for the function type of this
+ // function. In the future, we intend for attrs to be properties of
+ // functions, instead of on the type. This is to support this future work.
+ Vals.push_back(VE.getParamAttrID(FTy->getParamAttrs()));
+
Vals.push_back(cast<InvokeInst>(I).getCallingConv());
Vals.push_back(VE.getValueID(I.getOperand(1))); // normal dest
Vals.push_back(VE.getValueID(I.getOperand(2))); // unwind dest
PushValueAndType(I.getOperand(0), InstID, Vals, VE); // callee
// Emit value #'s for the fixed parameters.
- const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
- const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
Vals.push_back(VE.getValueID(I.getOperand(i+3))); // fixed param.
@@ -806,14 +818,21 @@ static void WriteInstruction(const Instruction &I, unsigned InstID,
Vals.push_back(cast<StoreInst>(I).isVolatile());
break;
case Instruction::Call: {
+ const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
+ const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+
Code = bitc::FUNC_CODE_INST_CALL;
+
+ // Note: we emit the param attr ID number for the function type of this
+ // function. In the future, we intend for attrs to be properties of
+ // functions, instead of on the type. This is to support this future work.
+ Vals.push_back(VE.getParamAttrID(FTy->getParamAttrs()));
+
Vals.push_back((cast<CallInst>(I).getCallingConv() << 1) |
unsigned(cast<CallInst>(I).isTailCall()));
PushValueAndType(I.getOperand(0), InstID, Vals, VE); // Callee
// Emit value #'s for the fixed parameters.
- const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
- const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
Vals.push_back(VE.getValueID(I.getOperand(i+1))); // fixed param.
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 290d621cf0ed..744a474ba4e9 100644
--- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -3422,8 +3422,8 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) {
SDOperand Ptr = ST->getBasePtr();
// If this is a store of a bit convert, store the input value if the
- // resultant store does not need a higher alignment than the original.
- if (Value.getOpcode() == ISD::BIT_CONVERT) {
+ // resultant store does not need a higher alignment than the original.
+ if (Value.getOpcode() == ISD::BIT_CONVERT && !ST->isTruncatingStore()) {
unsigned Align = ST->getAlignment();
MVT::ValueType SVT = Value.getOperand(0).getValueType();
unsigned OrigAlign = TLI.getTargetMachine().getTargetData()->
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index b70366357d93..19f10ebf2aff 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -1462,6 +1462,11 @@ bool SelectionDAGLowering::handleSmallSwitchRange(CaseRec& CR,
return true;
}
+static inline bool areJTsAllowed(const TargetLowering &TLI) {
+ return (TLI.isOperationLegal(ISD::BR_JT, MVT::Other) ||
+ TLI.isOperationLegal(ISD::BRIND, MVT::Other));
+}
+
/// handleJTSwitchCase - Emit jumptable for current switch case range
bool SelectionDAGLowering::handleJTSwitchCase(CaseRec& CR,
CaseRecVector& WorkList,
@@ -1478,9 +1483,7 @@ bool SelectionDAGLowering::handleJTSwitchCase(CaseRec& CR,
I!=E; ++I)
TSize += I->size();
- if ((!TLI.isOperationLegal(ISD::BR_JT, MVT::Other) &&
- !TLI.isOperationLegal(ISD::BRIND, MVT::Other)) ||
- TSize <= 3)
+ if (!areJTsAllowed(TLI) || TSize <= 3)
return false;
double Density = (double)TSize / (double)((Last - First) + 1ULL);
@@ -1622,8 +1625,12 @@ bool SelectionDAGLowering::handleBTSplitSwitchCase(CaseRec& CR,
LSize += J->size();
RSize -= J->size();
}
- // If our case is dense we *really* should handle it earlier!
- assert((FMetric > 0) && "Should handle dense range earlier!");
+ if (areJTsAllowed(TLI)) {
+ // If our case is dense we *really* should handle it earlier!
+ assert((FMetric > 0) && "Should handle dense range earlier!");
+ } else {
+ Pivot = CR.Range.first + Size/2;
+ }
CaseRange LHSR(CR.Range.first, Pivot);
CaseRange RHSR(Pivot, CR.Range.second);
@@ -3441,7 +3448,8 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
// Add information to the INLINEASM node to know about this output.
unsigned ResOpType = 4/*MEM*/ | (1 << 3);
- AsmNodeOperands.push_back(DAG.getConstant(ResOpType, MVT::i32));
+ AsmNodeOperands.push_back(DAG.getTargetConstant(ResOpType,
+ TLI.getPointerTy()));
AsmNodeOperands.push_back(OpInfo.CallOperand);
break;
}
@@ -3533,7 +3541,8 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
// Add information to the INLINEASM node to know about this input.
unsigned ResOpType = 3 /*IMM*/ | (1 << 3);
- AsmNodeOperands.push_back(DAG.getConstant(ResOpType, MVT::i32));
+ AsmNodeOperands.push_back(DAG.getTargetConstant(ResOpType,
+ TLI.getPointerTy()));
AsmNodeOperands.push_back(InOperandVal);
break;
} else if (OpInfo.ConstraintType == TargetLowering::C_Memory) {
@@ -3543,7 +3552,8 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
// Add information to the INLINEASM node to know about this input.
unsigned ResOpType = 4/*MEM*/ | (1 << 3);
- AsmNodeOperands.push_back(DAG.getConstant(ResOpType, MVT::i32));
+ AsmNodeOperands.push_back(DAG.getTargetConstant(ResOpType,
+ TLI.getPointerTy()));
AsmNodeOperands.push_back(InOperandVal);
break;
}
diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp
index 4142c6ec8bc4..2a35aa057ef3 100644
--- a/lib/Support/APInt.cpp
+++ b/lib/Support/APInt.cpp
@@ -1199,6 +1199,12 @@ APInt APInt::shl(uint32_t shiftAmt) const {
if (shiftAmt == BitWidth)
return APInt(BitWidth, 0);
+ // If none of the bits are shifted out, the result is *this. This avoids a
+ // lshr by the words size in the loop below which can produce incorrect
+ // results. It also avoids the expensive computation below for a common case.
+ if (shiftAmt == 0)
+ return *this;
+
// Create some space for the result.
uint64_t * val = new uint64_t[getNumWords()];
diff --git a/lib/System/Unix/MappedFile.inc b/lib/System/Unix/MappedFile.inc
index 5e76e2bc26aa..91b92ece5a5a 100644
--- a/lib/System/Unix/MappedFile.inc
+++ b/lib/System/Unix/MappedFile.inc
@@ -78,6 +78,7 @@ void MappedFile::unmap() {
if (options_ & WRITE_ACCESS)
::msync(base_, info_->Size, MS_SYNC);
::munmap(base_, info_->Size);
+ base_ = 0; // Mark this as non-mapped.
}
}
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 02119a4ed348..91f427fa2cb5 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -1398,6 +1398,11 @@ static void generateCompilerSpecificCode(std::ostream& Out) {
<< "#define __ATTRIBUTE_DTOR__\n"
<< "#define LLVM_ASM(X)\n"
<< "#endif\n\n";
+
+ Out << "#if __GNUC__ < 4 /* Old GCC's, or compilers not GCC */ \n"
+ << "#define __builtin_stack_save() 0 /* not implemented */\n"
+ << "#define __builtin_stack_restore(X) /* noop */\n"
+ << "#endif\n\n";
// Output target-specific code that should be inserted into main.
Out << "#define CODE_FOR_MAIN() /* Any target-specific code for main()*/\n";
diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp
index 13ab52abd4b2..818fcd5f59ad 100644
--- a/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -3326,31 +3326,39 @@ isOperandValidForConstraint(SDOperand Op, char Letter, SelectionDAG &DAG) {
case 'N':
case 'O':
case 'P': {
- if (!isa<ConstantSDNode>(Op)) return SDOperand(0,0);// Must be an immediate.
- unsigned Value = cast<ConstantSDNode>(Op)->getValue();
+ ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op);
+ if (!CST) return SDOperand(0, 0); // Must be an immediate to match.
+ unsigned Value = CST->getValue();
switch (Letter) {
default: assert(0 && "Unknown constraint letter!");
case 'I': // "I" is a signed 16-bit constant.
- if ((short)Value == (int)Value) return Op;
+ if ((short)Value == (int)Value)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'J': // "J" is a constant with only the high-order 16 bits nonzero.
case 'L': // "L" is a signed 16-bit constant shifted left 16 bits.
- if ((short)Value == 0) return Op;
+ if ((short)Value == 0)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'K': // "K" is a constant with only the low-order 16 bits nonzero.
- if ((Value >> 16) == 0) return Op;
+ if ((Value >> 16) == 0)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'M': // "M" is a constant that is greater than 31.
- if (Value > 31) return Op;
+ if (Value > 31)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'N': // "N" is a positive constant that is an exact power of two.
- if ((int)Value > 0 && isPowerOf2_32(Value)) return Op;
+ if ((int)Value > 0 && isPowerOf2_32(Value))
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'O': // "O" is the constant zero.
- if (Value == 0) return Op;
+ if (Value == 0)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
case 'P': // "P" is a constant whose negation is a signed 16-bit constant.
- if ((short)-Value == (int)-Value) return Op;
+ if ((short)-Value == (int)-Value)
+ return DAG.getTargetConstant(Value, Op.getValueType());
break;
}
break;
diff --git a/lib/Target/PowerPC/PPCRegisterInfo.td b/lib/Target/PowerPC/PPCRegisterInfo.td
index 3891755247ef..0b3b4cabde77 100644
--- a/lib/Target/PowerPC/PPCRegisterInfo.td
+++ b/lib/Target/PowerPC/PPCRegisterInfo.td
@@ -22,9 +22,9 @@ class GPR<bits<5> num, string n> : PPCReg<n> {
}
// GP8 - One of the 32 64-bit general-purpose registers
-class GP8<GPR Alias> : PPCReg<Alias.Name> {
- field bits<5> Num = Alias.Num;
- let Aliases = [Alias];
+class GP8<GPR SubReg> : PPCReg<SubReg.Name> {
+ field bits<5> Num = SubReg.Num;
+ let SubRegs = [SubReg];
}
// SPR - One of the 32-bit special-purpose registers
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp
index da95925848f4..0616513b5ee1 100644
--- a/lib/Target/X86/X86ISelLowering.cpp
+++ b/lib/Target/X86/X86ISelLowering.cpp
@@ -2675,7 +2675,8 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG) {
return Op;
}
- if (X86::isSHUFPMask(PermMask.Val))
+ if (X86::isSHUFPMask(PermMask.Val) &&
+ MVT::getSizeInBits(VT) != 64) // Don't do this for MMX.
return Op;
// Handle v8i16 shuffle high / low shuffle node pair.
@@ -2712,7 +2713,9 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG) {
}
}
- if (NumElems == 4) {
+ if (NumElems == 4 &&
+ // Don't do this for MMX.
+ MVT::getSizeInBits(VT) != 64) {
MVT::ValueType MaskVT = PermMask.getValueType();
MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT);
SmallVector<std::pair<int, int>, 8> Locs;
@@ -4725,18 +4728,19 @@ isOperandValidForConstraint(SDOperand Op, char Constraint, SelectionDAG &DAG) {
case 'I':
if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) {
if (C->getValue() <= 31)
- return Op;
+ return DAG.getTargetConstant(C->getValue(), Op.getValueType());
}
return SDOperand(0,0);
case 'N':
if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) {
if (C->getValue() <= 255)
- return Op;
+ return DAG.getTargetConstant(C->getValue(), Op.getValueType());
}
return SDOperand(0,0);
case 'i': {
// Literal immediates are always ok.
- if (isa<ConstantSDNode>(Op)) return Op;
+ if (ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op))
+ return DAG.getTargetConstant(CST->getValue(), Op.getValueType());
// If we are in non-pic codegen mode, we allow the address of a global (with
// an optional displacement) to be used with 'i'.
diff --git a/lib/Target/X86/X86InstrMMX.td b/lib/Target/X86/X86InstrMMX.td
index 63f01bf11c34..897d8f2aab2e 100644
--- a/lib/Target/X86/X86InstrMMX.td
+++ b/lib/Target/X86/X86InstrMMX.td
@@ -493,7 +493,9 @@ def MMX_PMOVMSKBrr : MMXI<0xD7, MRMSrcReg, (ops GR32:$dst, VR64:$src),
// Misc.
def MMX_MASKMOVQ : MMXI<0xF7, MRMDestMem, (ops VR64:$src, VR64:$mask),
- "maskmovq {$mask, $src|$src, $mask}", []>;
+ "maskmovq {$mask, $src|$src, $mask}",
+ [(int_x86_mmx_maskmovq VR64:$src, VR64:$mask, EDI)]>,
+ Imp<[EDI],[]>;
//===----------------------------------------------------------------------===//
// Alias Instructions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index f5d2baa426a6..516ba4363ee5 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -623,7 +623,11 @@ static bool OptimizeAwayTrappingUsesOfLoads(GlobalVariable *GV, Constant *LV) {
Loads.push_back(LI);
Changed |= OptimizeAwayTrappingUsesOfValue(LI, LV);
} else {
- assert(isa<StoreInst>(*GUI) && "Only expect load and stores!");
+ // If we get here we could have stores, selects, or phi nodes whose values
+ // are loaded.
+ assert((isa<StoreInst>(*GUI) || isa<PHINode>(*GUI) ||
+ isa<SelectInst>(*GUI)) &&
+ "Only expect load and stores!");
}
if (Changed) {
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 950404a7f816..482e1722c92e 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -389,8 +389,7 @@ static const Type *getPromotedType(const Type *Ty) {
if (const IntegerType* ITy = dyn_cast<IntegerType>(Ty)) {
if (ITy->getBitWidth() < 32)
return Type::Int32Ty;
- } else if (Ty == Type::FloatTy)
- return Type::DoubleTy;
+ }
return Ty;
}
@@ -6449,16 +6448,25 @@ Instruction *InstCombiner::commonPointerCastTransforms(CastInst &CI) {
while (Offset) {
if (const StructType *STy = dyn_cast<StructType>(GEPIdxTy)) {
const StructLayout *SL = TD->getStructLayout(STy);
- unsigned Elt = SL->getElementContainingOffset(Offset);
- NewIndices.push_back(ConstantInt::get(Type::Int32Ty, Elt));
+ if (Offset < (int64_t)SL->getSizeInBytes()) {
+ unsigned Elt = SL->getElementContainingOffset(Offset);
+ NewIndices.push_back(ConstantInt::get(Type::Int32Ty, Elt));
- Offset -= SL->getElementOffset(Elt);
- GEPIdxTy = STy->getElementType(Elt);
+ Offset -= SL->getElementOffset(Elt);
+ GEPIdxTy = STy->getElementType(Elt);
+ } else {
+ // Otherwise, we can't index into this, bail out.
+ Offset = 0;
+ OrigBase = 0;
+ }
} else if (isa<ArrayType>(GEPIdxTy) || isa<VectorType>(GEPIdxTy)) {
const SequentialType *STy = cast<SequentialType>(GEPIdxTy);
- uint64_t EltSize = TD->getTypeSize(STy->getElementType());
- NewIndices.push_back(ConstantInt::get(IntPtrTy, Offset/EltSize));
- Offset %= EltSize;
+ if (uint64_t EltSize = TD->getTypeSize(STy->getElementType())) {
+ NewIndices.push_back(ConstantInt::get(IntPtrTy,Offset/EltSize));
+ Offset %= EltSize;
+ } else {
+ NewIndices.push_back(ConstantInt::get(IntPtrTy, 0));
+ }
GEPIdxTy = STy->getElementType();
} else {
// Otherwise, we can't index into this, bail out.
@@ -7759,6 +7767,14 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
const FunctionType *FT = Callee->getFunctionType();
const Type *OldRetTy = Caller->getType();
+ const FunctionType *ActualFT =
+ cast<FunctionType>(cast<PointerType>(CE->getType())->getElementType());
+
+ // If the parameter attributes don't match up, don't do the xform. We don't
+ // want to lose an sret attribute or something.
+ if (FT->getParamAttrs() != ActualFT->getParamAttrs())
+ return false;
+
// Check to see if we are changing the return type...
if (OldRetTy != FT->getReturnType()) {
if (Callee->isDeclaration() && !Caller->use_empty() &&
diff --git a/test/CodeGen/SPARC/2007-05-09-JumpTables.ll b/test/CodeGen/SPARC/2007-05-09-JumpTables.ll
new file mode 100644
index 000000000000..a014acefa904
--- /dev/null
+++ b/test/CodeGen/SPARC/2007-05-09-JumpTables.ll
@@ -0,0 +1,30 @@
+; RUN: llvm-as < %s | llc -march=sparc
+
+; We cannot emit jump tables on Sparc, but we should correctly handle this case.
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
+
+define i32 @foo(i32 %f) {
+entry:
+ switch i32 %f, label %bb14 [
+ i32 0, label %UnifiedReturnBlock
+ i32 1, label %bb4
+ i32 2, label %bb7
+ i32 3, label %bb10
+ ]
+
+bb4: ; preds = %entry
+ ret i32 2
+
+bb7: ; preds = %entry
+ ret i32 5
+
+bb10: ; preds = %entry
+ ret i32 9
+
+bb14: ; preds = %entry
+ ret i32 0
+
+UnifiedReturnBlock: ; preds = %entry
+ ret i32 1
+}
diff --git a/test/Feature/llvm2cpp.ll b/test/Feature/llvm2cpp.ll
deleted file mode 100644
index 4cfb66d2401d..000000000000
--- a/test/Feature/llvm2cpp.ll
+++ /dev/null
@@ -1,795 +0,0 @@
-; RUN: llvm-as < %s | llvm-dis > %t1.ll
-; RUN: llvm-as < %s | llvm2cpp -gen-program -o %t2.cpp - -f
-; RUN: %link -o %t2.exe %t2.cpp -lLLVMCore -lLLVMSupport -lLLVMSystem -lstdc++
-; RUN: %t2.exe > %t2.ll
-; RUN: diff %t1.ll %t2.ll
-
-@X = global i32 4, align 16 ; <i32*> [#uses=0]
-
-define i32* @test1012() align 32 {
- %X = alloca i32, align 4 ; <i32*> [#uses=1]
- %Y = alloca i32, i32 42, align 16 ; <i32*> [#uses=0]
- %Z = alloca i32 ; <i32*> [#uses=0]
- ret i32* %X
-}
-
-define i32* @test1013() {
- %X = malloc i32, align 4 ; <i32*> [#uses=1]
- %Y = malloc i32, i32 42, align 16 ; <i32*> [#uses=0]
- %Z = malloc i32 ; <i32*> [#uses=0]
- ret i32* %X
-}
-
-define void @void(i32, i32) {
- add i32 0, 0 ; <i32>:3 [#uses=2]
- sub i32 0, 4 ; <i32>:4 [#uses=2]
- br label %5
-
-; <label>:5 ; preds = %5, %2
- add i32 %0, %1 ; <i32>:6 [#uses=2]
- sub i32 %6, %4 ; <i32>:7 [#uses=1]
- icmp sle i32 %7, %3 ; <i1>:8 [#uses=1]
- br i1 %8, label %9, label %5
-
-; <label>:9 ; preds = %5
- add i32 %0, %1 ; <i32>:10 [#uses=0]
- sub i32 %6, %4 ; <i32>:11 [#uses=1]
- icmp sle i32 %11, %3 ; <i1>:12 [#uses=0]
- ret void
-}
-
-define i32 @zarro() {
-Startup:
- ret i32 0
-}
-
-define fastcc void @foo() {
- ret void
-}
-
-define coldcc void @bar() {
- call fastcc void @foo( )
- ret void
-}
-
-define void @structret({ i8 }* sret %P) {
- call void @structret( { i8 }* %P sret )
- ret void
-}
-
-define void @foo4() {
- ret void
-}
-
-define coldcc void @bar2() {
- call fastcc void @foo( )
- ret void
-}
-
-define cc42 void @bar3() {
- invoke fastcc void @foo( )
- to label %Ok unwind label %U
-
-Ok: ; preds = %0
- ret void
-
-U: ; preds = %0
- unwind
-}
-
-define void @bar4() {
- call cc42 void @bar( )
- invoke cc42 void @bar3( )
- to label %Ok unwind label %U
-
-Ok: ; preds = %0
- ret void
-
-U: ; preds = %0
- unwind
-}
-; ModuleID = 'calltest.ll'
- %FunTy = type i32 (i32)
-
-define i32 @test1000(i32 %i0) {
- ret i32 %i0
-}
-
-define void @invoke(%FunTy* %x) {
- %foo = call i32 %x( i32 123 ) ; <i32> [#uses=0]
- %foo2 = tail call i32 %x( i32 123 ) ; <i32> [#uses=0]
- ret void
-}
-
-define i32 @main(i32 %argc) {
- %retval = call i32 @test1000( i32 %argc ) ; <i32> [#uses=2]
- %two = add i32 %retval, %retval ; <i32> [#uses=1]
- %retval2 = invoke i32 @test1000( i32 %argc )
- to label %Next unwind label %Error ; <i32> [#uses=1]
-
-Next: ; preds = %0
- %two2 = add i32 %two, %retval2 ; <i32> [#uses=1]
- call void @invoke( %FunTy* @test1000 )
- ret i32 %two2
-
-Error: ; preds = %0
- ret i32 -1
-}
-; ModuleID = 'casttest.ll'
-
-define i16 @FunFunc(i64 %x, i8 %z) {
-bb0:
- %cast110 = sext i8 %z to i16 ; <i16> [#uses=1]
- %cast10 = trunc i64 %x to i16 ; <i16> [#uses=1]
- %reg109 = add i16 %cast110, %cast10 ; <i16> [#uses=1]
- ret i16 %reg109
-}
-; ModuleID = 'cfgstructures.ll'
-
-define void @irreducible(i1 %cond) {
- br i1 %cond, label %X, label %Y
-
-X: ; preds = %Y, %0
- br label %Y
-
-Y: ; preds = %X, %0
- br label %X
-}
-
-define void @sharedheader(i1 %cond) {
- br label %A
-
-A: ; preds = %Y, %X, %0
- br i1 %cond, label %X, label %Y
-
-X: ; preds = %A
- br label %A
-
-Y: ; preds = %A
- br label %A
-}
-
-define void @nested(i1 %cond1, i1 %cond2, i1 %cond3) {
- br label %Loop1
-
-Loop1: ; preds = %L2Exit, %0
- br label %Loop2
-
-Loop2: ; preds = %L3Exit, %Loop1
- br label %Loop3
-
-Loop3: ; preds = %Loop3, %Loop2
- br i1 %cond3, label %Loop3, label %L3Exit
-
-L3Exit: ; preds = %Loop3
- br i1 %cond2, label %Loop2, label %L2Exit
-
-L2Exit: ; preds = %L3Exit
- br i1 %cond1, label %Loop1, label %L1Exit
-
-L1Exit: ; preds = %L2Exit
- ret void
-}
-; ModuleID = 'constexpr.ll'
- %SAType = type { i32, { [2 x float], i64 } }
- %SType = type { i32, { float, { i8 } }, i64 }
-global i64 1 ; <i64*>:0 [#uses=0]
-global i64 74514 ; <i64*>:1 [#uses=0]
-@t2 = global i32* @t1 ; <i32**> [#uses=0]
-@t3 = global i32* @t1 ; <i32**> [#uses=2]
-@t1 = global i32 4 ; <i32*> [#uses=2]
-@t4 = global i32** @t3 ; <i32***> [#uses=1]
-@t5 = global i32** @t3 ; <i32***> [#uses=0]
-@t6 = global i32*** @t4 ; <i32****> [#uses=0]
-@t7 = global float* inttoptr (i32 12345678 to float*) ; <float**> [#uses=0]
-@t9 = global i32 8 ; <i32*> [#uses=0]
-global i32* bitcast (float* @4 to i32*) ; <i32**>:2 [#uses=0]
-global float* @4 ; <float**>:3 [#uses=0]
-global float 0.000000e+00 ; <float*>:4 [#uses=2]
-@array = constant [2 x i32] [ i32 12, i32 52 ] ; <[2 x i32]*> [#uses=1]
-@arrayPtr = global i32* getelementptr ([2 x i32]* @array, i64 0, i64 0) ; <i32**> [#uses=1]
-@arrayPtr5 = global i32** getelementptr (i32** @arrayPtr, i64 5) ; <i32***> [#uses=0]
-@somestr = constant [11 x i8] c"hello world" ; <[11 x i8]*> [#uses=2]
-@char5 = global i8* getelementptr ([11 x i8]* @somestr, i64 0, i64 5) ; <i8**> [#uses=0]
-@char8a = global i32* bitcast (i8* getelementptr ([11 x i8]* @somestr, i64 0, i64 8) to i32*) ; <i32**> [#uses=0]
-@char8b = global i8* getelementptr ([11 x i8]* @somestr, i64 0, i64 8) ; <i8**> [#uses=0]
-@S1 = global %SType* null ; <%SType**> [#uses=1]
-@S2c = constant %SType {
- i32 1,
- { float, { i8 } } { float 2.000000e+00, { i8 } { i8 3 } },
- i64 4 } ; <%SType*> [#uses=3]
-@S3c = constant %SAType { i32 1, { [2 x float], i64 } { [2 x float] [ float 2.000000e+00, float 3.000000e+00 ], i64 4 } } ; <%SAType*> [#uses=1]
-@S1ptr = global %SType** @S1 ; <%SType***> [#uses=0]
-@S2 = global %SType* @S2c ; <%SType**> [#uses=0]
-@S3 = global %SAType* @S3c ; <%SAType**> [#uses=0]
-@S1fld1a = global float* getelementptr (%SType* @S2c, i64 0, i32 1, i32 0) ; <float**> [#uses=0]
-@S1fld1b = global float* getelementptr (%SType* @S2c, i64 0, i32 1, i32 0) ; <float**> [#uses=1]
-@S1fld1bptr = global float** @S1fld1b ; <float***> [#uses=0]
-@S2fld3 = global i8* getelementptr (%SType* @S2c, i64 0, i32 1, i32 1, i32 0) ; <i8**> [#uses=0]
-
-; ModuleID = 'constpointer.ll'
-@cpt3 = global i32* @cpt1 ; <i32**> [#uses=1]
-@cpt1 = global i32 4 ; <i32*> [#uses=2]
-@cpt4 = global i32** @cpt3 ; <i32***> [#uses=0]
-@cpt2 = global i32* @cpt1 ; <i32**> [#uses=0]
-global float* @7 ; <float**>:0 [#uses=0]
-global float* @7 ; <float**>:1 [#uses=0]
-global float 0.000000e+00 ; <float*>:2 [#uses=3]
-global float* @7 ; <float**>:3 [#uses=0]
-@fptr = global void ()* @f ; <void ()**> [#uses=0]
-@sptr1 = global [11 x i8]* @somestr ; <[11 x i8]**> [#uses=0]
-@somestr2 = constant [11 x i8] c"hello world" ; <[11 x i8]*> [#uses=2]
-@sptr2 = global [11 x i8]* @somestr2 ; <[11 x i8]**> [#uses=0]
-
-declare void @f()
-; ModuleID = 'escaped_label.ll'
-
-define i32 @foo3() {
- br label "foo`~!@#$%^&*()-_=+{}[]\\|;:',<.>/?"
-
-"foo`~!@#$%^&*()-_=+{}[]\\|;:',<.>/?": ; preds = %0
- ret i32 17
-}
-; ModuleID = 'float.ll'
-@F1 = global float 4.000000e+00 ; <float*> [#uses=0]
-@D1 = global double 4.000000e+00 ; <double*> [#uses=0]
-; ModuleID = 'fold-fpcast.ll'
-
-define i32 @test1() {
- ret i32 1080872141
-}
-
-define float @test1002() {
- ret float 0x36E1000000000000
-}
-
-define i64 @test3() {
- ret i64 4614256656431372362
-}
-
-define double @test4() {
- ret double 2.075076e-322
-}
-; ModuleID = 'forwardreftest.ll'
- %myfn = type float (i32, double, i32, i16)
- %myty = type i32
- %thisfuncty = type i32 (i32)*
-
-declare void @F(%thisfuncty, %thisfuncty, %thisfuncty)
-
-define i32 @zarro2(i32 %Func) {
-Startup:
- add i32 0, 10 ; <i32>:0 [#uses=0]
- ret i32 0
-}
-
-define i32 @test1004(i32) {
- call void @F( %thisfuncty @zarro2, %thisfuncty @test1004, %thisfuncty @foozball )
- ret i32 0
-}
-
-define i32 @foozball(i32) {
- ret i32 0
-}
-
-; ModuleID = 'globalredefinition.ll'
-@A = global i32* @B ; <i32**> [#uses=0]
-@B = global i32 7 ; <i32*> [#uses=1]
-
-define void @X() {
- ret void
-}
-; ModuleID = 'global_section.ll'
-@GlobSec = global i32 4, section "foo", align 16
-
-define void @test1005() section "bar" {
- ret void
-}
-
-; ModuleID = 'globalvars.ll'
-@MyVar = external global i32 ; <i32*> [#uses=1]
-@MyIntList = external global { \2*, i32 } ; <{ \2*, i32 }*> [#uses=1]
-external global i32 ; <i32*>:0 [#uses=0]
-@AConst = constant i32 123 ; <i32*> [#uses=0]
-@AString = constant [4 x i8] c"test" ; <[4 x i8]*> [#uses=0]
-@ZeroInit = global { [100 x i32], [40 x float] } zeroinitializer ; <{ [100 x i32], [40 x float] }*> [#uses=0]
-
-define i32 @foo10015(i32 %blah) {
- store i32 5, i32* @MyVar
- %idx = getelementptr { \2*, i32 }* @MyIntList, i64 0, i32 1 ; <i32*> [#uses=1]
- store i32 12, i32* %idx
- ret i32 %blah
-}
-; ModuleID = 'indirectcall2.ll'
-
-define i64 @test1006(i64 %X) {
- ret i64 %X
-}
-
-define i64 @fib(i64 %n) {
-; <label>:0
- %T = icmp ult i64 %n, 2 ; <i1> [#uses=1]
- br i1 %T, label %BaseCase, label %RecurseCase
-
-RecurseCase: ; preds = %0
- %result = call i64 @test1006( i64 %n ) ; <i64> [#uses=0]
- br label %BaseCase
-
-BaseCase: ; preds = %RecurseCase, %0
- %X = phi i64 [ 1, %0 ], [ 2, %RecurseCase ] ; <i64> [#uses=1]
- ret i64 %X
-}
-; ModuleID = 'indirectcall.ll'
-
-declare i32 @atoi(i8*)
-
-define i64 @fibonacc(i64 %n) {
- icmp ult i64 %n, 2 ; <i1>:1 [#uses=1]
- br i1 %1, label %BaseCase, label %RecurseCase
-
-BaseCase: ; preds = %0
- ret i64 1
-
-RecurseCase: ; preds = %0
- %n2 = sub i64 %n, 2 ; <i64> [#uses=1]
- %n1 = sub i64 %n, 1 ; <i64> [#uses=1]
- %f2 = call i64 @fibonacc( i64 %n2 ) ; <i64> [#uses=1]
- %f1 = call i64 @fibonacc( i64 %n1 ) ; <i64> [#uses=1]
- %result = add i64 %f2, %f1 ; <i64> [#uses=1]
- ret i64 %result
-}
-
-define i64 @realmain(i32 %argc, i8** %argv) {
-; <label>:0
- icmp eq i32 %argc, 2 ; <i1>:1 [#uses=1]
- br i1 %1, label %HasArg, label %Continue
-
-HasArg: ; preds = %0
- %n1 = add i32 1, 1 ; <i32> [#uses=1]
- br label %Continue
-
-Continue: ; preds = %HasArg, %0
- %n = phi i32 [ %n1, %HasArg ], [ 1, %0 ] ; <i32> [#uses=1]
- %N = sext i32 %n to i64 ; <i64> [#uses=1]
- %F = call i64 @fib( i64 %N ) ; <i64> [#uses=1]
- ret i64 %F
-}
-
-define i64 @trampoline(i64 %n, i64 (i64)* %fibfunc) {
- %F = call i64 %fibfunc( i64 %n ) ; <i64> [#uses=1]
- ret i64 %F
-}
-
-define i32 @main2() {
- %Result = call i64 @trampoline( i64 10, i64 (i64)* @fib ) ; <i64> [#uses=1]
- %Result.upgrd.1 = trunc i64 %Result to i32 ; <i32> [#uses=1]
- ret i32 %Result.upgrd.1
-}
-; ModuleID = 'inlineasm.ll'
-module asm "this is an inline asm block"
-module asm "this is another inline asm block"
-
-define i32 @test1007() {
- %X = call i32 asm "tricky here $0, $1", "=r,r"( i32 4 ) ; <i32> [#uses=1]
- call void asm sideeffect "eieio", ""( )
- ret i32 %X
-}
-; ModuleID = 'instructions.ll'
-
-define i32 @test_extractelement(<4 x i32> %V) {
- %R = extractelement <4 x i32> %V, i32 1 ; <i32> [#uses=1]
- ret i32 %R
-}
-
-define <4 x i32> @test_insertelement(<4 x i32> %V) {
- %R = insertelement <4 x i32> %V, i32 0, i32 0 ; <<4 x i32>> [#uses=1]
- ret <4 x i32> %R
-}
-
-define <4 x i32> @test_shufflevector_u(<4 x i32> %V) {
- %R = shufflevector <4 x i32> %V, <4 x i32> %V, <4 x i32> < i32 1, i32 undef, i32 7, i32 2 > ; <<4 x i32>> [#uses=1]
- ret <4 x i32> %R
-}
-
-define <4 x float> @test_shufflevector_f(<4 x float> %V) {
- %R = shufflevector <4 x float> %V, <4 x float> undef, <4 x i32> < i32 1, i32 undef, i32 7, i32 2 > ; <<4 x float>> [#uses=1]
- ret <4 x float> %R
-}
-; ModuleID = 'intrinsics.ll'
-
-declare i1 @llvm.isunordered.f32(float, float)
-
-declare i1 @llvm.isunordered.f64(double, double)
-
-declare void @llvm.prefetch(i8*, i32, i32)
-
-declare i32 @upgrd.rm.llvm.ctpop.i8(i8)
-
-declare i32 @upgrd.rm.llvm.ctpop.i16(i16)
-
-declare i32 @upgrd.rm.llvm.ctpop.i32(i32)
-
-declare i32 @upgrd.rm.llvm.ctpop.i64(i64)
-
-declare i32 @upgrd.rm.llvm.cttz.i8(i8)
-
-declare i32 @upgrd.rm.llvm.cttz.i16(i16)
-
-declare i32 @upgrd.rm.llvm.cttz.i32(i32)
-
-declare i32 @upgrd.rm.llvm.cttz.i64(i64)
-
-declare i32 @upgrd.rm.llvm.ctlz.i8(i8)
-
-declare i32 @upgrd.rm.llvm.ctlz.i16(i16)
-
-declare i32 @upgrd.rm.llvm.ctlz.i32(i32)
-
-declare i32 @upgrd.rm.llvm.ctlz.i64(i64)
-
-declare float @llvm.sqrt.f32(float)
-
-declare double @llvm.sqrt.f64(double)
-
-define void @libm() {
- fcmp uno float 1.000000e+00, 2.000000e+00 ; <i1>:1 [#uses=0]
- fcmp uno double 3.000000e+00, 4.000000e+00 ; <i1>:2 [#uses=0]
- call void @llvm.prefetch( i8* null, i32 1, i32 3 )
- call float @llvm.sqrt.f32( float 5.000000e+00 ) ; <float>:3 [#uses=0]
- call double @llvm.sqrt.f64( double 6.000000e+00 ) ; <double>:4 [#uses=0]
- call i32 @llvm.ctpop.i8( i8 10 ) ; <i32>:5 [#uses=1]
- bitcast i32 %5 to i32 ; <i32>:6 [#uses=0]
- call i32 @llvm.ctpop.i16( i16 11 ) ; <i32>:7 [#uses=1]
- bitcast i32 %7 to i32 ; <i32>:8 [#uses=0]
- call i32 @llvm.ctpop.i32( i32 12 ) ; <i32>:9 [#uses=1]
- bitcast i32 %9 to i32 ; <i32>:10 [#uses=0]
- call i32 @llvm.ctpop.i64( i64 13 ) ; <i32>:11 [#uses=1]
- bitcast i32 %11 to i32 ; <i32>:12 [#uses=0]
- call i32 @llvm.ctlz.i8( i8 14 ) ; <i32>:13 [#uses=1]
- bitcast i32 %13 to i32 ; <i32>:14 [#uses=0]
- call i32 @llvm.ctlz.i16( i16 15 ) ; <i32>:15 [#uses=1]
- bitcast i32 %15 to i32 ; <i32>:16 [#uses=0]
- call i32 @llvm.ctlz.i32( i32 16 ) ; <i32>:17 [#uses=1]
- bitcast i32 %17 to i32 ; <i32>:18 [#uses=0]
- call i32 @llvm.ctlz.i64( i64 17 ) ; <i32>:19 [#uses=1]
- bitcast i32 %19 to i32 ; <i32>:20 [#uses=0]
- call i32 @llvm.cttz.i8( i8 18 ) ; <i32>:21 [#uses=1]
- bitcast i32 %21 to i32 ; <i32>:22 [#uses=0]
- call i32 @llvm.cttz.i16( i16 19 ) ; <i32>:23 [#uses=1]
- bitcast i32 %23 to i32 ; <i32>:24 [#uses=0]
- call i32 @llvm.cttz.i32( i32 20 ) ; <i32>:25 [#uses=1]
- bitcast i32 %25 to i32 ; <i32>:26 [#uses=0]
- call i32 @llvm.cttz.i64( i64 21 ) ; <i32>:27 [#uses=1]
- bitcast i32 %27 to i32 ; <i32>:28 [#uses=0]
- ret void
-}
-
-declare i32 @llvm.ctpop.i8(i8)
-
-declare i32 @llvm.ctpop.i16(i16)
-
-declare i32 @llvm.ctpop.i32(i32)
-
-declare i32 @llvm.ctpop.i64(i64)
-
-declare i32 @llvm.ctlz.i8(i8)
-
-declare i32 @llvm.ctlz.i16(i16)
-
-declare i32 @llvm.ctlz.i32(i32)
-
-declare i32 @llvm.ctlz.i64(i64)
-
-declare i32 @llvm.cttz.i8(i8)
-
-declare i32 @llvm.cttz.i16(i16)
-
-declare i32 @llvm.cttz.i32(i32)
-
-declare i32 @llvm.cttz.i64(i64)
-
-; ModuleID = 'packed.ll'
-@foo1 = external global <4 x float> ; <<4 x float>*> [#uses=2]
-@foo102 = external global <2 x i32> ; <<2 x i32>*> [#uses=2]
-
-define void @main3() {
- store <4 x float> < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 >, <4 x float>* @foo1
- store <2 x i32> < i32 4, i32 4 >, <2 x i32>* @foo102
- %l1 = load <4 x float>* @foo1 ; <<4 x float>> [#uses=0]
- %l2 = load <2 x i32>* @foo102 ; <<2 x i32>> [#uses=0]
- ret void
-}
-
-; ModuleID = 'properties.ll'
-target datalayout = "e-p:32:32"
-target triple = "proc-vend-sys"
-deplibs = [ "m", "c" ]
-; ModuleID = 'prototype.ll'
-
-declare i32 @bar1017(i32 %in)
-
-define i32 @foo1016(i32 %blah) {
- %xx = call i32 @bar1017( i32 %blah ) ; <i32> [#uses=1]
- ret i32 %xx
-}
-
-; ModuleID = 'recursivetype.ll'
- %list = type { %list*, i32 }
-
-declare i8* @malloc(i32)
-
-define void @InsertIntoListTail(%list** %L, i32 %Data) {
-bb1:
- %reg116 = load %list** %L ; <%list*> [#uses=1]
- %cast1004 = inttoptr i64 0 to %list* ; <%list*> [#uses=1]
- %cond1000 = icmp eq %list* %reg116, %cast1004 ; <i1> [#uses=1]
- br i1 %cond1000, label %bb3, label %bb2
-
-bb2: ; preds = %bb2, %bb1
- %reg117 = phi %list** [ %reg118, %bb2 ], [ %L, %bb1 ] ; <%list**> [#uses=1]
- %cast1010 = bitcast %list** %reg117 to %list*** ; <%list***> [#uses=1]
- %reg118 = load %list*** %cast1010 ; <%list**> [#uses=3]
- %reg109 = load %list** %reg118 ; <%list*> [#uses=1]
- %cast1005 = inttoptr i64 0 to %list* ; <%list*> [#uses=1]
- %cond1001 = icmp ne %list* %reg109, %cast1005 ; <i1> [#uses=1]
- br i1 %cond1001, label %bb2, label %bb3
-
-bb3: ; preds = %bb2, %bb1
- %reg119 = phi %list** [ %reg118, %bb2 ], [ %L, %bb1 ] ; <%list**> [#uses=1]
- %cast1006 = bitcast %list** %reg119 to i8** ; <i8**> [#uses=1]
- %reg111 = call i8* @malloc( i32 16 ) ; <i8*> [#uses=3]
- store i8* %reg111, i8** %cast1006
- %reg111.upgrd.1 = ptrtoint i8* %reg111 to i64 ; <i64> [#uses=1]
- %reg1002 = add i64 %reg111.upgrd.1, 8 ; <i64> [#uses=1]
- %reg1002.upgrd.2 = inttoptr i64 %reg1002 to i8* ; <i8*> [#uses=1]
- %cast1008 = bitcast i8* %reg1002.upgrd.2 to i32* ; <i32*> [#uses=1]
- store i32 %Data, i32* %cast1008
- %cast1003 = inttoptr i64 0 to i64* ; <i64*> [#uses=1]
- %cast1009 = bitcast i8* %reg111 to i64** ; <i64**> [#uses=1]
- store i64* %cast1003, i64** %cast1009
- ret void
-}
-
-define %list* @FindData(%list* %L, i32 %Data) {
-bb1:
- br label %bb2
-
-bb2: ; preds = %bb6, %bb1
- %reg115 = phi %list* [ %reg116, %bb6 ], [ %L, %bb1 ] ; <%list*> [#uses=4]
- %cast1014 = inttoptr i64 0 to %list* ; <%list*> [#uses=1]
- %cond1011 = icmp ne %list* %reg115, %cast1014 ; <i1> [#uses=1]
- br i1 %cond1011, label %bb4, label %bb3
-
-bb3: ; preds = %bb2
- ret %list* null
-
-bb4: ; preds = %bb2
- %idx = getelementptr %list* %reg115, i64 0, i32 1 ; <i32*> [#uses=1]
- %reg111 = load i32* %idx ; <i32> [#uses=1]
- %cond1013 = icmp ne i32 %reg111, %Data ; <i1> [#uses=1]
- br i1 %cond1013, label %bb6, label %bb5
-
-bb5: ; preds = %bb4
- ret %list* %reg115
-
-bb6: ; preds = %bb4
- %idx2 = getelementptr %list* %reg115, i64 0, i32 0 ; <%list**> [#uses=1]
- %reg116 = load %list** %idx2 ; <%list*> [#uses=1]
- br label %bb2
-}
-; ModuleID = 'simplecalltest.ll'
- %FunTy = type i32 (i32)
-
-define void @invoke1019(%FunTy* %x) {
- %foo = call i32 %x( i32 123 ) ; <i32> [#uses=0]
- ret void
-}
-
-define i32 @main4(i32 %argc, i8** %argv, i8** %envp) {
- %retval = call i32 @test1008( i32 %argc ) ; <i32> [#uses=2]
- %two = add i32 %retval, %retval ; <i32> [#uses=1]
- %retval2 = call i32 @test1008( i32 %argc ) ; <i32> [#uses=1]
- %two2 = add i32 %two, %retval2 ; <i32> [#uses=1]
- call void @invoke1019( %FunTy* @test1008 )
- ret i32 %two2
-}
-
-define i32 @test1008(i32 %i0) {
- ret i32 %i0
-}
-; ModuleID = 'smallest.ll'
-; ModuleID = 'small.ll'
- %x = type i32
-
-define i32 @foo1020(i32 %in) {
-label:
- ret i32 2
-}
-; ModuleID = 'testalloca.ll'
- %inners = type { float, { i8 } }
- %struct = type { i32, %inners, i64 }
-
-define i32 @testfunction(i32 %i0, i32 %j0) {
- alloca i8, i32 5 ; <i8*>:1 [#uses=0]
- %ptr = alloca i32 ; <i32*> [#uses=2]
- store i32 3, i32* %ptr
- %val = load i32* %ptr ; <i32> [#uses=0]
- %sptr = alloca %struct ; <%struct*> [#uses=2]
- %nsptr = getelementptr %struct* %sptr, i64 0, i32 1 ; <%inners*> [#uses=1]
- %ubsptr = getelementptr %inners* %nsptr, i64 0, i32 1 ; <{ i8 }*> [#uses=1]
- %idx = getelementptr { i8 }* %ubsptr, i64 0, i32 0 ; <i8*> [#uses=1]
- store i8 4, i8* %idx
- %fptr = getelementptr %struct* %sptr, i64 0, i32 1, i32 0 ; <float*> [#uses=1]
- store float 4.000000e+00, float* %fptr
- ret i32 3
-}
-; ModuleID = 'testconstants.ll'
-@somestr3 = constant [11 x i8] c"hello world"
-@array99 = constant [2 x i32] [ i32 12, i32 52 ]
-constant { i32, i32 } { i32 4, i32 3 } ; <{ i32, i32 }*>:0 [#uses=0]
-
-define [2 x i32]* @testfunction99(i32 %i0, i32 %j0) {
- ret [2 x i32]* @array
-}
-
-define i8* @otherfunc(i32, double) {
- %somestr = getelementptr [11 x i8]* @somestr3, i64 0, i64 0 ; <i8*> [#uses=1]
- ret i8* %somestr
-}
-
-define i8* @yetanotherfunc(i32, double) {
- ret i8* null
-}
-
-define i32 @negativeUnsigned() {
- ret i32 -1
-}
-
-define i32 @largeSigned() {
- ret i32 -394967296
-}
-; ModuleID = 'testlogical.ll'
-
-define i32 @simpleAdd(i32 %i0, i32 %j0) {
- %t1 = xor i32 %i0, %j0 ; <i32> [#uses=1]
- %t2 = or i32 %i0, %j0 ; <i32> [#uses=1]
- %t3 = and i32 %t1, %t2 ; <i32> [#uses=1]
- ret i32 %t3
-}
-; ModuleID = 'testmemory.ll'
- %complexty = type { i32, { [4 x i8*], float }, double }
- %struct = type { i32, { float, { i8 } }, i64 }
-
-define i32 @main6() {
- call i32 @testfunction98( i64 0, i64 1 )
- ret i32 0
-}
-
-define i32 @testfunction98(i64 %i0, i64 %j0) {
- %array0 = malloc [4 x i8] ; <[4 x i8]*> [#uses=2]
- %size = add i32 2, 2 ; <i32> [#uses=1]
- %array1 = malloc i8, i32 4 ; <i8*> [#uses=1]
- %array2 = malloc i8, i32 %size ; <i8*> [#uses=1]
- %idx = getelementptr [4 x i8]* %array0, i64 0, i64 2 ; <i8*> [#uses=1]
- store i8 123, i8* %idx
- free [4 x i8]* %array0
- free i8* %array1
- free i8* %array2
- %aa = alloca %complexty, i32 5 ; <%complexty*> [#uses=1]
- %idx2 = getelementptr %complexty* %aa, i64 %i0, i32 1, i32 0, i64 %j0 ; <i8**> [#uses=1]
- store i8* null, i8** %idx2
- %ptr = alloca i32 ; <i32*> [#uses=2]
- store i32 3, i32* %ptr
- %val = load i32* %ptr ; <i32> [#uses=0]
- %sptr = alloca %struct ; <%struct*> [#uses=1]
- %ubsptr = getelementptr %struct* %sptr, i64 0, i32 1, i32 1 ; <{ i8 }*> [#uses=1]
- %idx3 = getelementptr { i8 }* %ubsptr, i64 0, i32 0 ; <i8*> [#uses=1]
- store i8 4, i8* %idx3
- ret i32 3
-}
-; ModuleID = 'testswitch.ll'
- %int = type i32
-
-define i32 @squared(i32 %i0) {
- switch i32 %i0, label %Default [
- i32 1, label %Case1
- i32 2, label %Case2
- i32 4, label %Case4
- ]
-
-Default: ; preds = %0
- ret i32 -1
-
-Case1: ; preds = %0
- ret i32 1
-
-Case2: ; preds = %0
- ret i32 4
-
-Case4: ; preds = %0
- ret i32 16
-}
-; ModuleID = 'testvarargs.ll'
-
-declare i32 @printf(i8*, ...)
-
-define i32 @testvarar() {
- call i32 (i8*, ...)* @printf( i8* null, i32 12, i8 42 ) ; <i32>:1 [#uses=1]
- ret i32 %1
-}
-; ModuleID = 'undefined.ll'
-@X2 = global i32 undef ; <i32*> [#uses=0]
-
-declare i32 @atoi(i8*)
-
-define i32 @test1009() {
- ret i32 undef
-}
-
-define i32 @test1003() {
- %X = add i32 undef, 1 ; <i32> [#uses=1]
- ret i32 %X
-}
-; ModuleID = 'unreachable.ll'
-
-declare void @bar()
-
-define i32 @foo1021() {
- unreachable
-}
-
-define double @xyz() {
- call void @bar( )
- unreachable
-}
-; ModuleID = 'varargs.ll'
-
-declare void @llvm.va_start(i8* %ap)
-
-declare void @llvm.va_copy(i8* %aq, i8* %ap)
-
-declare void @llvm.va_end(i8* %ap)
-
-define i32 @test1010(i32 %X, ...) {
- %ap = alloca i8* ; <i8**> [#uses=4]
- %va.upgrd.1 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
- call void @llvm.va_start( i8* %va.upgrd.1 )
- %tmp = va_arg i8** %ap, i32 ; <i32> [#uses=1]
- %aq = alloca i8* ; <i8**> [#uses=2]
- %va0.upgrd.2 = bitcast i8** %aq to i8* ; <i8*> [#uses=1]
- %va1.upgrd.3 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
- call void @llvm.va_copy( i8* %va0.upgrd.2, i8* %va1.upgrd.3 )
- %va.upgrd.4 = bitcast i8** %aq to i8* ; <i8*> [#uses=1]
- call void @llvm.va_end( i8* %va.upgrd.4 )
- %va.upgrd.5 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
- call void @llvm.va_end( i8* %va.upgrd.5 )
- ret i32 %tmp
-}
-; ModuleID = 'varargs_new.ll'
-
-declare void @llvm.va_start(i8*)
-
-declare void @llvm.va_copy(i8*, i8*)
-
-declare void @llvm.va_end(i8*)
-
-define i32 @test1011(i32 %X, ...) {
- %ap = alloca i8* ; <i8**> [#uses=4]
- %aq = alloca i8* ; <i8**> [#uses=2]
- %va.upgrd.1 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
- call void @llvm.va_start( i8* %va.upgrd.1 )
- %tmp = va_arg i8** %ap, i32 ; <i32> [#uses=1]
- %apv = load i8** %ap ; <i8*> [#uses=1]
- %va0.upgrd.2 = bitcast i8** %aq to i8* ; <i8*> [#uses=1]
- %va1.upgrd.3 = bitcast i8* %apv to i8* ; <i8*> [#uses=1]
- call void @llvm.va_copy( i8* %va0.upgrd.2, i8* %va1.upgrd.3 )
- %va.upgrd.4 = bitcast i8** %aq to i8* ; <i8*> [#uses=1]
- call void @llvm.va_end( i8* %va.upgrd.4 )
- %va.upgrd.5 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
- call void @llvm.va_end( i8* %va.upgrd.5 )
- ret i32 %tmp
-}
-; ModuleID = 'weirdnames.ll'
- "&^ " = type { i32 }
-@"%.*+ foo" = global "&^ " { i32 5 } ; <"&^ "*> [#uses=0]
-@"0" = global float 0.000000e+00 ; <float*> [#uses=0]
diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
index 68ae9a47c5a2..f193e2daddaa 100644
--- a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
+++ b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
@@ -934,7 +934,7 @@ goto find_rule; \
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 1 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
#define INITIAL 0
/*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===//
//
@@ -949,7 +949,7 @@ char *yytext;
//
//===----------------------------------------------------------------------===*/
#define YY_NEVER_INTERACTIVE 1
-#line 28 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 28 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
#include "UpgradeInternals.h"
#include "llvm/Module.h"
#include <list>
@@ -1241,7 +1241,7 @@ YY_DECL
register char *yy_cp = NULL, *yy_bp = NULL;
register int yy_act;
-#line 194 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 194 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
#line 1248 "UpgradeLexer.cpp"
@@ -1337,742 +1337,742 @@ do_action: /* This label is used only to access EOF actions. */
{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
-#line 196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 196 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ /* Ignore comments for now */ }
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 198 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 198 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return BEGINTOK; }
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 199 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 199 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ENDTOK; }
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 200 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TRUETOK; }
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 201 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return FALSETOK; }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 202 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 202 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DECLARE; }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 203 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return GLOBAL; }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 204 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CONSTANT; }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 205 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 205 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return INTERNAL; }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 206 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 206 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return LINKONCE; }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 207 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return WEAK; }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 208 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 208 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return APPENDING; }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 209 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DLLIMPORT; }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 210 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DLLEXPORT; }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 211 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 211 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERN_WEAK; }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 212 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERNAL; } /* Deprecated, turn into external */
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 213 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERNAL; }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 214 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return IMPLEMENTATION; }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 215 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 215 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ZEROINITIALIZER; }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 216 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 216 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DOTDOTDOT; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 217 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 217 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNDEF; }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 218 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NULL_TOK; }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 219 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TO; }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 220 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 220 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXCEPT; }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 221 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NOT; } /* Deprecated, turned into XOR */
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 222 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 222 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TAIL; }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 223 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TARGET; }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 224 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 224 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TRIPLE; }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 225 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DEPLIBS; }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 226 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 226 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ENDIAN; }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 227 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return POINTERSIZE; }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 228 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DATALAYOUT; }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 229 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 229 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return LITTLE; }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 230 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 230 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return BIG; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 231 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VOLATILE; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 232 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 232 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ALIGN; }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 233 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 233 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SECTION; }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 234 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return MODULE; }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 235 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ASM_TOK; }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 236 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SIDEEFFECT; }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 238 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 238 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CC_TOK; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 239 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 239 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CCC_TOK; }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 240 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 240 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CSRETCC_TOK; }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 241 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return FASTCC_TOK; }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 242 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return COLDCC_TOK; }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 243 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return X86_STDCALLCC_TOK; }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 244 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return X86_FASTCALLCC_TOK; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 246 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(SBYTE, Type::Int8Ty, 2); }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 247 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 247 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UBYTE, Type::Int8Ty, 1); }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 248 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UBYTE, Type::Int8Ty, 1); }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 249 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(SHORT, Type::Int16Ty, 2); }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 250 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(USHORT, Type::Int16Ty, 1); }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 251 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 251 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(USHORT, Type::Int16Ty, 1); }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 252 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(INT, Type::Int32Ty, 2); }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 253 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UINT, Type::Int32Ty, 1); }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 254 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 254 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UINT, Type::Int32Ty, 1); }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 255 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(LONG, Type::Int64Ty, 2); }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 256 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 256 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(ULONG, Type::Int64Ty, 1); }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 257 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(ULONG, Type::Int64Ty, 1); }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 258 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 258 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(VOID, Type::VoidTy, 0); }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 259 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(BOOL, Type::Int1Ty, 1); }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 260 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 260 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(BOOL, Type::Int1Ty, 1); }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 261 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 261 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(FLOAT, Type::FloatTy, 0); }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 262 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(DOUBLE, Type::DoubleTy,0); }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 263 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(LABEL, Type::LabelTy, 0); }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 264 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 264 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TYPE; }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 265 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OPAQUE; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 267 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 267 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AddOp, ADD); }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 268 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 268 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SubOp, SUB); }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 269 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, MulOp, MUL); }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 270 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 270 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, DivOp, DIV); }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 271 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, UDivOp, UDIV); }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 272 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 272 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SDivOp, SDIV); }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 273 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 273 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, FDivOp, FDIV); }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 274 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, RemOp, REM); }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 275 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, URemOp, UREM); }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 276 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 276 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SRemOp, SREM); }
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 277 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, FRemOp, FREM); }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 278 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AndOp, AND); }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 279 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, OrOp , OR ); }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 280 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, XorOp, XOR); }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 281 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 282 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 282 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 283 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 283 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 284 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 285 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 286 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 286 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 287 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 287 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, ShlOp, SHL); }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 288 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 288 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, ShrOp, SHR); }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 289 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 289 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, LShrOp, LSHR); }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 290 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AShrOp, ASHR); }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 292 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 292 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ICmpOp, ICMP); }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 293 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 293 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, FCmpOp, FCMP); }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 295 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EQ; }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 296 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NE; }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 297 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SLT; }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 298 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 298 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SGT; }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 299 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SLE; }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 300 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SGE; }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 301 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 301 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ULT; }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 302 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 302 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UGT; }
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 303 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ULE; }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 304 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 304 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UGE; }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 305 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 305 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OEQ; }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 306 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ONE; }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 307 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OLT; }
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 308 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 308 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OGT; }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 309 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 309 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OLE; }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 310 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 310 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OGE; }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 311 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 311 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ORD; }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 312 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNO; }
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 313 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UEQ; }
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 314 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNE; }
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 316 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, PHIOp, PHI_TOK); }
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 317 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 317 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, CallOp, CALL); }
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 318 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, CastOp, CAST); }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 319 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, TruncOp, TRUNC); }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 320 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 320 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, ZExtOp , ZEXT); }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 321 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, SExtOp, SEXT); }
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 322 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); }
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 323 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPExtOp, FPEXT); }
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 324 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 324 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPToUIOp, FPTOUI); }
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 325 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 325 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPToSIOp, FPTOSI); }
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 326 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, UIToFPOp, UITOFP); }
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 327 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, SIToFPOp, SITOFP); }
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 328 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 328 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); }
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 329 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); }
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 330 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, BitCastOp, BITCAST); }
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 331 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, SelectOp, SELECT); }
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 332 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VANEXT_old; }
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 333 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VAARG_old; }
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 334 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 334 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 335 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, RetOp, RET); }
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 336 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 336 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, BrOp, BR); }
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 337 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, SwitchOp, SWITCH); }
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 338 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 338 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, InvokeOp, INVOKE); }
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 339 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 339 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNWIND; }
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 340 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); }
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 342 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 342 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, MallocOp, MALLOC); }
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 343 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 343 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, AllocaOp, ALLOCA); }
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 344 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 344 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, FreeOp, FREE); }
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 345 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 345 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, LoadOp, LOAD); }
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 346 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, StoreOp, STORE); }
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 347 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 347 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); }
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 349 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); }
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 350 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 350 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); }
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 351 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 351 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); }
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 354 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
UnEscapeLexed(yytext+1);
Upgradelval.StrVal = strdup(yytext+1); // Skip %
@@ -2081,7 +2081,7 @@ YY_RULE_SETUP
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 359 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 359 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
yytext[strlen(yytext)-1] = 0; // nuke colon
UnEscapeLexed(yytext);
@@ -2091,7 +2091,7 @@ YY_RULE_SETUP
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 365 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 365 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
yytext[strlen(yytext)-2] = 0; // nuke colon, end quote
UnEscapeLexed(yytext+1);
@@ -2101,7 +2101,7 @@ YY_RULE_SETUP
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 372 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 372 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ // Note that we cannot unescape a string constant here! The
// string constant might contain a \00 which would not be
// understood by the string stuff. It is valid to make a
@@ -2114,12 +2114,12 @@ YY_RULE_SETUP
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 383 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 383 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 384 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 384 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
uint64_t Val = atoull(yytext+1);
// +1: we have bigger negative range
@@ -2131,7 +2131,7 @@ YY_RULE_SETUP
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 392 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 392 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
Upgradelval.UInt64Val = HexIntToVal(yytext+3);
return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
@@ -2139,7 +2139,7 @@ YY_RULE_SETUP
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 397 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 397 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
uint64_t Val = atoull(yytext+1);
if ((unsigned)Val != Val)
@@ -2150,7 +2150,7 @@ YY_RULE_SETUP
YY_BREAK
case 156:
YY_RULE_SETUP
-#line 404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 404 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
uint64_t Val = atoull(yytext+2);
// +1: we have bigger negative range
@@ -2162,16 +2162,16 @@ YY_RULE_SETUP
YY_BREAK
case 157:
YY_RULE_SETUP
-#line 413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 413 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.FPVal = atof(yytext); return FPVAL; }
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 414 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 414 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.FPVal = HexToFP(yytext); return FPVAL; }
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 416 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 416 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
/* Make sure to free the internal buffers for flex when we are
* done reading our input!
@@ -2182,17 +2182,17 @@ case YY_STATE_EOF(INITIAL):
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 424 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ /* Ignore whitespace */ }
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 425 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 425 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return yytext[0]; }
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
#line 2199 "UpgradeLexer.cpp"
@@ -3073,5 +3073,5 @@ int main()
return 0;
}
#endif
-#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l"
+#line 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
diff --git a/tools/llvm-upgrade/UpgradeParser.cpp.cvs b/tools/llvm-upgrade/UpgradeParser.cpp.cvs
index 29a733a25206..d5b95401adbf 100644
--- a/tools/llvm-upgrade/UpgradeParser.cpp.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.cpp.cvs
@@ -370,7 +370,7 @@
/* Copy the first part of user declarations. */
-#line 14 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 14 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
#include "UpgradeInternals.h"
#include "llvm/CallingConv.h"
@@ -422,6 +422,7 @@ static bool ObsoleteVarArgs;
static bool NewVarArgs;
static BasicBlock *CurBB;
static GlobalVariable *CurGV;
+static unsigned lastCallingConv;
// This contains info used when building the body of a function. It is
// destroyed when the function is completed.
@@ -740,19 +741,18 @@ static bool FuncTysDifferOnlyBySRet(const FunctionType *F1,
if (F1->getReturnType() != F2->getReturnType() ||
F1->getNumParams() != F2->getNumParams())
return false;
- ParamAttrsList PAL1;
- if (F1->getParamAttrs())
- PAL1 = *F1->getParamAttrs();
- ParamAttrsList PAL2;
- if (F2->getParamAttrs())
- PAL2 = *F2->getParamAttrs();
- if (PAL1.getParamAttrs(0) != PAL2.getParamAttrs(0))
+ const ParamAttrsList *PAL1 = F1->getParamAttrs();
+ const ParamAttrsList *PAL2 = F2->getParamAttrs();
+ if (PAL1 && !PAL2 || PAL2 && !PAL1)
+ return false;
+ if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) ||
+ (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0))))
return false;
unsigned SRetMask = ~unsigned(ParamAttr::StructRet);
for (unsigned i = 0; i < F1->getNumParams(); ++i) {
- if (F1->getParamType(i) != F2->getParamType(i) ||
- unsigned(PAL1.getParamAttrs(i+1)) & SRetMask !=
- unsigned(PAL2.getParamAttrs(i+1)) & SRetMask)
+ if (F1->getParamType(i) != F2->getParamType(i) || (PAL1 && PAL2 &&
+ (unsigned(PAL1->getParamAttrs(i+1)) & SRetMask !=
+ unsigned(PAL2->getParamAttrs(i+1)) & SRetMask)))
return false;
}
return true;
@@ -1820,6 +1820,10 @@ upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
std::vector<Value*>& Args) {
std::string Name = ID.Type == ValID::NameVal ? ID.Name : "";
+ if (Name.length() <= 5 || Name[0] != 'l' || Name[1] != 'l' ||
+ Name[2] != 'v' || Name[3] != 'm' || Name[4] != '.')
+ return 0;
+
switch (Name[5]) {
case 'i':
if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") {
@@ -2147,7 +2151,7 @@ using namespace llvm;
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1771 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1775 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
llvm::Module *ModuleVal;
llvm::Function *FunctionVal;
@@ -2190,7 +2194,7 @@ typedef union YYSTYPE {
llvm::Module::Endianness Endianness;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 2194 "UpgradeParser.tab.c"
+#line 2198 "UpgradeParser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -2202,7 +2206,7 @@ typedef union YYSTYPE {
/* Line 219 of yacc.c. */
-#line 2206 "UpgradeParser.tab.c"
+#line 2210 "UpgradeParser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
@@ -2562,38 +2566,38 @@ static const short int yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 1911, 1911, 1912, 1920, 1921, 1931, 1931, 1931, 1931,
- 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1935, 1935, 1935,
- 1939, 1939, 1939, 1939, 1939, 1939, 1943, 1943, 1944, 1944,
- 1945, 1945, 1946, 1946, 1947, 1947, 1951, 1951, 1952, 1952,
- 1953, 1953, 1954, 1954, 1955, 1955, 1956, 1956, 1957, 1957,
- 1958, 1959, 1962, 1962, 1962, 1962, 1966, 1966, 1966, 1966,
- 1966, 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, 1973,
- 1973, 1973, 1973, 1977, 1977, 1977, 1977, 1981, 1981, 1985,
- 1985, 1990, 1993, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2026,
- 2027, 2035, 2036, 2044, 2053, 2054, 2061, 2062, 2066, 2070,
- 2086, 2087, 2094, 2095, 2102, 2110, 2110, 2110, 2110, 2110,
- 2110, 2110, 2111, 2111, 2111, 2111, 2111, 2116, 2120, 2124,
- 2129, 2138, 2156, 2162, 2175, 2186, 2190, 2203, 2207, 2221,
- 2225, 2232, 2233, 2239, 2246, 2258, 2288, 2301, 2324, 2352,
- 2374, 2385, 2407, 2418, 2427, 2432, 2491, 2498, 2506, 2513,
- 2520, 2524, 2528, 2537, 2552, 2564, 2573, 2601, 2614, 2623,
- 2629, 2635, 2646, 2652, 2658, 2669, 2670, 2679, 2680, 2692,
- 2701, 2702, 2703, 2704, 2705, 2721, 2741, 2743, 2745, 2745,
- 2752, 2752, 2760, 2760, 2768, 2768, 2777, 2779, 2781, 2786,
- 2800, 2801, 2805, 2808, 2816, 2820, 2827, 2831, 2835, 2839,
- 2847, 2847, 2851, 2852, 2856, 2864, 2869, 2877, 2878, 2885,
- 2892, 2896, 3083, 3083, 3087, 3087, 3097, 3097, 3101, 3106,
- 3107, 3108, 3112, 3113, 3112, 3125, 3126, 3131, 3132, 3133,
- 3134, 3138, 3142, 3143, 3144, 3145, 3166, 3170, 3184, 3185,
- 3190, 3190, 3198, 3208, 3211, 3220, 3231, 3236, 3245, 3256,
- 3256, 3259, 3263, 3267, 3272, 3282, 3300, 3309, 3379, 3383,
- 3390, 3402, 3417, 3447, 3457, 3467, 3471, 3478, 3479, 3483,
- 3486, 3492, 3511, 3529, 3545, 3559, 3573, 3584, 3602, 3611,
- 3620, 3627, 3648, 3672, 3678, 3684, 3690, 3706, 3796, 3804,
- 3805, 3809, 3810, 3814, 3820, 3827, 3833, 3840, 3847, 3860,
- 3886
+ 0, 1915, 1915, 1916, 1924, 1925, 1935, 1935, 1935, 1935,
+ 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1939, 1939, 1939,
+ 1943, 1943, 1943, 1943, 1943, 1943, 1947, 1947, 1948, 1948,
+ 1949, 1949, 1950, 1950, 1951, 1951, 1955, 1955, 1956, 1956,
+ 1957, 1957, 1958, 1958, 1959, 1959, 1960, 1960, 1961, 1961,
+ 1962, 1963, 1966, 1966, 1966, 1966, 1970, 1970, 1970, 1970,
+ 1970, 1970, 1970, 1971, 1971, 1971, 1971, 1971, 1971, 1977,
+ 1977, 1977, 1977, 1981, 1981, 1981, 1981, 1985, 1985, 1989,
+ 1989, 1994, 1997, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+ 2009, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2030,
+ 2031, 2039, 2040, 2048, 2057, 2058, 2065, 2066, 2070, 2074,
+ 2090, 2091, 2098, 2099, 2106, 2114, 2114, 2114, 2114, 2114,
+ 2114, 2114, 2115, 2115, 2115, 2115, 2115, 2120, 2124, 2128,
+ 2133, 2142, 2169, 2175, 2188, 2199, 2203, 2216, 2220, 2234,
+ 2238, 2245, 2246, 2252, 2259, 2271, 2301, 2314, 2337, 2365,
+ 2387, 2398, 2420, 2431, 2440, 2445, 2504, 2511, 2519, 2526,
+ 2533, 2537, 2541, 2550, 2565, 2577, 2586, 2614, 2627, 2636,
+ 2642, 2648, 2659, 2665, 2671, 2682, 2683, 2692, 2693, 2705,
+ 2714, 2715, 2716, 2717, 2718, 2734, 2754, 2756, 2758, 2758,
+ 2765, 2765, 2773, 2773, 2781, 2781, 2790, 2792, 2794, 2799,
+ 2813, 2814, 2818, 2821, 2829, 2833, 2840, 2844, 2848, 2852,
+ 2860, 2860, 2864, 2865, 2869, 2877, 2882, 2890, 2891, 2898,
+ 2905, 2909, 3099, 3099, 3103, 3103, 3113, 3113, 3117, 3122,
+ 3123, 3124, 3128, 3129, 3128, 3141, 3142, 3147, 3148, 3149,
+ 3150, 3154, 3158, 3159, 3160, 3161, 3182, 3186, 3200, 3201,
+ 3206, 3206, 3214, 3224, 3227, 3236, 3247, 3252, 3261, 3272,
+ 3272, 3275, 3279, 3283, 3288, 3298, 3316, 3325, 3398, 3402,
+ 3409, 3421, 3436, 3466, 3476, 3486, 3490, 3497, 3498, 3502,
+ 3505, 3511, 3530, 3548, 3564, 3578, 3592, 3603, 3621, 3630,
+ 3639, 3646, 3667, 3691, 3697, 3703, 3709, 3725, 3818, 3826,
+ 3827, 3831, 3832, 3836, 3842, 3849, 3855, 3862, 3869, 3882,
+ 3908
};
#endif
@@ -3983,7 +3987,7 @@ yyreduce:
switch (yyn)
{
case 3:
-#line 1912 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1916 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
error("Value too large for type");
@@ -3992,7 +3996,7 @@ yyreduce:
break;
case 5:
-#line 1921 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1925 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
error("Value too large for type");
@@ -4001,240 +4005,240 @@ yyreduce:
break;
case 26:
-#line 1943 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1947 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_EQ; ;}
break;
case 27:
-#line 1943 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1947 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_NE; ;}
break;
case 28:
-#line 1944 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1948 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_SLT; ;}
break;
case 29:
-#line 1944 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1948 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_SGT; ;}
break;
case 30:
-#line 1945 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1949 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_SLE; ;}
break;
case 31:
-#line 1945 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1949 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_SGE; ;}
break;
case 32:
-#line 1946 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1950 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_ULT; ;}
break;
case 33:
-#line 1946 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1950 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_UGT; ;}
break;
case 34:
-#line 1947 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1951 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_ULE; ;}
break;
case 35:
-#line 1947 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1951 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.IPred) = ICmpInst::ICMP_UGE; ;}
break;
case 36:
-#line 1951 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1955 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_OEQ; ;}
break;
case 37:
-#line 1951 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1955 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_ONE; ;}
break;
case 38:
-#line 1952 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1956 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_OLT; ;}
break;
case 39:
-#line 1952 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1956 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_OGT; ;}
break;
case 40:
-#line 1953 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1957 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_OLE; ;}
break;
case 41:
-#line 1953 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1957 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_OGE; ;}
break;
case 42:
-#line 1954 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1958 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_ORD; ;}
break;
case 43:
-#line 1954 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1958 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_UNO; ;}
break;
case 44:
-#line 1955 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1959 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_UEQ; ;}
break;
case 45:
-#line 1955 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1959 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_UNE; ;}
break;
case 46:
-#line 1956 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1960 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_ULT; ;}
break;
case 47:
-#line 1956 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1960 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_UGT; ;}
break;
case 48:
-#line 1957 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1961 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_ULE; ;}
break;
case 49:
-#line 1957 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1961 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_UGE; ;}
break;
case 50:
-#line 1958 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1962 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_TRUE; ;}
break;
case 51:
-#line 1959 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1963 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.FPred) = FCmpInst::FCMP_FALSE; ;}
break;
case 81:
-#line 1990 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1994 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.StrVal) = (yyvsp[-1].StrVal);
;}
break;
case 82:
-#line 1993 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1997 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.StrVal) = 0;
;}
break;
case 83:
-#line 1998 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2002 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
break;
case 84:
-#line 1999 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2003 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
break;
case 85:
-#line 2000 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2004 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
break;
case 86:
-#line 2001 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2005 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
break;
case 87:
-#line 2002 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2006 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
break;
case 88:
-#line 2003 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2007 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
break;
case 89:
-#line 2004 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2008 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
break;
case 90:
-#line 2005 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2009 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
break;
case 91:
-#line 2009 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::C; ;}
+#line 2013 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
break;
case 92:
-#line 2010 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::C; ;}
+#line 2014 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;}
break;
case 93:
-#line 2011 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::CSRet; ;}
+#line 2015 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::CSRet; ;}
break;
case 94:
-#line 2012 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::Fast; ;}
+#line 2016 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Fast; ;}
break;
case 95:
-#line 2013 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::Cold; ;}
+#line 2017 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Cold; ;}
break;
case 96:
-#line 2014 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::X86_StdCall; ;}
+#line 2018 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_StdCall; ;}
break;
case 97:
-#line 2015 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
- { (yyval.UIntVal) = OldCallingConv::X86_FastCall; ;}
+#line 2019 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_FastCall; ;}
break;
case 98:
-#line 2016 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2020 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
error("Calling conv too large");
- (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+ (yyval.UIntVal) = lastCallingConv = (yyvsp[0].UInt64Val);
;}
break;
case 99:
-#line 2026 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2030 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.UIntVal) = 0; ;}
break;
case 100:
-#line 2027 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2031 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.UIntVal) = (yyvsp[0].UInt64Val);
if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -4243,12 +4247,12 @@ yyreduce:
break;
case 101:
-#line 2035 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2039 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.UIntVal) = 0; ;}
break;
case 102:
-#line 2036 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2040 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.UIntVal) = (yyvsp[0].UInt64Val);
if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -4257,7 +4261,7 @@ yyreduce:
break;
case 103:
-#line 2044 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2048 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
@@ -4267,27 +4271,27 @@ yyreduce:
break;
case 104:
-#line 2053 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2057 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.StrVal) = 0; ;}
break;
case 105:
-#line 2054 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2058 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.StrVal) = (yyvsp[0].StrVal); ;}
break;
case 106:
-#line 2061 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2065 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{;}
break;
case 107:
-#line 2062 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2066 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{;}
break;
case 108:
-#line 2066 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2070 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurGV->setSection((yyvsp[0].StrVal));
free((yyvsp[0].StrVal));
@@ -4295,7 +4299,7 @@ yyreduce:
break;
case 109:
-#line 2070 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2074 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
error("Alignment must be a power of two");
@@ -4305,7 +4309,7 @@ yyreduce:
break;
case 111:
-#line 2087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2091 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
(yyval.TypeVal).S.makeSignless();
@@ -4313,7 +4317,7 @@ yyreduce:
break;
case 113:
-#line 2095 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2099 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
(yyval.TypeVal).S.makeSignless();
@@ -4321,7 +4325,7 @@ yyreduce:
break;
case 114:
-#line 2102 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2106 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!UpRefs.empty())
error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).PAT)->getDescription());
@@ -4330,7 +4334,7 @@ yyreduce:
break;
case 127:
-#line 2116 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2120 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T);
(yyval.TypeVal).S.copy((yyvsp[0].PrimType).S);
@@ -4338,7 +4342,7 @@ yyreduce:
break;
case 128:
-#line 2120 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2124 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get());
(yyval.TypeVal).S.makeSignless();
@@ -4346,7 +4350,7 @@ yyreduce:
break;
case 129:
-#line 2124 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2128 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Named types are also simple types...
(yyval.TypeVal).S.copy(getTypeSign((yyvsp[0].ValIDVal)));
const Type* tmp = getType((yyvsp[0].ValIDVal));
@@ -4355,7 +4359,7 @@ yyreduce:
break;
case 130:
-#line 2129 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2133 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Type UpReference
if ((yyvsp[0].UInt64Val) > (uint64_t)~0U)
error("Value out of range");
@@ -4368,7 +4372,7 @@ yyreduce:
break;
case 131:
-#line 2138 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2142 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Function derived type?
(yyval.TypeVal).S.makeComposite((yyvsp[-3].TypeVal).S);
std::vector<const Type*> Params;
@@ -4380,8 +4384,17 @@ yyreduce:
bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
if (isVarArg) Params.pop_back();
+ ParamAttrsList *PAL = 0;
+ if (lastCallingConv == OldCallingConv::CSRet) {
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
+ }
+
const FunctionType *FTy =
- FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, 0);
+ FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, PAL);
(yyval.TypeVal).PAT = new PATypeHolder( HandleUpRefs(FTy, (yyval.TypeVal).S) );
delete (yyvsp[-3].TypeVal).PAT; // Delete the return type handle
@@ -4390,7 +4403,7 @@ yyreduce:
break;
case 132:
-#line 2156 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2169 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Sized array type?
(yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S);
(yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).PAT->get(),
@@ -4400,7 +4413,7 @@ yyreduce:
break;
case 133:
-#line 2162 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2175 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Vector type?
const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).PAT->get();
if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
@@ -4417,7 +4430,7 @@ yyreduce:
break;
case 134:
-#line 2175 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2188 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Structure type?
std::vector<const Type*> Elements;
(yyval.TypeVal).S.makeComposite();
@@ -4432,7 +4445,7 @@ yyreduce:
break;
case 135:
-#line 2186 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2199 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Empty structure type?
(yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector<const Type*>()));
(yyval.TypeVal).S.makeComposite();
@@ -4440,7 +4453,7 @@ yyreduce:
break;
case 136:
-#line 2190 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2203 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Packed Structure type?
(yyval.TypeVal).S.makeComposite();
std::vector<const Type*> Elements;
@@ -4457,7 +4470,7 @@ yyreduce:
break;
case 137:
-#line 2203 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2216 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Empty packed structure type?
(yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector<const Type*>(),true));
(yyval.TypeVal).S.makeComposite();
@@ -4465,7 +4478,7 @@ yyreduce:
break;
case 138:
-#line 2207 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2220 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Pointer type?
if ((yyvsp[-1].TypeVal).PAT->get() == Type::LabelTy)
error("Cannot form a pointer to a basic block");
@@ -4477,7 +4490,7 @@ yyreduce:
break;
case 139:
-#line 2221 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2234 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeList) = new std::list<PATypeInfo>();
(yyval.TypeList)->push_back((yyvsp[0].TypeVal));
@@ -4485,14 +4498,14 @@ yyreduce:
break;
case 140:
-#line 2225 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2238 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal));
;}
break;
case 142:
-#line 2233 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2246 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
PATypeInfo VoidTI;
VoidTI.PAT = new PATypeHolder(Type::VoidTy);
@@ -4502,7 +4515,7 @@ yyreduce:
break;
case 143:
-#line 2239 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeList) = new std::list<PATypeInfo>();
PATypeInfo VoidTI;
@@ -4513,14 +4526,14 @@ yyreduce:
break;
case 144:
-#line 2246 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2259 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TypeList) = new std::list<PATypeInfo>();
;}
break;
case 145:
-#line 2258 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2271 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal).PAT->get());
if (ATy == 0)
@@ -4554,7 +4567,7 @@ yyreduce:
break;
case 146:
-#line 2288 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2301 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
if (ATy == 0)
@@ -4571,7 +4584,7 @@ yyreduce:
break;
case 147:
-#line 2301 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2314 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).PAT->get());
if (ATy == 0)
@@ -4598,7 +4611,7 @@ yyreduce:
break;
case 148:
-#line 2324 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2337 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal).PAT->get());
if (PTy == 0)
@@ -4630,7 +4643,7 @@ yyreduce:
break;
case 149:
-#line 2352 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2365 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).PAT->get());
if (STy == 0)
@@ -4656,7 +4669,7 @@ yyreduce:
break;
case 150:
-#line 2374 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2387 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).PAT->get());
if (STy == 0)
@@ -4671,7 +4684,7 @@ yyreduce:
break;
case 151:
-#line 2385 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2398 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal).PAT->get());
if (STy == 0)
@@ -4697,7 +4710,7 @@ yyreduce:
break;
case 152:
-#line 2407 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2420 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal).PAT->get());
if (STy == 0)
@@ -4712,7 +4725,7 @@ yyreduce:
break;
case 153:
-#line 2418 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2431 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
if (PTy == 0)
@@ -4725,7 +4738,7 @@ yyreduce:
break;
case 154:
-#line 2427 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2440 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).PAT->get());
(yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S);
@@ -4734,7 +4747,7 @@ yyreduce:
break;
case 155:
-#line 2432 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2445 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
if (Ty == 0)
@@ -4797,7 +4810,7 @@ yyreduce:
break;
case 156:
-#line 2491 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2504 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-1].TypeVal).PAT->get() != (yyvsp[0].ConstVal).C->getType())
error("Mismatched types for constant expression");
@@ -4808,7 +4821,7 @@ yyreduce:
break;
case 157:
-#line 2498 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2511 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
@@ -4820,7 +4833,7 @@ yyreduce:
break;
case 158:
-#line 2506 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2519 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
const Type *Ty = (yyvsp[-1].PrimType).T;
if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val)))
@@ -4831,7 +4844,7 @@ yyreduce:
break;
case 159:
-#line 2513 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2526 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
const Type *Ty = (yyvsp[-1].PrimType).T;
if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val)))
@@ -4842,7 +4855,7 @@ yyreduce:
break;
case 160:
-#line 2520 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2533 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true);
(yyval.ConstVal).S.makeUnsigned();
@@ -4850,7 +4863,7 @@ yyreduce:
break;
case 161:
-#line 2524 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2537 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false);
(yyval.ConstVal).S.makeUnsigned();
@@ -4858,7 +4871,7 @@ yyreduce:
break;
case 162:
-#line 2528 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2541 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Float & Double constants
if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal)))
error("Floating point constant invalid for type");
@@ -4868,7 +4881,7 @@ yyreduce:
break;
case 163:
-#line 2537 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2550 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType();
const Type* DstTy = (yyvsp[-1].TypeVal).PAT->get();
@@ -4887,7 +4900,7 @@ yyreduce:
break;
case 164:
-#line 2552 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2565 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-2].ConstVal).C->getType();
if (!isa<PointerType>(Ty))
@@ -4903,7 +4916,7 @@ yyreduce:
break;
case 165:
-#line 2564 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2577 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() ||
cast<IntegerType>((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1)
@@ -4916,7 +4929,7 @@ yyreduce:
break;
case 166:
-#line 2573 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2586 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-3].ConstVal).C->getType();
if (Ty != (yyvsp[-1].ConstVal).C->getType())
@@ -4948,7 +4961,7 @@ yyreduce:
break;
case 167:
-#line 2601 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2614 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
if (Ty != (yyvsp[-1].ConstVal).C->getType())
@@ -4965,7 +4978,7 @@ yyreduce:
break;
case 168:
-#line 2614 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2627 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* Ty = (yyvsp[-3].ConstVal).C->getType();
if (Ty != (yyvsp[-1].ConstVal).C->getType())
@@ -4978,7 +4991,7 @@ yyreduce:
break;
case 169:
-#line 2623 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2636 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
error("icmp operand types must match");
@@ -4988,7 +5001,7 @@ yyreduce:
break;
case 170:
-#line 2629 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2642 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType())
error("fcmp operand types must match");
@@ -4998,7 +5011,7 @@ yyreduce:
break;
case 171:
-#line 2635 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2648 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() ||
cast<IntegerType>((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8)
@@ -5013,7 +5026,7 @@ yyreduce:
break;
case 172:
-#line 2646 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2659 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
error("Invalid extractelement operands");
@@ -5023,7 +5036,7 @@ yyreduce:
break;
case 173:
-#line 2652 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2665 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
error("Invalid insertelement operands");
@@ -5033,7 +5046,7 @@ yyreduce:
break;
case 174:
-#line 2658 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2671 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C))
error("Invalid shufflevector operands");
@@ -5043,12 +5056,12 @@ yyreduce:
break;
case 175:
-#line 2669 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2682 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;}
break;
case 176:
-#line 2670 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2683 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ConstVector) = new std::vector<ConstInfo>();
(yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
@@ -5056,17 +5069,17 @@ yyreduce:
break;
case 177:
-#line 2679 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2692 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = false; ;}
break;
case 178:
-#line 2680 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2693 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = true; ;}
break;
case 179:
-#line 2692 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2705 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
CurModule.ModuleDone();
@@ -5074,27 +5087,27 @@ yyreduce:
break;
case 180:
-#line 2701 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2714 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;}
break;
case 181:
-#line 2702 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2715 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
break;
case 182:
-#line 2703 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2716 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;}
break;
case 183:
-#line 2704 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2717 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;}
break;
case 184:
-#line 2705 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2718 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ModuleVal) = CurModule.CurrentModule;
// Emit an error if there are any unresolved types left.
@@ -5110,7 +5123,7 @@ yyreduce:
break;
case 185:
-#line 2721 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2734 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
// Eagerly resolve types. This is not an optimization, this is a
// requirement that is due to the fact that we could have this:
@@ -5134,19 +5147,19 @@ yyreduce:
break;
case 186:
-#line 2741 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2754 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Function prototypes can be in const pool
;}
break;
case 187:
-#line 2743 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2756 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Asm blocks can be in the const pool
;}
break;
case 188:
-#line 2745 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2758 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].ConstVal).C == 0)
error("Global value initializer is not a constant");
@@ -5155,14 +5168,14 @@ yyreduce:
break;
case 189:
-#line 2749 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2762 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurGV = 0;
;}
break;
case 190:
-#line 2752 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2765 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0,
@@ -5172,14 +5185,14 @@ yyreduce:
break;
case 191:
-#line 2757 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2770 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurGV = 0;
;}
break;
case 192:
-#line 2760 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2773 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0,
@@ -5189,14 +5202,14 @@ yyreduce:
break;
case 193:
-#line 2765 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2778 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurGV = 0;
;}
break;
case 194:
-#line 2768 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2781 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
CurGV =
@@ -5207,32 +5220,32 @@ yyreduce:
break;
case 195:
-#line 2774 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2787 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurGV = 0;
;}
break;
case 196:
-#line 2777 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2790 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
;}
break;
case 197:
-#line 2779 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2792 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
;}
break;
case 198:
-#line 2781 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2794 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
;}
break;
case 199:
-#line 2786 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2799 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
@@ -5247,24 +5260,24 @@ yyreduce:
break;
case 200:
-#line 2800 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2813 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Endianness) = Module::BigEndian; ;}
break;
case 201:
-#line 2801 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2814 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Endianness) = Module::LittleEndian; ;}
break;
case 202:
-#line 2805 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2818 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurModule.setEndianness((yyvsp[0].Endianness));
;}
break;
case 203:
-#line 2808 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2821 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].UInt64Val) == 32)
CurModule.setPointerSize(Module::Pointer32);
@@ -5276,7 +5289,7 @@ yyreduce:
break;
case 204:
-#line 2816 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2829 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
free((yyvsp[0].StrVal));
@@ -5284,7 +5297,7 @@ yyreduce:
break;
case 205:
-#line 2820 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2833 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
free((yyvsp[0].StrVal));
@@ -5292,7 +5305,7 @@ yyreduce:
break;
case 207:
-#line 2831 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2844 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
free((yyvsp[0].StrVal));
@@ -5300,7 +5313,7 @@ yyreduce:
break;
case 208:
-#line 2835 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2848 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
free((yyvsp[0].StrVal));
@@ -5308,17 +5321,17 @@ yyreduce:
break;
case 209:
-#line 2839 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2852 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ ;}
break;
case 213:
-#line 2852 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2865 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.StrVal) = 0; ;}
break;
case 214:
-#line 2856 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2869 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-1].TypeVal).PAT->get() == Type::VoidTy)
error("void typed arguments are invalid");
@@ -5327,7 +5340,7 @@ yyreduce:
break;
case 215:
-#line 2864 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2877 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ArgList) = (yyvsp[-2].ArgList);
(yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -5336,7 +5349,7 @@ yyreduce:
break;
case 216:
-#line 2869 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2882 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
(yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -5345,12 +5358,12 @@ yyreduce:
break;
case 217:
-#line 2877 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2890 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ArgList) = (yyvsp[0].ArgList); ;}
break;
case 218:
-#line 2878 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2891 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ArgList) = (yyvsp[-2].ArgList);
PATypeInfo VoidTI;
@@ -5361,7 +5374,7 @@ yyreduce:
break;
case 219:
-#line 2885 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2898 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ArgList) = new std::vector<std::pair<PATypeInfo,char*> >();
PATypeInfo VoidTI;
@@ -5372,12 +5385,12 @@ yyreduce:
break;
case 220:
-#line 2892 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2905 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ArgList) = 0; ;}
break;
case 221:
-#line 2896 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 2909 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
UnEscapeLexed((yyvsp[-5].StrVal));
std::string FunctionName((yyvsp[-5].StrVal));
@@ -5415,15 +5428,17 @@ yyreduce:
// Convert the CSRet calling convention into the corresponding parameter
// attribute.
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ((yyvsp[-7].UIntVal) == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first arg
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
const FunctionType *FT =
- FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs);
+ FunctionType::get(RetTy, ParamTyList, isVarArg, PAL);
const PointerType *PFT = PointerType::get(FT);
delete (yyvsp[-6].TypeVal).PAT;
@@ -5561,16 +5576,17 @@ yyreduce:
}
delete (yyvsp[-3].ArgList); // We're now done with the argument list
}
+ lastCallingConv = OldCallingConv::C;
;}
break;
case 224:
-#line 3087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3103 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ CurFun.Linkage = (yyvsp[0].Linkage); ;}
break;
case 225:
-#line 3087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3103 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.FunctionVal) = CurFun.CurrentFunction;
@@ -5581,39 +5597,39 @@ yyreduce:
break;
case 228:
-#line 3101 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3117 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
;}
break;
case 229:
-#line 3106 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3122 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
break;
case 230:
-#line 3107 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3123 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
break;
case 231:
-#line 3108 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3124 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
break;
case 232:
-#line 3112 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3128 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ CurFun.isDeclare = true; ;}
break;
case 233:
-#line 3113 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3129 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ CurFun.Linkage = (yyvsp[0].Linkage); ;}
break;
case 234:
-#line 3113 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3129 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.FunctionVal) = CurFun.CurrentFunction;
CurFun.FunctionDone();
@@ -5622,32 +5638,32 @@ yyreduce:
break;
case 235:
-#line 3125 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3141 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = false; ;}
break;
case 236:
-#line 3126 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3142 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = true; ;}
break;
case 237:
-#line 3131 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3147 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;}
break;
case 238:
-#line 3132 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3148 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;}
break;
case 239:
-#line 3133 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3149 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;}
break;
case 240:
-#line 3134 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3150 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true));
(yyval.ValIDVal).S.makeUnsigned();
@@ -5655,7 +5671,7 @@ yyreduce:
break;
case 241:
-#line 3138 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3154 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false));
(yyval.ValIDVal).S.makeUnsigned();
@@ -5663,22 +5679,22 @@ yyreduce:
break;
case 242:
-#line 3142 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3158 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::createNull(); ;}
break;
case 243:
-#line 3143 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3159 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::createUndef(); ;}
break;
case 244:
-#line 3144 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3160 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::createZeroInit(); ;}
break;
case 245:
-#line 3145 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3161 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized packed vector
const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType();
int NumElements = (yyvsp[-1].ConstVector)->size();
@@ -5703,7 +5719,7 @@ yyreduce:
break;
case 246:
-#line 3166 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3182 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C);
(yyval.ValIDVal).S.copy((yyvsp[0].ConstVal).S);
@@ -5711,7 +5727,7 @@ yyreduce:
break;
case 247:
-#line 3170 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3186 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
@@ -5724,17 +5740,17 @@ yyreduce:
break;
case 248:
-#line 3184 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3200 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;}
break;
case 249:
-#line 3185 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3201 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;}
break;
case 252:
-#line 3198 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3214 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
(yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
@@ -5745,21 +5761,21 @@ yyreduce:
break;
case 253:
-#line 3208 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3224 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
;}
break;
case 254:
-#line 3211 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3227 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Do not allow functions with 0 basic blocks
(yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
;}
break;
case 255:
-#line 3220 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3236 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
ValueInfo VI; VI.V = (yyvsp[0].TermInstVal).TI; VI.S.copy((yyvsp[0].TermInstVal).S);
setValueName(VI, (yyvsp[-1].StrVal));
@@ -5771,7 +5787,7 @@ yyreduce:
break;
case 256:
-#line 3231 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3247 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[0].InstVal).I)
(yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I);
@@ -5780,7 +5796,7 @@ yyreduce:
break;
case 257:
-#line 3236 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true);
// Make sure to move the basic block to the correct location in the
@@ -5793,7 +5809,7 @@ yyreduce:
break;
case 258:
-#line 3245 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3261 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
// Make sure to move the basic block to the correct location in the
@@ -5806,7 +5822,7 @@ yyreduce:
break;
case 261:
-#line 3259 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3275 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with a result...
(yyval.TermInstVal).TI = new ReturnInst((yyvsp[0].ValueVal).V);
(yyval.TermInstVal).S.makeSignless();
@@ -5814,7 +5830,7 @@ yyreduce:
break;
case 262:
-#line 3263 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3279 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with no result...
(yyval.TermInstVal).TI = new ReturnInst();
(yyval.TermInstVal).S.makeSignless();
@@ -5822,7 +5838,7 @@ yyreduce:
break;
case 263:
-#line 3267 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3283 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Unconditional Branch...
BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
(yyval.TermInstVal).TI = new BranchInst(tmpBB);
@@ -5831,7 +5847,7 @@ yyreduce:
break;
case 264:
-#line 3272 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3288 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-3].ValIDVal).S.makeSignless();
(yyvsp[0].ValIDVal).S.makeSignless();
@@ -5845,7 +5861,7 @@ yyreduce:
break;
case 265:
-#line 3282 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3298 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-6].ValIDVal).S.copy((yyvsp[-7].PrimType).S);
Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal));
@@ -5867,7 +5883,7 @@ yyreduce:
break;
case 266:
-#line 3300 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3316 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-5].ValIDVal).S.copy((yyvsp[-6].PrimType).S);
Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal));
@@ -5880,7 +5896,7 @@ yyreduce:
break;
case 267:
-#line 3310 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3326 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const PointerType *PFTy;
const FunctionType *Ty;
@@ -5898,15 +5914,17 @@ yyreduce:
FTySign.add(I->S);
}
}
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ((yyvsp[-11].UIntVal) == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // Function result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first param
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
if (isVarArg) ParamTypes.pop_back();
- Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, ParamAttrs);
+ Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, PAL);
PFTy = PointerType::get(Ty);
(yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S);
} else {
@@ -5949,11 +5967,12 @@ yyreduce:
cast<InvokeInst>((yyval.TermInstVal).TI)->setCallingConv(upgradeCallingConv((yyvsp[-11].UIntVal)));
delete (yyvsp[-10].TypeVal).PAT;
delete (yyvsp[-7].ValueList);
+ lastCallingConv = OldCallingConv::C;
;}
break;
case 268:
-#line 3379 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3398 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TermInstVal).TI = new UnwindInst();
(yyval.TermInstVal).S.makeSignless();
@@ -5961,7 +5980,7 @@ yyreduce:
break;
case 269:
-#line 3383 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3402 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.TermInstVal).TI = new UnreachableInst();
(yyval.TermInstVal).S.makeSignless();
@@ -5969,7 +5988,7 @@ yyreduce:
break;
case 270:
-#line 3390 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3409 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.JumpTable) = (yyvsp[-5].JumpTable);
(yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S);
@@ -5985,7 +6004,7 @@ yyreduce:
break;
case 271:
-#line 3402 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3421 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
(yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S);
@@ -6001,7 +6020,7 @@ yyreduce:
break;
case 272:
-#line 3417 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3436 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
bool omit = false;
if ((yyvsp[-1].StrVal))
@@ -6034,7 +6053,7 @@ yyreduce:
break;
case 273:
-#line 3447 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3466 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Used for PHI nodes
(yyval.PHIList).P = new std::list<std::pair<Value*, BasicBlock*> >();
(yyval.PHIList).S.copy((yyvsp[-5].TypeVal).S);
@@ -6048,7 +6067,7 @@ yyreduce:
break;
case 274:
-#line 3457 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3476 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.PHIList) = (yyvsp[-6].PHIList);
(yyvsp[-3].ValIDVal).S.copy((yyvsp[-6].PHIList).S);
@@ -6060,7 +6079,7 @@ yyreduce:
break;
case 275:
-#line 3467 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3486 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ // Used for call statements, and memory insts...
(yyval.ValueList) = new std::vector<ValueInfo>();
(yyval.ValueList)->push_back((yyvsp[0].ValueVal));
@@ -6068,7 +6087,7 @@ yyreduce:
break;
case 276:
-#line 3471 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3490 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.ValueList) = (yyvsp[-2].ValueList);
(yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
@@ -6076,26 +6095,26 @@ yyreduce:
break;
case 278:
-#line 3479 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3498 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValueList) = 0; ;}
break;
case 279:
-#line 3483 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3502 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.BoolVal) = true;
;}
break;
case 280:
-#line 3486 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3505 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.BoolVal) = false;
;}
break;
case 281:
-#line 3492 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3511 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
(yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
@@ -6118,7 +6137,7 @@ yyreduce:
break;
case 282:
-#line 3511 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3530 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
(yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
@@ -6140,7 +6159,7 @@ yyreduce:
break;
case 283:
-#line 3529 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3548 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
(yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
@@ -6160,7 +6179,7 @@ yyreduce:
break;
case 284:
-#line 3545 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3564 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
(yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
@@ -6178,7 +6197,7 @@ yyreduce:
break;
case 285:
-#line 3559 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3578 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
(yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S);
@@ -6196,7 +6215,7 @@ yyreduce:
break;
case 286:
-#line 3573 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3592 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
warning("Use of obsolete 'not' instruction: Replacing with 'xor");
const Type *Ty = (yyvsp[0].ValueVal).V->getType();
@@ -6211,7 +6230,7 @@ yyreduce:
break;
case 287:
-#line 3584 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3603 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[0].ValueVal).V->getType()->isInteger() ||
cast<IntegerType>((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8)
@@ -6233,7 +6252,7 @@ yyreduce:
break;
case 288:
-#line 3602 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3621 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *DstTy = (yyvsp[0].TypeVal).PAT->get();
if (!DstTy->isFirstClassType())
@@ -6246,7 +6265,7 @@ yyreduce:
break;
case 289:
-#line 3611 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3630 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() ||
cast<IntegerType>((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1)
@@ -6259,7 +6278,7 @@ yyreduce:
break;
case 290:
-#line 3620 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3639 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[0].TypeVal).PAT->get();
NewVarArgs = true;
@@ -6270,7 +6289,7 @@ yyreduce:
break;
case 291:
-#line 3627 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3646 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
const Type* DstTy = (yyvsp[0].TypeVal).PAT->get();
@@ -6295,7 +6314,7 @@ yyreduce:
break;
case 292:
-#line 3648 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3667 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType();
const Type* DstTy = (yyvsp[0].TypeVal).PAT->get();
@@ -6323,7 +6342,7 @@ yyreduce:
break;
case 293:
-#line 3672 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3691 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
error("Invalid extractelement operands");
@@ -6333,7 +6352,7 @@ yyreduce:
break;
case 294:
-#line 3678 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3697 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
error("Invalid insertelement operands");
@@ -6343,7 +6362,7 @@ yyreduce:
break;
case 295:
-#line 3684 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3703 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V))
error("Invalid shufflevector operands");
@@ -6353,7 +6372,7 @@ yyreduce:
break;
case 296:
-#line 3690 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3709 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType();
if (!Ty->isFirstClassType())
@@ -6373,7 +6392,7 @@ yyreduce:
break;
case 297:
-#line 3706 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3725 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
// Handle the short call syntax
const PointerType *PFTy;
@@ -6400,14 +6419,16 @@ yyreduce:
error("Functions cannot return aggregate types");
// Deal with CSRetCC
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ((yyvsp[-5].UIntVal) == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // function result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first parameter
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
- FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs);
+ FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL);
PFTy = PointerType::get(FTy);
(yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S);
} else {
@@ -6463,38 +6484,39 @@ yyreduce:
}
delete (yyvsp[-4].TypeVal).PAT;
delete (yyvsp[-1].ValueList);
+ lastCallingConv = OldCallingConv::C;
;}
break;
case 298:
-#line 3796 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3818 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.InstVal) = (yyvsp[0].InstVal);
;}
break;
case 299:
-#line 3804 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3826 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValueList) = (yyvsp[0].ValueList); ;}
break;
case 300:
-#line 3805 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3827 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.ValueList) = new std::vector<ValueInfo>(); ;}
break;
case 301:
-#line 3809 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3831 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = true; ;}
break;
case 302:
-#line 3810 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3832 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.BoolVal) = false; ;}
break;
case 303:
-#line 3814 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3836 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
(yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S);
@@ -6504,7 +6526,7 @@ yyreduce:
break;
case 304:
-#line 3820 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3842 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-4].TypeVal).PAT->get();
(yyvsp[-1].ValIDVal).S.makeUnsigned();
@@ -6515,7 +6537,7 @@ yyreduce:
break;
case 305:
-#line 3827 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3849 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-1].TypeVal).PAT->get();
(yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S);
@@ -6525,7 +6547,7 @@ yyreduce:
break;
case 306:
-#line 3833 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3855 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *Ty = (yyvsp[-4].TypeVal).PAT->get();
(yyvsp[-1].ValIDVal).S.makeUnsigned();
@@ -6536,7 +6558,7 @@ yyreduce:
break;
case 307:
-#line 3840 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3862 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type *PTy = (yyvsp[0].ValueVal).V->getType();
if (!isa<PointerType>(PTy))
@@ -6547,7 +6569,7 @@ yyreduce:
break;
case 308:
-#line 3847 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3869 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
const Type* Ty = (yyvsp[-1].TypeVal).PAT->get();
(yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
@@ -6564,7 +6586,7 @@ yyreduce:
break;
case 309:
-#line 3860 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3882 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S);
const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).PAT->get());
@@ -6594,7 +6616,7 @@ yyreduce:
break;
case 310:
-#line 3886 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3908 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].ValIDVal).S.copy((yyvsp[-2].TypeVal).S);
const Type* Ty = (yyvsp[-2].TypeVal).PAT->get();
@@ -6618,7 +6640,7 @@ yyreduce:
}
/* Line 1126 of yacc.c. */
-#line 6622 "UpgradeParser.tab.c"
+#line 6644 "UpgradeParser.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -6886,7 +6908,7 @@ yyreturn:
}
-#line 3904 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 3926 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
int yyerror(const char *ErrorMsg) {
diff --git a/tools/llvm-upgrade/UpgradeParser.h.cvs b/tools/llvm-upgrade/UpgradeParser.h.cvs
index a96144201c76..b79ac643e326 100644
--- a/tools/llvm-upgrade/UpgradeParser.h.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.h.cvs
@@ -335,7 +335,7 @@
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1771 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y"
+#line 1775 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
llvm::Module *ModuleVal;
llvm::Function *FunctionVal;
diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs
index 02f4cae685ec..ed84267d08a5 100644
--- a/tools/llvm-upgrade/UpgradeParser.y.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.y.cvs
@@ -62,6 +62,7 @@ static bool ObsoleteVarArgs;
static bool NewVarArgs;
static BasicBlock *CurBB;
static GlobalVariable *CurGV;
+static unsigned lastCallingConv;
// This contains info used when building the body of a function. It is
// destroyed when the function is completed.
@@ -380,19 +381,18 @@ static bool FuncTysDifferOnlyBySRet(const FunctionType *F1,
if (F1->getReturnType() != F2->getReturnType() ||
F1->getNumParams() != F2->getNumParams())
return false;
- ParamAttrsList PAL1;
- if (F1->getParamAttrs())
- PAL1 = *F1->getParamAttrs();
- ParamAttrsList PAL2;
- if (F2->getParamAttrs())
- PAL2 = *F2->getParamAttrs();
- if (PAL1.getParamAttrs(0) != PAL2.getParamAttrs(0))
+ const ParamAttrsList *PAL1 = F1->getParamAttrs();
+ const ParamAttrsList *PAL2 = F2->getParamAttrs();
+ if (PAL1 && !PAL2 || PAL2 && !PAL1)
+ return false;
+ if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) ||
+ (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0))))
return false;
unsigned SRetMask = ~unsigned(ParamAttr::StructRet);
for (unsigned i = 0; i < F1->getNumParams(); ++i) {
- if (F1->getParamType(i) != F2->getParamType(i) ||
- unsigned(PAL1.getParamAttrs(i+1)) & SRetMask !=
- unsigned(PAL2.getParamAttrs(i+1)) & SRetMask)
+ if (F1->getParamType(i) != F2->getParamType(i) || (PAL1 && PAL2 &&
+ (unsigned(PAL1->getParamAttrs(i+1)) & SRetMask !=
+ unsigned(PAL2->getParamAttrs(i+1)) & SRetMask)))
return false;
}
return true;
@@ -1460,6 +1460,10 @@ upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
std::vector<Value*>& Args) {
std::string Name = ID.Type == ValID::NameVal ? ID.Name : "";
+ if (Name.length() <= 5 || Name[0] != 'l' || Name[1] != 'l' ||
+ Name[2] != 'v' || Name[3] != 'm' || Name[4] != '.')
+ return 0;
+
switch (Name[5]) {
case 'i':
if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") {
@@ -2006,17 +2010,17 @@ OptLinkage
;
OptCallingConv
- : /*empty*/ { $$ = OldCallingConv::C; }
- | CCC_TOK { $$ = OldCallingConv::C; }
- | CSRETCC_TOK { $$ = OldCallingConv::CSRet; }
- | FASTCC_TOK { $$ = OldCallingConv::Fast; }
- | COLDCC_TOK { $$ = OldCallingConv::Cold; }
- | X86_STDCALLCC_TOK { $$ = OldCallingConv::X86_StdCall; }
- | X86_FASTCALLCC_TOK { $$ = OldCallingConv::X86_FastCall; }
+ : /*empty*/ { $$ = lastCallingConv = OldCallingConv::C; }
+ | CCC_TOK { $$ = lastCallingConv = OldCallingConv::C; }
+ | CSRETCC_TOK { $$ = lastCallingConv = OldCallingConv::CSRet; }
+ | FASTCC_TOK { $$ = lastCallingConv = OldCallingConv::Fast; }
+ | COLDCC_TOK { $$ = lastCallingConv = OldCallingConv::Cold; }
+ | X86_STDCALLCC_TOK { $$ = lastCallingConv = OldCallingConv::X86_StdCall; }
+ | X86_FASTCALLCC_TOK { $$ = lastCallingConv = OldCallingConv::X86_FastCall; }
| CC_TOK EUINT64VAL {
if ((unsigned)$2 != $2)
error("Calling conv too large");
- $$ = $2;
+ $$ = lastCallingConv = $2;
}
;
@@ -2146,8 +2150,17 @@ UpRTypes
bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
if (isVarArg) Params.pop_back();
+ ParamAttrsList *PAL = 0;
+ if (lastCallingConv == OldCallingConv::CSRet) {
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
+ }
+
const FunctionType *FTy =
- FunctionType::get($1.PAT->get(), Params, isVarArg, 0);
+ FunctionType::get($1.PAT->get(), Params, isVarArg, PAL);
$$.PAT = new PATypeHolder( HandleUpRefs(FTy, $$.S) );
delete $1.PAT; // Delete the return type handle
@@ -2930,15 +2943,17 @@ FunctionHeaderH
// Convert the CSRet calling convention into the corresponding parameter
// attribute.
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ($1 == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first arg
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
const FunctionType *FT =
- FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs);
+ FunctionType::get(RetTy, ParamTyList, isVarArg, PAL);
const PointerType *PFT = PointerType::get(FT);
delete $2.PAT;
@@ -3076,6 +3091,7 @@ FunctionHeaderH
}
delete $5; // We're now done with the argument list
}
+ lastCallingConv = OldCallingConv::C;
}
;
@@ -3324,15 +3340,17 @@ BBTerminatorInst
FTySign.add(I->S);
}
}
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ($2 == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // Function result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first param
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
if (isVarArg) ParamTypes.pop_back();
- Ty = FunctionType::get($3.PAT->get(), ParamTypes, isVarArg, ParamAttrs);
+ Ty = FunctionType::get($3.PAT->get(), ParamTypes, isVarArg, PAL);
PFTy = PointerType::get(Ty);
$$.S.copy($3.S);
} else {
@@ -3375,6 +3393,7 @@ BBTerminatorInst
cast<InvokeInst>($$.TI)->setCallingConv(upgradeCallingConv($2));
delete $3.PAT;
delete $6;
+ lastCallingConv = OldCallingConv::C;
}
| Unwind {
$$.TI = new UnwindInst();
@@ -3729,14 +3748,16 @@ InstVal
error("Functions cannot return aggregate types");
// Deal with CSRetCC
- ParamAttrsList *ParamAttrs = 0;
+ ParamAttrsList *PAL = 0;
if ($2 == OldCallingConv::CSRet) {
- ParamAttrs = new ParamAttrsList();
- ParamAttrs->addAttributes(0, ParamAttr::None); // function result
- ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first parameter
+ ParamAttrsVector Attrs;
+ ParamAttrsWithIndex PAWI;
+ PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg
+ Attrs.push_back(PAWI);
+ PAL = ParamAttrsList::get(Attrs);
}
- FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs);
+ FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL);
PFTy = PointerType::get(FTy);
$$.S.copy($3.S);
} else {
@@ -3792,6 +3813,7 @@ InstVal
}
delete $3.PAT;
delete $6;
+ lastCallingConv = OldCallingConv::C;
}
| MemoryInst {
$$ = $1;
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index e10558ef726f..51f9519f5f45 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -3678,11 +3678,12 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) {
// Emit boilerplate.
OS << "SDNode *Select_INLINEASM(SDOperand N) {\n"
<< " std::vector<SDOperand> Ops(N.Val->op_begin(), N.Val->op_end());\n"
- << " AddToISelQueue(N.getOperand(0)); // Select the chain.\n\n"
- << " // Select the flag operand.\n"
- << " if (Ops.back().getValueType() == MVT::Flag)\n"
- << " AddToISelQueue(Ops.back());\n"
- << " SelectInlineAsmMemoryOperands(Ops, *CurDAG);\n"
+ << " SelectInlineAsmMemoryOperands(Ops, *CurDAG);\n\n"
+
+ << " // Ensure that the asm operands are themselves selected.\n"
+ << " for (unsigned j = 0, e = Ops.size(); j != e; ++j)\n"
+ << " AddToISelQueue(Ops[j]);\n\n"
+
<< " std::vector<MVT::ValueType> VTs;\n"
<< " VTs.push_back(MVT::Other);\n"
<< " VTs.push_back(MVT::Flag);\n"
@@ -3718,6 +3719,7 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) {
<< " case ISD::TargetConstant:\n"
<< " case ISD::TargetConstantPool:\n"
<< " case ISD::TargetFrameIndex:\n"
+ << " case ISD::TargetExternalSymbol:\n"
<< " case ISD::TargetJumpTable:\n"
<< " case ISD::TargetGlobalTLSAddress:\n"
<< " case ISD::TargetGlobalAddress: {\n"