Compare commits

...

26 Commits

Author SHA1 Message Date
Tanya Lattner
858bfdcf84 Merging from mainline
llvm-svn: 31872
2006-11-20 06:07:46 +00:00
Tanya Lattner
76e76afab4 Merging from mainline
llvm-svn: 31868
2006-11-20 05:20:40 +00:00
Tanya Lattner
bb869226b8 Merging from mainline
llvm-svn: 31718
2006-11-14 01:43:40 +00:00
Tanya Lattner
3b2ea9b062 Updating configure script
llvm-svn: 31714
2006-11-14 00:56:51 +00:00
Reid Spencer
b5b06cce61 Merge From Head:
Add a link to the GEP FAQ.

llvm-svn: 31699
2006-11-13 08:05:09 +00:00
Tanya Lattner
50cabc638a Merge from mainline
Don't dag combine floating point select to max and min intrinsics. Those
take v4f32 / v2f64 operands and may end up causing larger spills / restores.
Added X86 specific nodes X86ISD::FMAX, X86ISD::FMIN instead.

llvm-svn: 31651
2006-11-10 22:11:22 +00:00
Tanya Lattner
53a422c20c Merge from mainline.
Fix a bug in SelectScalarSSELoad. Since the load is wrapped in a
SCALAR_TO_VECTOR, even if the hasOneUse() check pass we may end up folding
the load into two instructions. Make sure we check the SCALAR_TO_VECTOR
has only one use as well.

llvm-svn: 31648
2006-11-10 21:55:57 +00:00
Tanya Lattner
1a5b38489c Merging from mainline
Fix a dag combiner bug exposed by my recent instcombine patch.  This fixes
CodeGen/Generic/2006-11-10-DAGCombineMiscompile.ll and PPC gsm/toast.

llvm-svn: 31646
2006-11-10 21:48:06 +00:00
Tanya Lattner
0c669f27d0 xfail for llvm-gcc3
llvm-svn: 31628
2006-11-10 04:52:37 +00:00
Tanya Lattner
56237d03c7 Merging from mainline
llvm-svn: 31626
2006-11-10 04:28:35 +00:00
Tanya Lattner
df39322c24 Reverting patch
llvm-svn: 31625
2006-11-10 04:27:20 +00:00
Tanya Lattner
e3180cf59a Removing from release
llvm-svn: 31624
2006-11-10 04:17:35 +00:00
Tanya Lattner
2c72a34c49 Merging from mainline
llvm-svn: 31623
2006-11-10 04:06:59 +00:00
Tanya Lattner
f9fc189950 file 2006-11-12-CSRetCC.ll was added on branch release_19 on 2006-11-10 04:06:59 +0000
llvm-svn: 31615
2006-11-10 00:48:12 +00:00
CVS to SVN Conversion
0787e1a48a This commit was manufactured by cvs2svn to create branch 'release_19'.
llvm-svn: 31614
2006-11-10 00:48:11 +00:00
Tanya Lattner
f33d66fe40 Merging from mainline.
llvm-svn: 31611
2006-11-10 00:06:24 +00:00
Tanya Lattner
bad3d39af3 Merging from mainline
llvm-svn: 31579
2006-11-08 23:27:54 +00:00
Reid Spencer
0661dc25f5 Merge from head. Bytecode doc update for 1.9 release.
llvm-svn: 31567
2006-11-08 20:11:33 +00:00
Tanya Lattner
ad56d30c90 This test should be marked to xfail on llvmgcc-3.4
llvm-svn: 31564
2006-11-08 20:05:36 +00:00
Tanya Lattner
b0fee64324 Merging from mainline.
llvm-svn: 31558
2006-11-08 18:00:14 +00:00
Tanya Lattner
348cda6881 Merging from mainline and fixing wrong merge of llvmAsmParser.y
llvm-svn: 31557
2006-11-08 17:51:54 +00:00
Tanya Lattner
532aeb4d55 Merging from mainline cvs
llvm-svn: 31556
2006-11-08 17:44:16 +00:00
Tanya Lattner
fc9597dbbc Merging from mainline.
llvm-svn: 31555
2006-11-08 17:41:32 +00:00
Tanya Lattner
9200d055b5 Merging from mainline
llvm-svn: 31554
2006-11-08 17:38:54 +00:00
Tanya Lattner
c739b273e9 This is the 1.9 release
llvm-svn: 31490
2006-11-07 05:25:12 +00:00
CVS to SVN Conversion
e01fd13776 This commit was manufactured by cvs2svn to create branch 'release_19'.
llvm-svn: 31489
2006-11-07 05:25:12 +00:00
24 changed files with 3593 additions and 4351 deletions

View File

@@ -213,7 +213,7 @@ ifdef ENABLE_PROFILING
C.Flags := $(OPTIMIZE_OPTION) -pg -g
LD.Flags := $(OPTIMIZE_OPTION) -pg -g
else
ifdef ENABLE_OPTIMIZED
ifeq ($(ENABLE_OPTIMIZED),1)
BuildMode := Release
# Don't use -fomit-frame-pointer on Darwin or FreeBSD.
ifneq ($(OS),FreeBSD)

View File

