Compare commits
26 Commits
llvmorg-5.
...
llvmorg-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
858bfdcf84 | ||
|
|
76e76afab4 | ||
|
|
bb869226b8 | ||
|
|
3b2ea9b062 | ||
|
|
b5b06cce61 | ||
|
|
50cabc638a | ||
|
|
53a422c20c | ||
|
|
1a5b38489c | ||
|
|
0c669f27d0 | ||
|
|
56237d03c7 | ||
|
|
df39322c24 | ||
|
|
e3180cf59a | ||
|
|
2c72a34c49 | ||
|
|
f9fc189950 | ||
|
|
0787e1a48a | ||
|
|
f33d66fe40 | ||
|
|
bad3d39af3 | ||
|
|
0661dc25f5 | ||
|
|
ad56d30c90 | ||
|
|
b0fee64324 | ||
|
|
348cda6881 | ||
|
|
532aeb4d55 | ||
|
|
fc9597dbbc | ||
|
|
9200d055b5 | ||
|
|
c739b273e9 | ||
|
|
e01fd13776 |
@@ -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)
|
||||
|
||||
@@ -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
18
llvm/configure
vendored
@@ -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'`\\"
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 && 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 && 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 && 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 & 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 & 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>
|
||||
|
||||
<!-- *********************************************************************** -->
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 & 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>
|
||||
|
||||
<!--=======================================================================-->
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include <iostream>
|
||||
using namespace llvm;
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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}",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %llvmgcc -xc++ -S -o - %s | not grep weak
|
||||
// XFAIL: *
|
||||
// XFAIL: llvmgcc4
|
||||
|
||||
template<class T>
|
||||
void thefunc();
|
||||
|
||||
@@ -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,'
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// RUN: %llvmgcc %s -S -o -
|
||||
// PR854
|
||||
// XFAIL: llvmgcc3
|
||||
struct kernel_symbol {
|
||||
unsigned long value;
|
||||
};
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user