@@ -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]],[[1.9cvs]],[llvmbugs@cs.uiuc.edu])
AC_INIT([[llvm]],[[1.9]],[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.

18
llvm/configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.60 for llvm 1.9cvs.
# Generated by GNU Autoconf 2.60 for llvm 1.9.
#
# 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='1.9cvs'
PACKAGE_STRING='llvm 1.9cvs'
PACKAGE_VERSION='1.9'
PACKAGE_STRING='llvm 1.9'
PACKAGE_BUGREPORT='llvmbugs@cs.uiuc.edu'
ac_unique_file="lib/VMCore/Module.cpp"
@@ -1445,7 +1445,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 1.9cvs to adapt to many kinds of systems.
\`configure' configures llvm 1.9 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1511,7 +1511,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of llvm 1.9cvs:";;
short | recursive ) echo "Configuration of llvm 1.9:";;
esac
cat <<\_ACEOF
@@ -1633,7 +1633,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
llvm configure 1.9cvs
llvm configure 1.9
generated by GNU Autoconf 2.60
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1649,7 +1649,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 1.9cvs, which was
It was created by llvm $as_me 1.9, which was
generated by GNU Autoconf 2.60. Invocation command line was
$ $0 $@
@@ -33847,7 +33847,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 1.9cvs, which was
This file was extended by llvm $as_me 1.9, which was
generated by GNU Autoconf 2.60. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -33900,7 +33900,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
llvm config.status 1.9cvs
llvm config.status 1.9
configured by $0, generated by GNU Autoconf 2.60,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"

View File

@@ -1587,45 +1587,47 @@ possible. </p>
<tr><td>Add</td><td>7</td><td>1</td><td>1.0</td></tr>
<tr><td>Sub</td><td>8</td><td>1</td><td>1.0</td></tr>
<tr><td>Mul</td><td>9</td><td>1</td><td>1.0</td></tr>
<tr><td>Div</td><td>10</td><td>1</td><td>1.0</td></tr>
<tr><td>Rem</td><td>11</td><td>1</td><td>1.0</td></tr>
<tr><td>UDiv</td><td>10</td><td>1</td><td>1.9</td></tr>
<tr><td>SDiv</td><td>11</td><td>1</td><td>1.9</td></tr>
<tr><td>FDiv</td><td>12</td><td>1</td><td>1.9</td></tr>
<tr><td>URem</td><td>13</td><td>1</td><td>1.9</td></tr>
<tr><td>SRem</td><td>14</td><td>1</td><td>1.9</td></tr>
<tr><td>FRem</td><td>15</td><td>1</td><td>1.9</td></tr>
<tr><td colspan="4"><b>Logical Operators</b></td></tr>
<tr><td>And</td><td>12</td><td>1</td><td>1.0</td></tr>
<tr><td>Or</td><td>13</td><td>1</td><td>1.0</td></tr>
<tr><td>Xor</td><td>14</td><td>1</td><td>1.0</td></tr>
<tr><td>And</td><td>16</td><td>1</td><td>1.0</td></tr>
<tr><td>Or</td><td>17</td><td>1</td><td>1.0</td></tr>
<tr><td>Xor</td><td>18</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Binary Comparison Operators</b></td></tr>
<tr><td>SetEQ</td><td>15</td><td>1</td><td>1.0</td></tr>
<tr><td>SetNE</td><td>16</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLE</td><td>17</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGE</td><td>18</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLT</td><td>19</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGT</td><td>20</td><td>1</td><td>1.0</td></tr>
<tr><td>SetEQ</td><td>19</td><td>1</td><td>1.0</td></tr>
<tr><td>SetNE</td><td>20</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLE</td><td>21</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGE</td><td>22</td><td>1</td><td>1.0</td></tr>
<tr><td>SetLT</td><td>23</td><td>1</td><td>1.0</td></tr>
<tr><td>SetGT</td><td>24</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Memory Operators</b></td></tr>
<tr><td>Malloc</td><td>21</td><td>1</td><td>1.0</td></tr>
<tr><td>Free</td><td>22</td><td>1</td><td>1.0</td></tr>
<tr><td>Alloca</td><td>23</td><td>1</td><td>1.0</td></tr>
<tr><td>Load</td><td>24</td><td>1</td><td>1.0</td></tr>
<tr><td>Store</td><td>25</td><td>1</td><td>1.0</td></tr>
<tr><td>GetElementPtr</td><td>26</td><td>1</td><td>1.0</td></tr>
<tr><td>Malloc</td><td>25</td><td>1</td><td>1.0</td></tr>
<tr><td>Free</td><td>26</td><td>1</td><td>1.0</td></tr>
<tr><td>Alloca</td><td>27</td><td>1</td><td>1.0</td></tr>
<tr><td>Load</td><td>28</td><td>1</td><td>1.0</td></tr>
<tr><td>Store</td><td>29</td><td>1</td><td>1.0</td></tr>
<tr><td>GetElementPtr</td><td>30</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Other Operators</b></td></tr>
<tr><td>PHI</td><td>27</td><td>1</td><td>1.0</td></tr>
<tr><td>Cast</td><td>28</td><td>1</td><td>1.0</td></tr>
<tr><td>Call</td><td>29</td><td>1</td><td>1.0</td></tr>
<tr><td>Shl</td><td>30</td><td>1</td><td>1.0</td></tr>
<tr><td>Shr</td><td>31</td><td>1</td><td>1.0</td></tr>
<tr><td>VANext</td><td>32</td><td>1</td><td>1.0,unused since 1.5</td></tr>
<tr><td>VAArg</td><td>33</td><td>1</td><td>1.0,unused sine 1.5</td></tr>
<tr><td>Select</td><td>34</td><td>2</td><td>1.2</td></tr>
<tr><td>UserOp1</td><td>35</td><td>1</td><td>1.0</td></tr>
<tr><td>UserOp2</td><td>36</td><td>1</td><td>1.0</td></tr>
<tr><td>VAArg</td><td>37</td><td>5</td><td>1.5</td></tr>
<tr><td>ExtractElement</td><td>38</td><td>5</td><td>1.5</td></tr>
<tr><td>InsertElement</td><td>39</td><td>5</td><td>1.5</td></tr>
<tr><td>ShuffleElement</td><td>40</td><td>5</td><td>1.5</td></tr>
<tr><td>PHI</td><td>31</td><td>1</td><td>1.0</td></tr>
<tr><td>Cast</td><td>32</td><td>1</td><td>1.0</td></tr>
<tr><td>Call</td><td>33</td><td>1</td><td>1.0</td></tr>
<tr><td>Shl</td><td>34</td><td>1</td><td>1.0</td></tr>
<tr><td>Shr</td><td>35</td><td>1</td><td>1.0</td></tr>
<!--
<tr><td>AShr</td><td>41</td><td>6</td><td>1.9</td></tr>
<tr><td>LShr</td><td>42</td><td>6</td><td>1.9</td></tr>
<tr><td>LShr</td><td>35</td><td>6</td><td>2.0</td></tr>
<tr><td>AShr</td><td>36</td><td>6</td><td>2.0</td></tr>
-->
<tr><td>Select</td><td>36</td><td>2</td><td>1.2</td></tr>
<tr><td>UserOp1</td><td>37</td><td>1</td><td>1.0</td></tr>
<tr><td>UserOp2</td><td>38</td><td>1</td><td>1.0</td></tr>
<tr><td>VAArg</td><td>39</td><td>5</td><td>1.5</td></tr>
<tr><td>ExtractElement</td><td>40</td><td>5</td><td>1.5</td></tr>
<tr><td>InsertElement</td><td>41</td><td>5</td><td>1.5</td></tr>
<tr><td>ShuffleElement</td><td>42</td><td>5</td><td>1.5</td></tr>
<tr><td colspan="4">
<b>Pseudo Instructions<a href="#pi_note">*</a></b>
</td></tr>

View File

@@ -36,22 +36,24 @@
<!-- *********************************************************************** -->
<div class="doc_text">
<p>This document is intended to explain the process of building the
LLVM C/C++ front-end from its source code. You have to do this, for example, if
you are porting LLVM to a new architecture or operating system, if you are
working from Top-Of-Tree CVS/SVN, or if there is no precompiled snapshot
available.</p>
<p><b>NOTE:</b> This is currently a somewhat fragile, error-prone
process, and you should <b>only</b> try to do it if:</p>
<p>This document is intended to explain the process of building the LLVM C/C++
front-end from its source code. You have to do this, for example, if you are
porting LLVM to a new architecture or operating system, if you are working from
Top-Of-Tree CVS/SVN, or if there is no precompiled snapshot available.</p>
<p><b>NOTE:</b> This is currently a somewhat fragile, error-prone process, and
you should <b>only</b> try to do it if:</p>
<ol>
<li>you really, really, really can't use the binaries we distribute</li>
<li>you really, <em>really</em>, <b><em>really</em></b> can't use the
binaries we distribute</li>
<li>you are an elite GCC hacker.</li>
<li>you want to use the latest bits from CVS.</li>
</ol>
<p>We welcome patches to help make this process simpler.</p>
</div>
<!--=========================================================================-->
@@ -61,38 +63,48 @@ process, and you should <b>only</b> try to do it if:</p>
<!--=========================================================================-->
<div class="doc_text">
<p>If you are building LLVM and the GCC front-end under Cygwin, please note that
the LLVM and GCC makefiles do not correctly handle spaces in paths. To deal
with this issue, make sure that your LLVM and GCC source and build trees are
located in a top-level directory (like <tt>/cygdrive/c/llvm</tt> and
with this issue, make sure that your LLVM and GCC source and build trees are
located in a top-level directory (like <tt>/cygdrive/c/llvm</tt> and
<tt>/cygdrive/c/llvm-cfrontend</tt>), not in a directory that contains a space
(which includes your "home directory", because it lives under the "Documents
and Settings" directory). We welcome patches to fix this issue.
</p>
(which includes your "home directory", because it lives under the "Documents and
Settings" directory). We welcome patches to fix this issue.</p>
<p>It has been found that the GCC 3.3.3 compiler provided with recent Cygwin
versions is incapable of compiling the LLVM GCC front-end correctly. If your
Cygwin
installation includes GCC 3.3.3, we <i>strongly</i> recommend that you download
GCC 3.4.3, build it separately, and use it for compiling the LLVM GCC front-end.
This has been
shown to work correctly.</p>
Cygwin installation includes GCC 3.3.3, we <em>strongly</em> recommend that you
download GCC 3.4.3, build it separately, and use it for compiling the LLVM GCC
front-end. This has been shown to work correctly.</p>
<p>Some versions of Cygwin utilize an experimental version of GNU binutils that
will cause the GNU <tt>ld</tt> linker to fail an assertion when linking
components of the libstdc++. It is recommended that you replace the entire
binutils package with version 2.15 such that "<tt>ld --version</tt>" responds
with</p>
<div class="doc_code">
<pre>GNU ld version 2.15</pre>
not with:<br/>
</div>
<p>not with:</p>
<div class="doc_code">
<pre>GNU ld version 2.15.91 20040725</pre>
</div>
</div>
<!--=========================================================================-->
<div class="doc_subsection"><a name="aix">Building under AIX</a></div>
<div class="doc_text">
<p>If you are building LLVM and the GCC front-end under AIX, do NOT use GNU
Binutils. They are not stable under AIX and may produce incorrect and/or
invalid code. Instead, use the system assembler and linker.
</p>
invalid code. Instead, use the system assembler and linker.</p>
</div>
<!-- *********************************************************************** -->
@@ -104,33 +116,37 @@ invalid code. Instead, use the system assembler and linker.
<div class="doc_text">
<p>This section describes how to aquire and build llvm-gcc4, which is based on
the GCC 4.0.1 front-end. This front-end supports C, C++, Objective-C, and
the GCC 4.0.1 front-end. This front-end supports C, C++, Objective-C, and
Objective-C++. Note that the instructions for building this front-end are
completely different than those for building llvm-gcc3.
</p>
completely different than those for building llvm-gcc3.</p>
<ol>
<li>
<p>Retrieve the appropriate llvm-gcc4-x.y.source.tar.gz archive from the llvm
web site.</p>
<p>It is also possible to download the sources of the llvm-gcc4 front end from
a read-only mirror using subversion. To check out the code the first time use:
</p>
<li><p>Retrieve the appropriate llvm-gcc4-x.y.source.tar.gz archive from the
llvm web site.</p>
<tt>svn co svn://anonsvn.opensource.apple.com/svn/llvm/trunk
<i>dst-directory</i></tt>
<p>It is also possible to download the sources of the llvm-gcc4 front end
from a read-only mirror using subversion. To check out the code the
first time use:</p>
<p>After that, the code can be be updated in the destination directory using;
</p>
<div class="doc_code">
<pre>
svn co svn://anonsvn.opensource.apple.com/svn/llvm/trunk <i>dst-directory</i>
</pre>
</div>
<tt>svn update</tt>
<p>After that, the code can be be updated in the destination directory
using:</p>
<p>The mirror is brought up to date every evening.</p>
</li>
<div class="doc_code">
<pre>svn update</pre>
</div>
<li>Follow the directions in the top-level README.LLVM file for up-to-date
instructions on how to build llvm-gcc4.</li>
<p>The mirror is brought up to date every evening.</p></li>
<li>Follow the directions in the top-level <tt>README.LLVM</tt> file for
up-to-date instructions on how to build llvm-gcc4.</li>
</ol>
</div>
<!-- *********************************************************************** -->
@@ -140,192 +156,251 @@ a read-only mirror using subversion. To check out the code the first time use:
<!-- *********************************************************************** -->
<div class="doc_text">
<ol>
<li>Aquire llvm-gcc3 from <a href="GettingStarted.html#checkout">LLVM CVS</a> or
from a <a href="http://llvm.org/releases/">release tarball</a>.</li>
<li>Aquire llvm-gcc3 from <a href="GettingStarted.html#checkout">LLVM CVS</a>
or from a <a href="http://llvm.org/releases/">release tarball</a>.</li>
<li><p>Configure and build the LLVM libraries and tools. There are two ways to
do this: either with <i>objdir</i> == <i>srcdir</i> or
<i>objdir</i> != <i>srcdir</i>. It is recommended
that <i>srcdir</i> be the same as <i>objdir</i> for your LLVM tree (but note
that you should always use <i>srcdir</i> != <i>objdir</i> for llvm-gcc):</p>
<ul>
<li>With <i>objdir</i> != <i>srcdir</i>:<pre>
% cd <i>objdir</i>
% <i>srcdir</i>/configure --prefix=/some/path/you/can/install/to [options...]
% gmake tools-only
</pre></li>
<li>With <i>objdir</i> == <i>srcdir</i>:<pre>
% cd llvm
% ./configure --prefix=/some/path/you/can/install/to [options...]
% gmake tools-only
</pre></li>
</ul>
<p>This will build all of the LLVM tools and libraries. The <tt>--prefix</tt>
option defaults to /usr/local (per configure standards) but unless you are a
system administrator, you probably won't be able to install LLVM there because
of permissions. Specify a path into which LLVM can be installed (e.g.
<tt>--prefix=/home/user/llvm</tt>).</p>
</li>
<li><p>Configure and build the LLVM libraries and tools. There are two ways to
do this: either with <tt><i>objdir</i> == <i>srcdir</i></tt> or
<tt><i>objdir</i> != <i>srcdir</i></tt>. It is recommended that
<tt><i>srcdir</i></tt> be the same as <tt><i>objdir</i></tt> for your
LLVM tree (but note that you should always use <tt><i>srcdir</i> !=
<i>objdir</i></tt> for llvm-gcc):</p>
<li><p>Add the directory containing the tools to your PATH.</p>
<ul>
<li><p>With <tt><i>objdir</i> != <i>srcdir</i></tt>:</p>
<div class="doc_code">
<pre>
% set path = ( `cd llvm/Debug/bin &amp;&amp; pwd` $path )
</pre></li>
<li><p>Unpack the C/C++ front-end source into cfrontend/src, either by
untar'ing a cfrontend.source.tar.gz file or checking out CVS into this
directory.</p></li>
<li><p>Make "build" and "install" directories as siblings of the "src" tree:</p>
<pre>
% pwd
/usr/local/example/cfrontend/src
% cd ..
% mkdir build install
% set CFEINSTALL = `pwd`/install
</pre></li>
<li><p>Configure, build, and install the GCC front-end:</p>
<p>
<b>Linux/x86:</b><br>
<b>Linux/IA-64:</b><br>
<b>MacOS X/PowerPC</b> (requires dlcompat library):<br>
<b>AIX/PowerPC:</b>
</p>
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --program-prefix=llvm-
% gmake all; gmake install
% cd <i>objdir</i>
% <i>srcdir</i>/configure --prefix=/some/path/you/can/install/to [options...]
% gmake tools-only
</pre>
</div>
</li>
<li><p>With <tt><i>objdir</i> == <i>srcdir</i></tt>:</p>
<p><b>Cygwin/x86:</b></p>
<div class="doc_code">
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --disable-c-mbchar \
--program-prefix=llvm-
% gmake all; gmake install
% cd llvm
% ./configure --prefix=/some/path/you/can/install/to [options...]
% gmake tools-only
</pre>
</div>
</li>
</ul>
<p><b>Solaris/SPARC:</b></p>
<p>
The GCC front-end can be configured for either SPARC V8 (32 bit) or SPARC V9 (64
bit). This changes, among other things, the sizes of integer types and the
macros defined for conditional compilation.
</p>
<p>
The SPARC V8 ABI support is more robust than the V9 ABI support and can generate
SPARC V9 code. It is highly recommended that you use the V8 ABI with LLVM, as
shown below. Also,
note that Solaris has trouble with various wide (multibyte) character
functions from C as referenced from C++, so we typically configure with
--disable-c-mbchar (cf. <a href="http://llvm.org/PR206">Bug 206</a>).
</p>
<p>This will build all of the LLVM tools and libraries. The
<tt>--prefix</tt> option defaults to <tt>/usr/local</tt> (per configure
standards) but unless you are a system administrator, you probably
won't be able to install LLVM there because of permissions. Specify a
path into which LLVM can be installed
(e.g. <tt>--prefix=/home/user/llvm</tt>).</p></li>
<li><p>Add the directory containing the tools to your PATH.</p>
<div class="doc_code">
csh:
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --host=sparc-sun-solaris2.8 \
--disable-c-mbchar --program-prefix=llvm-
% gmake all; gmake install
% set path = ( `cd llvm/Debug/bin &amp;&amp; pwd` $path )
</pre>
<p><b>Common Problem:</b> You may get error messages regarding the fact
that LLVM does not support inline assembly. Here are two common
fixes:</p>
<ul>
<li><p><b>Fix 1:</b> If you have system header files that include
inline assembly, you may have to modify them to remove the inline
assembly and install the modified versions in
<code>$CFEINSTALL/lib/gcc/<i>target-triplet</i>/3.4-llvm/include</code>.</li>
<li><b>Fix 2:</b> If you are building the C++ front-end on a CPU we
haven't tried yet, you will probably have to edit the appropriate
version of atomicity.h under
<code>src/libstdc++-v3/config/cpu/<i>name-of-cpu</i>/atomicity.h</code>
and apply a patch so that it does not use inline assembly.</li>
</ul>
<p><b>Porting to a new architecture:</b> If you are porting the front-end
to a new architecture or compiling in a configuration that we have
not tried previously, there are probably several changes you will have to make
to the GCC target to get it to work correctly. These include:<p>
<ul>
<li>Often targets include special assembler or linker flags which
<tt>gccas</tt>/<tt>gccld</tt> does not understand. In general, these can
just be removed.</li>
<li>LLVM currently does not support any floating point values other than
32-bit and 64-bit IEEE floating point. The primary effect of this is
that you may have to map "long double" onto "double".</li>
<li>The profiling hooks in GCC do not apply at all to the LLVM front-end.
These may need to be disabled.</li>
<li>No inline assembly for position independent code. At the LLVM level,
everything is position independent.</li>
<li>We handle <tt>.init</tt> and <tt>.fini</tt> differently.</li>
<li>You may have to disable multilib support in your target. Using multilib
support causes the GCC compiler driver to add a lot of "<tt>-L</tt>"
options to the link line, which do not relate to LLVM and confuse
<tt>gccld</tt>. To disable multilibs, delete any
<tt>MULTILIB_OPTIONS</tt> lines from your target files.</li>
<li>Did we mention that we don't support inline assembly? You'll probably
have to add some fixinclude hacks to disable it in the system
headers.</li>
</ul>
</li>
<li><p>Put <tt>$CFEINSTALL/bin</tt> into your <tt>PATH</tt> environment
variable.</p>
<ul>
<li>sh: <tt>export PATH=$CFEINSTALL/bin:$PATH</tt></li>
<li>csh: <tt>setenv PATH $CFEINSTALL/bin:$PATH</tt></li>
</ul>
</li>
<li><p>Go back into the LLVM source tree proper. Rerun configure, using
the same options as the last time. This will cause the configuration to now find
the newly built llvm-gcc and llvm-g++ executables. </p></li>
<li><p>Rebuild your CVS tree. This shouldn't cause the whole thing to be
rebuilt, but it should build the runtime libraries. After the tree is
built, install the runtime libraries into your GCC front-end build tree.
These are the commands you need:</p>
sh:
<pre>
% gmake
% gmake -C runtime install-bytecode
</pre></li>
<li><p>Optionally, build a symbol table for the newly installed runtime
libraries. Although this step is optional, you are strongly encouraged to
do this as the symbol tables will make a significant difference in your
link times. Use the <tt>llvm-ranlib</tt> tool to do this, as follows:</p>
<pre>
% cd $CFEINSTALL/lib
% llvm-ranlib libiberty.a
% llvm-ranlib libstdc++.a
% llvm-ranlib libsupc++.a
% cd $CFEINSTALL/lib/gcc/<i>target-triplet</i>/3.4-llvm
% llvm-ranlib libgcc.a
% llvm-ranlib libgcov.a
% export PATH=`cd llvm/Debug/bin &amp;&amp; pwd`:$PATH
</pre>
</div>
</li>
<li><p>Test the newly-installed C frontend by one or more of the
following means:</p>
<ul>
<li> running the feature &amp; regression tests via <tt>make check</tt></li>
<li> compiling and running a "hello, LLVM" program in C and C++.</li>
<li> running the tests found in the <tt>llvm-test</tt> CVS module</li>
</ul></li>
<li><p>Unpack the C/C++ front-end source, either by
untar'ing/unzipping a tar.gz file or checking out CVS into this
directory.</p></li>
<li><p>Make "build" and "install" directories as siblings of the "src"
tree:</p>
<div class="doc_code">
csh:
<pre>
% pwd
/usr/local/example/llvm-gcc3.4/src
% cd ..
% mkdir build install
% set CFEINSTALL = `pwd`/install
</pre>
sh:
<pre>
% pwd
/usr/local/example/llvm-gcc3.4/src
% cd ..
% mkdir build install
% export CFEINSTALL=`pwd`/install
</pre>
</div>
</li>
<li><p>Configure, build, and install the GCC front-end:</p>
<p>
<b>Linux/x86:</b><br>
<b>Linux/IA-64:</b><br>
<b>MacOS X/PowerPC</b> (requires dlcompat library):<br>
<b>AIX/PowerPC:</b>
</p>
<div class="doc_code">
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --program-prefix=llvm-
% gmake all; gmake install
</pre>
</div>
<p><b>Cygwin/x86:</b></p>
<div class="doc_code">
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --disable-c-mbchar \
--program-prefix=llvm-
% gmake all; gmake install
</pre>
</div>
<p><b>Solaris/SPARC:</b></p>
<p>The GCC front-end can be configured for either SPARC V8 (32 bit) or
SPARC V9 (64 bit). This changes, among other things, the sizes of
integer types and the macros defined for conditional compilation.</p>
<p>The SPARC V8 ABI support is more robust than the V9 ABI support and can
generate SPARC V9 code. It is highly recommended that you use the V8
ABI with LLVM, as shown below. Also, note that Solaris has trouble
with various wide (multibyte) character functions from C as referenced
from C++, so we typically configure with --disable-c-mbchar (cf. <a
href="http://llvm.org/PR206">Bug 206</a>).</p>
<div class="doc_code">
<pre>
% cd build
% ../src/configure --prefix=$CFEINSTALL --disable-threads --disable-nls \
--disable-shared --enable-languages=c,c++ --host=sparc-sun-solaris2.8 \
--disable-c-mbchar --program-prefix=llvm-
% gmake all; gmake install
</pre>
</div>
<p><b>Common Problem:</b> You may get error messages regarding the fact
that LLVM does not support inline assembly. Here are two common
fixes:</p>
<ul>
<li><p><b>Fix 1:</b> If you have system header files that include inline
assembly, you may have to modify them to remove the inline assembly
and install the modified versions in
<code>$CFEINSTALL/lib/gcc/<i>target-triplet</i>/3.4-llvm/include</code>.</li>
<li><b>Fix 2:</b> If you are building the C++ front-end on a CPU we
haven't tried yet, you will probably have to edit the appropriate
version of atomicity.h under
<code>src/libstdc++-v3/config/cpu/<i>name-of-cpu</i>/atomicity.h</code>
and apply a patch so that it does not use inline assembly.</li>
</ul>
<p><b>Porting to a new architecture:</b> If you are porting the front-end
to a new architecture or compiling in a configuration that we have not
tried previously, there are probably several changes you will have to
make to the GCC target to get it to work correctly. These include:</p>
<ul>
<li>Often targets include special assembler or linker flags which
<tt>gccas</tt>/<tt>gccld</tt> does not understand. In general,
these can just be removed.</li>
<li>LLVM currently does not support any floating point values other than
32-bit and 64-bit IEEE floating point. The primary effect of this
is that you may have to map "long double" onto "double".</li>
<li>The profiling hooks in GCC do not apply at all to the LLVM
front-end. These may need to be disabled.</li>
<li>No inline assembly for position independent code. At the LLVM
level, everything is position independent.</li>
<li>We handle <tt>.init</tt> and <tt>.fini</tt> differently.</li>
<li>You may have to disable multilib support in your target. Using
multilib support causes the GCC compiler driver to add a lot of
"<tt>-L</tt>" options to the link line, which do not relate to LLVM
and confuse <tt>gccld</tt>. To disable multilibs, delete any
<tt>MULTILIB_OPTIONS</tt> lines from your target files.</li>
<li>Did we mention that we don't support inline assembly? You'll
probably have to add some fixinclude hacks to disable it in the
system headers.</li>
</ul></li>
<li><p>Put <tt>$CFEINSTALL/bin</tt> into your <tt>PATH</tt> environment
variable.</p>
<div class="doc_code">
csh:
<pre>
% setenv PATH $CFEINSTALL/bin:$PATH
</pre>
sh:
<pre>
% export PATH=$CFEINSTALL/bin:$PATH
</pre>
</div>
</li>
<li><p>Go back into the LLVM source tree proper. Rerun configure, using the
same options as the last time. This will cause the configuration to now
find the newly built llvm-gcc and llvm-g++ executables. </p></li>
<li><p>Rebuild your CVS tree. This shouldn't cause the whole thing to be
rebuilt, but it should build the runtime libraries. After the tree is
built, install the runtime libraries into your GCC front-end build tree.
These are the commands you need:</p>
<div class="doc_code">
<pre>
% gmake
% gmake -C runtime install-bytecode
</pre>
</div>
</li>
<li><p>Optionally, build a symbol table for the newly installed runtime
libraries. Although this step is optional, you are strongly encouraged to
do this as the symbol tables will make a significant difference in your
link times. Use the <tt>llvm-ranlib</tt> tool to do this, as follows:</p>
<div class="doc_code">
<pre>
% cd $CFEINSTALL/lib
% llvm-ranlib libiberty.a
% llvm-ranlib libstdc++.a
% llvm-ranlib libsupc++.a
% cd $CFEINSTALL/lib/gcc/<i>target-triplet</i>/3.4-llvm
% llvm-ranlib libgcc.a
% llvm-ranlib libgcov.a
</pre>
</div>
</li>
<li><p>Test the newly-installed C frontend by one or more of the following
means:</p>
<ul>
<li>running the feature &amp; regression tests via <tt>make
check</tt></li>
<li>compiling and running a "hello, LLVM" program in C and C++.</li>
<li>running the tests found in the <tt>llvm-test</tt> CVS module</li>
</ul></li>
</ol>
</div>
<!-- *********************************************************************** -->

View File

@@ -119,11 +119,11 @@ and performance.
<li>Install the GCC front end if you intend to compile C or C++:
<ol>
<li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt></li>
<li><tt>gunzip --stdout cfrontend.<i>platform</i>.tar.gz | tar -xvf -</tt>
<li><tt>gunzip --stdout llvm-gcc.<i>platform</i>.tar.gz | tar -xvf -</tt>
</li>
<li><tt>cd cfrontend/<i>platform</i><br>
<li><tt>cd llvm-gcc3.4/<i>platform</i> (llvm-gcc3.4 only)<br>
./fixheaders</tt></li>
<li>Add the cfrontend's "bin" directory to your PATH variable.</li>
<li>Add llvm-gcc's "bin" directory to your PATH variable.</li>
</ol></li>
<li>Get the LLVM Source Code
@@ -592,7 +592,7 @@ All these paths are absolute:</p>
This is where the LLVM GCC Front End is installed.
<p>
For the pre-built GCC front end binaries, the LLVMGCCDIR is
<tt>cfrontend/<i>platform</i>/llvm-gcc</tt>.
<tt>llvm-gcc/<i>platform</i>/llvm-gcc</tt>.
</dl>
</div>
@@ -643,21 +643,19 @@ compressed with the gzip program.
<dt><tt>llvm-test-x.y.tar.gz</tt></dt>
<dd>Source release for the LLVM test suite.</dd>
<dt><tt>cfrontend-x.y.source.tar.gz</tt></dt>
<dd>Source release of the GCC front end.<br/></dd>
<dt><tt>cfrontend-x.y.i686-redhat-linux-gnu.tar.gz</tt></dt>
<dd>Binary release of the GCC front end for Linux/x86.<br/></dd>
<dt><tt>llvm-gcc3.4-x.y.source.tar.gz</tt></dt>
<dd>Source release of the LLVM GCC 3.4 front end.<br/></dd>
<dt><tt>llvm-gcc3.4-x.y-platform.tar.gz</tt></dt>
<dd>Binary release of the LLVM GCC 3.4 for a specific platform.<br/></dd>
<dt><tt>llvm-gcc4-x.y.source.tar.gz</tt></dt>
<dd>Source release of the llvm-gcc4 front end. See README.LLVM in the root
directory for build instructions.<br/></dd>
<dt><tt>llvm-gcc4-x.y.powerpc-apple-darwin8.6.0.tar.gz</tt></dt>
<dd>Binary release of the llvm-gcc4 front end for MacOS X/PowerPC.<br/></dd>
<dt><tt>llvm-gcc4-x.y-platform.tar.gz</tt></dt>
<dd>Binary release of the llvm-gcc4 front end for a specific platform.<br/></dd>
<dt><tt>llvm-gcc4-x.y.i686-apple-darwin8.6.1.tar.gz</tt></dt>
<dd>Binary release of the llvm-gcc4 front end for MacOS X/X86.<br/></dd>
</dl>
<p>It is also possible to download the sources of the llvm-gcc4 front end from a
@@ -694,6 +692,8 @@ revision), you can specify a label. The following releases have the following
labels:</p>
<ul>
<li>Release 1.9: <b>RELEASE_19</b></li>
<li>Release 1.8: <b>RELEASE_18</b></li>
<li>Release 1.7: <b>RELEASE_17</b></li>
<li>Release 1.6: <b>RELEASE_16</b></li>
<li>Release 1.5: <b>RELEASE_15</b></li>
@@ -741,13 +741,13 @@ location must be specified when the LLVM suite is configured.</p>
<ol>
<li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
<li><tt>gunzip --stdout cfrontend-<i>version</i>.<i>platform</i>.tar.gz | tar -xvf
<li><tt>gunzip --stdout llvmgcc-<i>version</i>.<i>platform</i>.tar.gz | tar -xvf
-</tt></li>
</ol>
<p>Next, you will need to fix your system header files:</p>
<p>Next, you will need to fix your system header files (llvm-gcc3.4 only):</p>
<p><tt>cd cfrontend/<i>platform</i><br>
<p><tt>cd llvm-gcc3.4/<i>platform</i><br>
./fixheaders</tt></p>
<p>The binary versions of the GCC front end may not suit all of your needs. For

View File

@@ -62,7 +62,8 @@ 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 and new features.
release incorporates a large number of enhancements, new features, and bug
fixes. We recommend that all users of previous LLVM versions upgrade.
</p>
</div>
@@ -73,41 +74,106 @@ release incorporates a large number of enhancements and new features.
</div>
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="elfdwarf">DWARF debugging
support for X86/ELF</a></div>
<div class="doc_subsubsection"><a name="x86-64">New X86-64 Backend</a></div>
<div class="doc_text">
<p>The llvm-gcc4 C front-end now generates debugging info for C and C++ for
X86/ELF platforms (Linux). This extends the PPC/Darwin and X86/Darwin debugging
support available in release 18.8 DWARF is a standard debugging format used on
many platforms.</p>
<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="signedinst">Signed Instructions</a></div>
<div class="doc_subsubsection"><a name="lto">Link-Time Optimization integration
with native linkers</a></div>
<div class="doc_text">
<p>As a step towards making LLVM's integer types signless, several new
instructions have been added to LLVM. The DIV instruction has become UDIV, SDIV,
and FDIV. The REM instruction has become UREM, SREM and FREM. The SHR
instruction has become ASHR and LSHR. See the <a href="LangRef.html">Language
Reference</a> for details on these new instructions.</p>
<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>
</div>
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="featureA">New Feature C</a></div>
<div class="doc_subsubsection"><a name="dwarf">DWARF debugging
support for Linux, Cygwin and MinGW on X86</a></div>
<div class="doc_text">
<p>Describe feature C here.</p>
<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>
</div>
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="featureB">New Feature D</a></div>
<div class="doc_subsubsection"><a name="optimizer">Optimizer
Improvements</a></div>
<div class="doc_text">
<p>Describe feature D here.</p>
<p>The mid-level optimizer is now faster and produces better code in many cases.
Significant changes 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>
</ul>
</div>
<!--_________________________________________________________________________-->
<div class="doc_subsubsection"><a name="jitrelease">New Feature E</a></div>
<div class="doc_subsubsection"><a name="codegen">Code
Generator Enhancements</a></div>
<div class="doc_text">
<p>Describe feature E here.</p>
<p>
The LLVM Target-Independent code generator now supports more target features and
optimizes many cases more aggressively. 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>
</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>
</ul>
<p>Further, several significant target-specific enhancements are included in
LLVM 1.9:</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>
</ul>
</div>
<!--_________________________________________________________________________-->
@@ -121,38 +187,41 @@ instruction has become ASHR and LSHR. See the <a href="LangRef.html">Language
<p>More specific changes include:</p>
<ul>
<li>LLVM 1.8 includes an initial ARM backend. This backend is in early
development stages.</li>
<li>LLVM 1.8 now includes significantly better support for mingw and
cygwin.</li>
<li>The <a href="CommandGuide/html/llvm-config.html">llvm-config</a> tool is
now built by default and has several new features.</li>
<li>The X86 and PPC backends now use the correct platform ABI for passing
vectors as arguments to functions.</li>
<li>The X86 backend now includes support for the Microsoft ML assembler
("MASM").</li>
<li>The PowerPC backend now pattern matches the 'rlwimi' instruction more
aggressively.</li>
<li>Most of LLVM is now built with "-pedantic", ensuring better portability
to more C++ Compilers.</li>
<li>The PowerPC backend now includes initial 64-bit support. The JIT is not
complete, and the static compiler has a couple of known bugs, but support
is mostly in place. LLVM 1.9 will include completed PPC-64 support. </li>
<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>
<!--=========================================================================-->
<div class="doc_subsection">
<a name="changes">Significant Changes in LLVM 1.8</a>
<a name="apichanges">Significant API Changes in LLVM 1.9</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>
<ul>
<li>The LLVM "SparcV9" backend (deprecated in LLVM 1.7) has been removed in
LLVM 1.8. The LLVM "Sparc" backend replaces it.</li>
<li>The --version option now prints more useful information, including the
build configuration for the tool.</li>
<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>
</ul>
</div>
@@ -174,7 +243,8 @@ LLVM 1.8. The LLVM "Sparc" backend replaces it.</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.</li>
<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
64-bit modes.</li>
<li>Alpha-based machines running Debian GNU/Linux.</li>
<li>Itanium-based machines running Linux and HP-UX.</li>
</ul>
@@ -220,6 +290,7 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in in a
future release.</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>
@@ -229,16 +300,138 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="build">Known problems with the Build System</a>
<a name="x86-be">Known problems with the X86 back-end</a>
</div>
<div class="doc_text">
<ul>
<li>none yet</li>
<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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="ppc-be">Known problems with the PowerPC back-end</a>
</div>
<div class="doc_text">
<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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="sparc-be">Known problems with the SPARC 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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="c-be">Known problems with the C 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#i_stacksave"><tt>llvm.stacksave</tt></a> or
<a href="LangRef.html#i_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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="alpha-be">Known problems with the Alpha back-end</a>
</div>
<div class="doc_text">
<ul>
<li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
appropriate nops inserted to ensure restartability.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="ia64-be">Known problems with the IA64 back-end</a>
</div>
<div class="doc_text">
<ul>
<li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
made where the argument is not 16-byte aligned, as required on IA64. (Strictly
speaking this is not a bug in the IA64 back-end; it will also be encountered
when building C++ programs using the C back-end.)</li>
<li>The C++ front-end does not use <a href="http://llvm.org/PR406">IA64
ABI compliant layout of v-tables</a>. In particular, it just stores function
pointers instead of function descriptors in the vtable. This bug prevents
mixing C++ code compiled with LLVM with C++ objects compiled by other C++
compilers.</li>
<li>There are a few ABI violations which will lead to problems when mixing LLVM
output with code built with other compilers, particularly for floating-point
programs.</li>
<li>Defining vararg functions is not supported (but calling them is ok).</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="arm-be">Known problems with the ARM 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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
@@ -264,29 +457,15 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
<div class="doc_text">
<p>
llvm-gcc3 has many significant problems that are fixed by llvm-gcc4.
Two major ones include:</p>
<ul>
<li>With llvm-gcc3,
C99 variable sized arrays do not release stack memory when they go out of
scope. Thus, the following program may run out of stack space:
<pre>
for (i = 0; i != 1000000; ++i) {
int X[n];
foo(X);
}
</pre></li>
<li>With llvm-gcc3, Initialization of global union variables can only be done <a
href="http://llvm.org/PR162">with the largest union member</a>.</li>
</ul>
<p>llvm-gcc4 is far more stable and produces better code than llvm-gcc3, but
does not currently support Link-Time-Optimization or C++ Exception Handling,
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>
</div>
<!-- _______________________________________________________________________ -->
@@ -302,28 +481,12 @@ which llvm-gcc3 does.</p>
support for floating point data types of any size other than 32 and 64
bits.</li>
<li>The following Unix system functionality has not been tested and may not
work:
<ol>
<li><tt>sigsetjmp</tt>, <tt>siglongjmp</tt> - These are not turned into the
appropriate <tt>invoke</tt>/<tt>unwind</tt> instructions. Note that
<tt>setjmp</tt> and <tt>longjmp</tt> <em>are</em> compiled correctly.
<li><tt>getcontext</tt>, <tt>setcontext</tt>, <tt>makecontext</tt>
- These functions have not been tested.
</ol></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/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>: Built-in functions specific to particular targets.</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>
@@ -344,29 +507,31 @@ work:
Declaring that functions have no side effects or that they can never
return.<br>
<b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
<tt>noreturn</tt>, <tt>constructor</tt>, <tt>destructor</tt>,
<tt>unused</tt>, <tt>used</tt>,
<tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
<b>Supported:</b> <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>stdcall</tt>, <tt>unused</tt>, <tt>used</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>section</tt>, <tt>alias</tt>,
<tt>visibility</tt>, <tt>regparm</tt>, <tt>stdcall</tt>,
<tt>fastcall</tt>, all other target specific attributes</li>
<tt>visibility</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>transparent_union</tt>,
<tt>deprecated</tt>, <tt>dllimport</tt>,
<tt>dllexport</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>section</tt>, <tt>shared</tt>, <tt>tls_model</tt>,
<tt>vector_size</tt>, <tt>dllimport</tt>,
<tt>dllexport</tt>, all target specific attributes.</li>
<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>,
@@ -402,6 +567,12 @@ work:
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic%20Macros">Variadic Macros</a>: Macros with a variable number of arguments.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>: Slightly looser rules for escaped newlines.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>: Built-in functions specific to particular targets.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
<li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
@@ -445,27 +616,14 @@ itself.</p>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">Bugs</div>
<div class="doc_text">
<ul>
<li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
front-end</a>.</li>
</ul>
</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>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
@@ -480,7 +638,7 @@ itself.</p>
representation issues. Because we use this API, code generated by the LLVM
compilers should be binary compatible with machine code generated by other
Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
<i>However</i>, the exception handling mechanism used by LLVM is very
<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>
@@ -488,134 +646,7 @@ itself.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="c-be">Known problems with the C 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#i_stacksave"><tt>llvm.stacksave</tt></a> or
<a href="LangRef.html#i_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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="x86-be">Known problems with the X86 back-end</a>
</div>
<div class="doc_text">
<ul>
<li>none yet.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="ppc-be">Known problems with the PowerPC back-end</a>
</div>
<div class="doc_text">
<ul>
<li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
implement ordered FP comparisons</a>.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="alpha-be">Known problems with the Alpha back-end</a>
</div>
<div class="doc_text">
<ul>
<li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
appropriate nops inserted to ensure restartability.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="ia64-be">Known problems with the IA64 back-end</a>
</div>
<div class="doc_text">
<ul>
<li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
made where the argument is not 16-byte aligned, as required on IA64. (Strictly
speaking this is not a bug in the IA64 back-end; it will also be encountered
when building C++ programs using the C back-end.)</li>
<li>The C++ front-end does not use <a href="http://llvm.org/PR406">IA64
ABI compliant layout of v-tables</a>. In particular, it just stores function
pointers instead of function descriptors in the vtable. This bug prevents
mixing C++ code compiled with LLVM with C++ objects compiled by other C++
compilers.</li>
<li>There are a few ABI violations which will lead to problems when mixing LLVM
output with code built with other compilers, particularly for floating-point
programs.</li>
<li>Defining vararg functions is not supported (but calling them is ok).</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="sparc-be">Known problems with the SPARC 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>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="arm-be">Known problems with the ARM 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>
</ul>
</div>
<!-- *********************************************************************** -->
<div class="doc_section">

View File

@@ -39,7 +39,6 @@
<ul>
<li><a href="LangRef.html">LLVM Language Reference Manual</a> - Defines the LLVM
intermediate representation.</li>
<li><a href="http://llvm.org/pubs/2006-04-25-GelatoLLVMIntro.html">Introduction to the LLVM Compiler Infrastructure</a> - Presentation describing LLVM.</li>
<li><a href="http://llvm.org/pubs/2004-09-22-LCPCLLVMTutorial.html">The LLVM Compiler Framework and
Infrastructure Tutorial</a> - Tutorial for writing passes, exploring the system.</li>
@@ -47,7 +46,8 @@ Infrastructure Tutorial</a> - Tutorial for writing passes, exploring the system.
Lifelong Program Analysis &amp; Transformation</a> - Design overview.</li>
<li><a href="http://llvm.org/pubs/2002-12-LattnerMSThesis.html">LLVM: An Infrastructure for
Multi-Stage Optimization</a> - More details (somewhat old now).</li>
<li><a href="GetElementPtr.html">GetElementPtr FAQ</a> - Answers to some very
frequent questions about LLVM's most frequently misunderstood instruction.</li>
</ul>
<!--=======================================================================-->

View File

@@ -17,7 +17,7 @@
#define yylineno llvmAsmlineno
#line 20 "Lexer.cpp"
/* A lexical scanner generated by flex*/
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
* $Header$
@@ -28,7 +28,6 @@
#define YY_FLEX_MINOR_VERSION 5
#include <stdio.h>
#include <unistd.h>
/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
@@ -42,6 +41,7 @@
#ifdef __cplusplus
#include <stdlib.h>
#include <unistd.h>
/* Use prototypes in function declarations. */
#define YY_USE_PROTOS
@@ -153,15 +153,6 @@ extern FILE *yyin, *yyout;
#define unput(c) yyunput( c, yytext_ptr )
/* Some routines like yy_flex_realloc() are emitted as static but are
not called by all lexers. This generates warnings in some compilers,
notably GCC. Arrange to suppress these. */
#ifdef __GNUC__
#define YY_MAY_BE_UNUSED __attribute__((unused))
#else
#define YY_MAY_BE_UNUSED
#endif
/* The following is because we cannot portably get our hands on size_t
* (without autoconf's help, which isn't available because we want
* flex-generated scanners to compile on their own).
@@ -268,7 +259,7 @@ YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
static void yy_flex_free YY_PROTO(( void * ));
#define yy_new_buffer yy_create_buffer
@@ -854,7 +845,7 @@ goto find_rule; \
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 1 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
#define INITIAL 0
/*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
//
@@ -869,7 +860,7 @@ char *yytext;
//
//===----------------------------------------------------------------------===*/
#define YY_NEVER_INTERACTIVE 1
#line 28 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 28 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
#include "ParserInternals.h"
#include "llvm/Module.h"
#include <list>
@@ -1005,7 +996,7 @@ using namespace llvm;
/* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
* it to deal with 64 bit numbers.
*/
#line 1009 "Lexer.cpp"
#line 1000 "Lexer.cpp"
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1153,13 +1144,13 @@ YY_MALLOC_DECL
YY_DECL
{
register yy_state_type yy_current_state;
register char *yy_cp = NULL, *yy_bp = NULL;
register char *yy_cp, *yy_bp;
register int yy_act;
#line 189 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 189 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
#line 1163 "Lexer.cpp"
#line 1154 "Lexer.cpp"
if ( yy_init )
{
@@ -1252,537 +1243,537 @@ do_action: /* This label is used only to access EOF actions. */
{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
#line 191 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 191 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ /* Ignore comments for now */ }
YY_BREAK
case 2:
YY_RULE_SETUP
#line 193 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 193 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return BEGINTOK; }
YY_BREAK
case 3:
YY_RULE_SETUP
#line 194 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 194 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return ENDTOK; }
YY_BREAK
case 4:
YY_RULE_SETUP
#line 195 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 195 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TRUETOK; }
YY_BREAK
case 5:
YY_RULE_SETUP
#line 196 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 196 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return FALSETOK; }
YY_BREAK
case 6:
YY_RULE_SETUP
#line 197 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 197 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DECLARE; }
YY_BREAK
case 7:
YY_RULE_SETUP
#line 198 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 198 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return GLOBAL; }
YY_BREAK
case 8:
YY_RULE_SETUP
#line 199 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 199 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return CONSTANT; }
YY_BREAK
case 9:
YY_RULE_SETUP
#line 200 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 200 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return INTERNAL; }
YY_BREAK
case 10:
YY_RULE_SETUP
#line 201 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 201 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return LINKONCE; }
YY_BREAK
case 11:
YY_RULE_SETUP
#line 202 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 202 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return WEAK; }
YY_BREAK
case 12:
YY_RULE_SETUP
#line 203 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 203 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return APPENDING; }
YY_BREAK
case 13:
YY_RULE_SETUP
#line 204 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 204 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DLLIMPORT; }
YY_BREAK
case 14:
YY_RULE_SETUP
#line 205 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 205 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DLLEXPORT; }
YY_BREAK
case 15:
YY_RULE_SETUP
#line 206 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 206 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return EXTERN_WEAK; }
YY_BREAK
case 16:
YY_RULE_SETUP
#line 207 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 207 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return EXTERNAL; } /* Deprecated, turn into external */
YY_BREAK
case 17:
YY_RULE_SETUP
#line 208 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 208 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }
YY_BREAK
case 18:
YY_RULE_SETUP
#line 209 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 209 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return IMPLEMENTATION; }
YY_BREAK
case 19:
YY_RULE_SETUP
#line 210 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 210 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return ZEROINITIALIZER; }
YY_BREAK
case 20:
YY_RULE_SETUP
#line 211 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 211 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DOTDOTDOT; }
YY_BREAK
case 21:
YY_RULE_SETUP
#line 212 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 212 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return UNDEF; }
YY_BREAK
case 22:
YY_RULE_SETUP
#line 213 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 213 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return NULL_TOK; }
YY_BREAK
case 23:
YY_RULE_SETUP
#line 214 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 214 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TO; }
YY_BREAK
case 24:
YY_RULE_SETUP
#line 215 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 215 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
YY_BREAK
case 25:
YY_RULE_SETUP
#line 216 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 216 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return NOT; } /* Deprecated, turned into XOR */
YY_BREAK
case 26:
YY_RULE_SETUP
#line 217 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 217 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TAIL; }
YY_BREAK
case 27:
YY_RULE_SETUP
#line 218 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 218 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TARGET; }
YY_BREAK
case 28:
YY_RULE_SETUP
#line 219 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 219 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TRIPLE; }
YY_BREAK
case 29:
YY_RULE_SETUP
#line 220 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 220 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DEPLIBS; }
YY_BREAK
case 30:
YY_RULE_SETUP
#line 221 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 221 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return ENDIAN; }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 222 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 222 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return POINTERSIZE; }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 223 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 223 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return DATALAYOUT; }
YY_BREAK
case 33:
YY_RULE_SETUP
#line 224 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 224 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return LITTLE; }
YY_BREAK
case 34:
YY_RULE_SETUP
#line 225 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 225 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return BIG; }
YY_BREAK
case 35:
YY_RULE_SETUP
#line 226 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 226 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return VOLATILE; }
YY_BREAK
case 36:
YY_RULE_SETUP
#line 227 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 227 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return ALIGN; }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 228 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 228 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return SECTION; }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 229 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 229 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return MODULE; }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 230 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 230 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return ASM_TOK; }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 231 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 231 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return SIDEEFFECT; }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 233 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 233 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return CC_TOK; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 234 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 234 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return CCC_TOK; }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 235 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 235 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return CSRETCC_TOK; }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 236 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 236 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return FASTCC_TOK; }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 237 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 237 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return COLDCC_TOK; }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 238 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 238 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return X86_STDCALLCC_TOK; }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 239 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 239 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return X86_FASTCALLCC_TOK; }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 241 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 241 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::VoidTy ; return VOID; }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 242 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 242 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::BoolTy ; return BOOL; }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 243 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 243 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::SByteTy ; return SBYTE; }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 244 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 244 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UByteTy ; return UBYTE; }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 245 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 245 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::ShortTy ; return SHORT; }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 246 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 246 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UShortTy; return USHORT; }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 247 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 247 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::IntTy ; return INT; }
YY_BREAK
case 55:
YY_RULE_SETUP
#line 248 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 248 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UIntTy ; return UINT; }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 249 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 249 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::LongTy ; return LONG; }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 250 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 250 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::ULongTy ; return ULONG; }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 251 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 251 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::FloatTy ; return FLOAT; }
YY_BREAK
case 59:
YY_RULE_SETUP
#line 252 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 252 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::DoubleTy; return DOUBLE; }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 253 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 253 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::LabelTy ; return LABEL; }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 254 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 254 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return TYPE; }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 255 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 255 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return OPAQUE; }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 257 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 257 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Add, ADD); }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 258 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 258 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Sub, SUB); }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 259 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 259 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Mul, MUL); }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 260 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 260 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(BinaryOpVal, UDiv, UDIV); }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 261 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 261 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, UDiv, UDIV); }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 262 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 262 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SDiv, SDIV); }
YY_BREAK
case 69:
YY_RULE_SETUP
#line 263 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 263 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FDiv, FDIV); }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 264 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 264 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(BinaryOpVal, URem, UREM); }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 265 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 265 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, URem, UREM); }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 266 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 266 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SRem, SREM); }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 267 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 267 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FRem, FREM); }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 268 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 268 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, And, AND); }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 269 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 269 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Or , OR ); }
YY_BREAK
case 76:
YY_RULE_SETUP
#line 270 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 270 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Xor, XOR); }
YY_BREAK
case 77:
YY_RULE_SETUP
#line 271 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 271 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
YY_BREAK
case 78:
YY_RULE_SETUP
#line 272 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 272 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
YY_BREAK
case 79:
YY_RULE_SETUP
#line 273 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 273 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
YY_BREAK
case 80:
YY_RULE_SETUP
#line 274 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 274 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 275 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 275 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
YY_BREAK
case 82:
YY_RULE_SETUP
#line 276 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 276 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 278 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 278 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
YY_BREAK
case 84:
YY_RULE_SETUP
#line 279 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 279 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Call, CALL); }
YY_BREAK
case 85:
YY_RULE_SETUP
#line 280 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 280 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Cast, CAST); }
YY_BREAK
case 86:
YY_RULE_SETUP
#line 281 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 281 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Select, SELECT); }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 282 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 282 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Shl, SHL); }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 283 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 283 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Shr, SHR); }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 284 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 284 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return VANEXT_old; }
YY_BREAK
case 90:
YY_RULE_SETUP
#line 285 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 285 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return VAARG_old; }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 286 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 286 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
YY_BREAK
case 92:
YY_RULE_SETUP
#line 287 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 287 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Ret, RET); }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 288 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 288 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Br, BR); }
YY_BREAK
case 94:
YY_RULE_SETUP
#line 289 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 289 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Switch, SWITCH); }
YY_BREAK
case 95:
YY_RULE_SETUP
#line 290 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 290 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Invoke, INVOKE); }
YY_BREAK
case 96:
YY_RULE_SETUP
#line 291 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 291 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
YY_BREAK
case 97:
YY_RULE_SETUP
#line 292 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 292 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
YY_BREAK
case 98:
YY_RULE_SETUP
#line 294 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 294 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Malloc, MALLOC); }
YY_BREAK
case 99:
YY_RULE_SETUP
#line 295 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 295 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 296 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 296 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Free, FREE); }
YY_BREAK
case 101:
YY_RULE_SETUP
#line 297 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 297 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Load, LOAD); }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 298 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 298 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Store, STORE); }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 299 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 299 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 301 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 301 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 302 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 302 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
YY_BREAK
case 106:
YY_RULE_SETUP
#line 303 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 303 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 306 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 306 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
UnEscapeLexed(yytext+1);
llvmAsmlval.StrVal = strdup(yytext+1); // Skip %
@@ -1791,7 +1782,7 @@ YY_RULE_SETUP
YY_BREAK
case 108:
YY_RULE_SETUP
#line 311 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 311 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
yytext[strlen(yytext)-1] = 0; // nuke colon
UnEscapeLexed(yytext);
@@ -1801,7 +1792,7 @@ YY_RULE_SETUP
YY_BREAK
case 109:
YY_RULE_SETUP
#line 317 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 317 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
yytext[strlen(yytext)-2] = 0; // nuke colon, end quote
UnEscapeLexed(yytext+1);
@@ -1811,7 +1802,7 @@ YY_RULE_SETUP
YY_BREAK
case 110:
YY_RULE_SETUP
#line 324 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 324 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.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
@@ -1824,12 +1815,12 @@ YY_RULE_SETUP
YY_BREAK
case 111:
YY_RULE_SETUP
#line 335 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 335 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 336 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 336 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
uint64_t Val = atoull(yytext+1);
// +1: we have bigger negative range
@@ -1841,7 +1832,7 @@ YY_RULE_SETUP
YY_BREAK
case 113:
YY_RULE_SETUP
#line 344 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 344 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
@@ -1849,7 +1840,7 @@ YY_RULE_SETUP
YY_BREAK
case 114:
YY_RULE_SETUP
#line 349 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 349 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
uint64_t Val = atoull(yytext+1);
if ((unsigned)Val != Val)
@@ -1860,7 +1851,7 @@ YY_RULE_SETUP
YY_BREAK
case 115:
YY_RULE_SETUP
#line 356 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 356 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
uint64_t Val = atoull(yytext+2);
// +1: we have bigger negative range
@@ -1872,16 +1863,16 @@ YY_RULE_SETUP
YY_BREAK
case 116:
YY_RULE_SETUP
#line 365 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 365 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
YY_BREAK
case 117:
YY_RULE_SETUP
#line 366 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 366 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 368 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 368 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{
/* Make sure to free the internal buffers for flex when we are
* done reading our input!
@@ -1892,20 +1883,20 @@ case YY_STATE_EOF(INITIAL):
YY_BREAK
case 118:
YY_RULE_SETUP
#line 376 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 376 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ /* Ignore whitespace */ }
YY_BREAK
case 119:
YY_RULE_SETUP
#line 377 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 377 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
{ return yytext[0]; }
YY_BREAK
case 120:
YY_RULE_SETUP
#line 379 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 379 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
#line 1909 "Lexer.cpp"
#line 1900 "Lexer.cpp"
case YY_END_OF_BUFFER:
{
@@ -2281,7 +2272,6 @@ register char *yy_bp;
#endif /* ifndef YY_NO_UNPUT */
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput()
#else
@@ -2355,7 +2345,7 @@ static int input()
return c;
}
#endif /* YY_NO_INPUT */
#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
@@ -2466,6 +2456,11 @@ YY_BUFFER_STATE b;
}
#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern int isatty YY_PROTO(( int ));
#endif
#endif
#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
@@ -2783,5 +2778,5 @@ int main()
return 0;
}
#endif
#line 379 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
#line 379 "/Users/sabre/cvs/llvm/lib/AsmParser/Lexer.l"

File diff suppressed because it is too large Load Diff

View File

@@ -2102,8 +2102,8 @@ Function : BasicBlockList END {
};
FnDeclareLinkage: /*default*/ |
DLLIMPORT { CurFun.Linkage = GlobalValue::DLLImportLinkage } |
EXTERN_WEAK { CurFun.Linkage = GlobalValue::DLLImportLinkage };
DLLIMPORT { CurFun.Linkage = GlobalValue::DLLImportLinkage; } |
EXTERN_WEAK { CurFun.Linkage = GlobalValue::DLLImportLinkage; };
FunctionProto : DECLARE { CurFun.isDeclare = true; } FnDeclareLinkage FunctionHeaderH {
$$ = CurFun.CurrentFunction;

View File

@@ -2102,8 +2102,8 @@ Function : BasicBlockList END {
};
FnDeclareLinkage: /*default*/ |
DLLIMPORT { CurFun.Linkage = GlobalValue::DLLImportLinkage } |
EXTERN_WEAK { CurFun.Linkage = GlobalValue::DLLImportLinkage };
DLLIMPORT { CurFun.Linkage = GlobalValue::DLLImportLinkage; } |
EXTERN_WEAK { CurFun.Linkage = GlobalValue::DLLImportLinkage; };
FunctionProto : DECLARE { CurFun.isDeclare = true; } FnDeclareLinkage FunctionHeaderH {
$$ = CurFun.CurrentFunction;

View File

@@ -2418,6 +2418,8 @@ private:
/// EmitFunctionDebugFrame - Emit per function frame info into a debug frame
/// section.
void EmitFunctionDebugFrame() {
if (!TAI->getDwarfRequiresFrameSection())
return;
// Start the dwarf frame section.
Asm->SwitchToDataSection(TAI->getDwarfFrameSection());

View File

@@ -1608,7 +1608,7 @@ SDOperand DAGCombiner::visitXOR(SDNode *N) {
abort();
}
// fold !(x or y) -> (!x and !y) iff x or y are setcc
if (N1C && N1C->getValue() == 1 &&
if (N1C && N1C->getValue() == 1 && VT == MVT::i1 &&
(N0.getOpcode() == ISD::OR || N0.getOpcode() == ISD::AND)) {
SDOperand LHS = N0.getOperand(0), RHS = N0.getOperand(1);
if (isOneUseSetCC(RHS) || isOneUseSetCC(LHS)) {

View File

@@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/Support/Allocator.h"
#include "llvm/Support/DataTypes.h"
#include <iostream>
using namespace llvm;

View File

@@ -814,6 +814,7 @@ bool X86DAGToDAGISel::SelectScalarSSELoad(SDOperand Root, SDOperand Pred,
InChain = N.getOperand(0).getValue(1);
if (ISD::isNON_EXTLoad(InChain.Val) &&
InChain.getValue(0).hasOneUse() &&
N.hasOneUse() &&
CanBeFoldedBy(N.Val, Pred.Val, Root.Val)) {
LoadSDNode *LD = cast<LoadSDNode>(InChain);
if (!SelectAddr(LD->getBasePtr(), Base, Scale, Index, Disp))

View File

@@ -516,10 +516,9 @@ SDOperand X86TargetLowering::LowerCCCArguments(SDOperand Op, SelectionDAG &DAG)
BytesToPopOnReturn = 0; // Callee pops nothing.
BytesCallerReserves = ArgOffset;
// If this is a struct return on Darwin/X86, the callee pops the hidden struct
// pointer.
if (MF.getFunction()->getCallingConv() == CallingConv::CSRet &&
Subtarget->isTargetDarwin())
// If this is a struct return on, the callee pops the hidden struct
// pointer. This is common for Darwin/X86, Linux & Mingw32 targets.
if (MF.getFunction()->getCallingConv() == CallingConv::CSRet)
BytesToPopOnReturn = 4;
// Return the new list of results.
@@ -680,9 +679,10 @@ SDOperand X86TargetLowering::LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG) {
// Create the CALLSEQ_END node.
unsigned NumBytesForCalleeToPush = 0;
// If this is is a call to a struct-return function on Darwin/X86, the callee
// If this is is a call to a struct-return function, the callee
// pops the hidden struct pointer, so we have to push it back.
if (CallingConv == CallingConv::CSRet && Subtarget->isTargetDarwin())
// This is common for Darwin/X86, Linux & Mingw32 targets.
if (CallingConv == CallingConv::CSRet)
NumBytesForCalleeToPush = 4;
NodeTys.clear();
@@ -4967,6 +4967,8 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
case X86ISD::S2VEC: return "X86ISD::S2VEC";
case X86ISD::PEXTRW: return "X86ISD::PEXTRW";
case X86ISD::PINSRW: return "X86ISD::PINSRW";
case X86ISD::FMAX: return "X86ISD::FMAX";
case X86ISD::FMIN: return "X86ISD::FMIN";
}
}
@@ -5347,7 +5349,7 @@ static SDOperand PerformSELECTCombine(SDNode *N, SelectionDAG &DAG,
SDOperand RHS = N->getOperand(2);
ISD::CondCode CC = cast<CondCodeSDNode>(Cond.getOperand(2))->get();
unsigned IntNo = 0;
unsigned Opcode = 0;
if (LHS == Cond.getOperand(0) && RHS == Cond.getOperand(1)) {
switch (CC) {
default: break;
@@ -5358,9 +5360,8 @@ static SDOperand PerformSELECTCombine(SDNode *N, SelectionDAG &DAG,
// FALL THROUGH.
case ISD::SETOLT: // (X olt/lt Y) ? X : Y -> min
case ISD::SETLT:
IntNo = LHS.getValueType() == MVT::f32 ? Intrinsic::x86_sse_min_ss :
Intrinsic::x86_sse2_min_sd;
break;
Opcode = X86ISD::FMIN;
break;
case ISD::SETOGT: // (X > Y) ? X : Y -> max
case ISD::SETUGT:
@@ -5369,9 +5370,8 @@ static SDOperand PerformSELECTCombine(SDNode *N, SelectionDAG &DAG,
// FALL THROUGH.
case ISD::SETUGE: // (X uge/ge Y) ? X : Y -> max
case ISD::SETGE:
IntNo = LHS.getValueType() == MVT::f32 ? Intrinsic::x86_sse_max_ss :
Intrinsic::x86_sse2_max_sd;
break;
Opcode = X86ISD::FMAX;
break;
}
} else if (LHS == Cond.getOperand(1) && RHS == Cond.getOperand(0)) {
switch (CC) {
@@ -5383,9 +5383,8 @@ static SDOperand PerformSELECTCombine(SDNode *N, SelectionDAG &DAG,
// FALL THROUGH.
case ISD::SETUGE: // (X uge/ge Y) ? Y : X -> min
case ISD::SETGE:
IntNo = LHS.getValueType() == MVT::f32 ? Intrinsic::x86_sse_min_ss :
Intrinsic::x86_sse2_min_sd;
break;
Opcode = X86ISD::FMIN;
break;
case ISD::SETOLE: // (X <= Y) ? Y : X -> max
case ISD::SETULE:
@@ -5394,30 +5393,12 @@ static SDOperand PerformSELECTCombine(SDNode *N, SelectionDAG &DAG,
// FALL THROUGH.
case ISD::SETOLT: // (X olt/lt Y) ? Y : X -> max
case ISD::SETLT:
IntNo = LHS.getValueType() == MVT::f32 ? Intrinsic::x86_sse_max_ss :
Intrinsic::x86_sse2_max_sd;
break;
Opcode = X86ISD::FMAX;
break;
}
}
// minss/maxss take a v4f32 operand.
if (IntNo) {
if (LHS.getValueType() == MVT::f32) {
LHS = DAG.getNode(ISD::SCALAR_TO_VECTOR, MVT::v4f32, LHS);
RHS = DAG.getNode(ISD::SCALAR_TO_VECTOR, MVT::v4f32, RHS);
} else {
LHS = DAG.getNode(ISD::SCALAR_TO_VECTOR, MVT::v2f64, LHS);
RHS = DAG.getNode(ISD::SCALAR_TO_VECTOR, MVT::v2f64, RHS);
}
MVT::ValueType PtrTy = Subtarget->is64Bit() ? MVT::i64 : MVT::i32;
SDOperand IntNoN = DAG.getConstant(IntNo, PtrTy);
SDOperand Val = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, LHS.getValueType(),
IntNoN, LHS, RHS);
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, N->getValueType(0), Val,
DAG.getConstant(0, PtrTy));
}
if (Opcode)
return DAG.getNode(Opcode, N->getValueType(0), LHS, RHS);
}
}

View File

@@ -160,7 +160,11 @@ namespace llvm {
/// PINSRW - Insert the lower 16-bits of a 32-bit value to a vector,
/// corresponds to X86::PINSRW.
PINSRW
PINSRW,
/// FMAX, FMIN - Floating point max and min.
///
FMAX, FMIN
};
}

View File

@@ -20,6 +20,8 @@
def X86loadp : SDNode<"X86ISD::LOAD_PACK", SDTLoad, [SDNPHasChain]>;
def X86loadu : SDNode<"X86ISD::LOAD_UA", SDTLoad, [SDNPHasChain]>;
def X86fmin : SDNode<"X86ISD::FMIN", SDTFPBinOp>;
def X86fmax : SDNode<"X86ISD::FMAX", SDTFPBinOp>;
def X86fand : SDNode<"X86ISD::FAND", SDTFPBinOp,
[SDNPCommutative, SDNPAssociative]>;
def X86fxor : SDNode<"X86ISD::FXOR", SDTFPBinOp,
@@ -375,6 +377,10 @@ defm SUB : scalar_sse12_fp_binop_rm<0x5C, "sub", fsub,
int_x86_sse_sub_ss, int_x86_sse2_sub_sd>;
defm DIV : scalar_sse12_fp_binop_rm<0x5E, "div", fdiv,
int_x86_sse_div_ss, int_x86_sse2_div_sd>;
defm MAX : scalar_sse12_fp_binop_rm<0x5F, "max", X86fmax,
int_x86_sse_max_ss, int_x86_sse2_max_sd>;
defm MIN : scalar_sse12_fp_binop_rm<0x5D, "min", X86fmin,
int_x86_sse_min_ss, int_x86_sse2_min_sd>;
def SQRTSSr : SSI<0x51, MRMSrcReg, (ops FR32:$dst, FR32:$src),
@@ -390,24 +396,6 @@ def SQRTSDm : SDI<0x51, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
"sqrtsd {$src, $dst|$dst, $src}",
[(set FR64:$dst, (fsqrt (loadf64 addr:$src)))]>;
class SS_Intrr<bits<8> o, string OpcodeStr, Intrinsic IntId>
: SSI<o, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
!strconcat(OpcodeStr, " {$src2, $dst|$dst, $src2}"),
[(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))]>;
class SS_Intrm<bits<8> o, string OpcodeStr, Intrinsic IntId>
: SSI<o, MRMSrcMem, (ops VR128:$dst, VR128:$src1, ssmem:$src2),
!strconcat(OpcodeStr, " {$src2, $dst|$dst, $src2}"),
[(set VR128:$dst, (v4f32 (IntId VR128:$src1, sse_load_f32:$src2)))]>;
class SD_Intrr<bits<8> o, string OpcodeStr, Intrinsic IntId>
: SDI<o, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
!strconcat(OpcodeStr, " {$src2, $dst|$dst, $src2}"),
[(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))]>;
class SD_Intrm<bits<8> o, string OpcodeStr, Intrinsic IntId>
: SDI<o, MRMSrcMem, (ops VR128:$dst, VR128:$src1, sdmem:$src2),
!strconcat(OpcodeStr, " {$src2, $dst|$dst, $src2}"),
[(set VR128:$dst, (v2f64 (IntId VR128:$src1, sse_load_f64:$src2)))]>;
// Aliases to match intrinsics which expect XMM operand(s).
defm SQRTSS_Int : SS_IntUnary<0x51, "sqrtss" , int_x86_sse_sqrt_ss>;
@@ -415,19 +403,6 @@ defm SQRTSD_Int : SD_IntUnary<0x51, "sqrtsd" , int_x86_sse2_sqrt_sd>;
defm RSQRTSS_Int : SS_IntUnary<0x52, "rsqrtss", int_x86_sse_rsqrt_ss>;
defm RCPSS_Int : SS_IntUnary<0x53, "rcpss" , int_x86_sse_rcp_ss>;
let isTwoAddress = 1 in {
let isCommutable = 1 in {
def Int_MAXSSrr : SS_Intrr<0x5F, "maxss", int_x86_sse_max_ss>;
def Int_MAXSDrr : SD_Intrr<0x5F, "maxsd", int_x86_sse2_max_sd>;
def Int_MINSSrr : SS_Intrr<0x5D, "minss", int_x86_sse_min_ss>;
def Int_MINSDrr : SD_Intrr<0x5D, "minsd", int_x86_sse2_min_sd>;
}
def Int_MAXSSrm : SS_Intrm<0x5F, "maxss", int_x86_sse_max_ss>;
def Int_MAXSDrm : SD_Intrm<0x5F, "maxsd", int_x86_sse2_max_sd>;
def Int_MINSSrm : SS_Intrm<0x5D, "minss", int_x86_sse_min_ss>;
def Int_MINSDrm : SD_Intrm<0x5D, "minsd", int_x86_sse2_min_sd>;
}
// Conversion instructions
def CVTTSS2SIrr: SSI<0x2C, MRMSrcReg, (ops GR32:$dst, FR32:$src),
"cvttss2si {$src, $dst|$dst, $src}",

View File

@@ -112,8 +112,13 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
// Calls to external functions are never inlinable.
if (Callee->isExternal() ||
CallSites[CSi].getInstruction()->getParent()->getParent() ==Callee){
std::swap(CallSites[CSi], CallSites.back());
CallSites.pop_back();
if (SCC.size() == 1) {
std::swap(CallSites[CSi], CallSites.back());
CallSites.pop_back();
} else {
// Keep the 'in SCC / not in SCC' boundary correct.
CallSites.erase(CallSites.begin()+CSi);
}
--CSi;
continue;
}
@@ -131,9 +136,16 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
// Attempt to inline the function...
if (InlineCallIfPossible(CS, CG, SCCFunctions)) {
// Remove this call site from the list.
std::swap(CallSites[CSi], CallSites.back());
CallSites.pop_back();
// Remove this call site from the list. If possible, use
// swap/pop_back for efficiency, but do not use it if doing so would
// move a call site to a function in this SCC before the
// 'FirstCallInSCC' barrier.
if (SCC.size() == 1) {
std::swap(CallSites[CSi], CallSites.back());
CallSites.pop_back();
} else {
CallSites.erase(CallSites.begin()+CSi);
}
--CSi;
++NumInlined;

View File

@@ -1,5 +1,5 @@
// RUN: %llvmgcc -xc++ -S -o - %s | not grep weak
// XFAIL: *
// XFAIL: llvmgcc4
template<class T>
void thefunc();

View File

@@ -1,3 +1,4 @@
// XFAIL: llvmgcc3
// RUN: %llvmgxx -O0 -emit-llvm -S -g -o - %s | grep 'uint 1,' &&
// RUN: %llvmgxx -O0 -emit-llvm -S -g -o - %s | grep 'uint 2,'

View File

@@ -1,5 +1,6 @@
// RUN: %llvmgcc %s -S -o -
// PR854
// XFAIL: llvmgcc3
struct kernel_symbol {
unsigned long value;
};

View File

@@ -1,6 +1,7 @@
// RUN: %llvmgcc %s -S -o /dev/null &&
// RUN: %llvmgcc %s -S -o - | grep 'ext: xorl %eax, eax; movl' &&
// RUN: %llvmgcc %s -S -o - | grep 'nonext: xorl %eax, %eax; mov'
// XFAIL: llvmgcc3
// PR924
void bar() {