Home | History | Annotate | Download | only in docs
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
      2                       "http://www.w3.org/TR/html4/strict.dtd">
      3 <html>
      4 <head>
      5   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      6   <title>LLVM Testing Infrastructure Guide</title>
      7   <link rel="stylesheet" href="llvm.css" type="text/css">
      8 </head>
      9 <body>
     10       
     11 <h1>
     12   LLVM Testing Infrastructure Guide
     13 </h1>
     14 
     15 <ol>
     16   <li><a href="#overview">Overview</a></li>
     17   <li><a href="#requirements">Requirements</a></li>
     18   <li><a href="#org">LLVM testing infrastructure organization</a>
     19     <ul>
     20       <li><a href="#regressiontests">Regression tests</a></li>
     21       <li><a href="#testsuite"><tt>test-suite</tt></a></li>
     22       <li><a href="#debuginfotests">Debugging Information tests</a></li>
     23     </ul>
     24   </li>
     25   <li><a href="#quick">Quick start</a>
     26     <ul>
     27       <li><a href="#quickregressiontests">Regression tests</a></li>
     28       <li><a href="#quickdebuginfotests">Debugging Information tests</a></li>
     29    </ul>
     30   </li>
     31   <li><a href="#rtstructure">Regression test structure</a>
     32     <ul>
     33       <li><a href="#rtcustom">Writing new regression tests</a></li>
     34       <li><a href="#FileCheck">The FileCheck utility</a></li>
     35       <li><a href="#rtvars">Variables and substitutions</a></li>
     36       <li><a href="#rtfeatures">Other features</a></li>
     37    </ul>
     38   </li>
     39   <li><a href="#testsuiteoverview"><tt>test-suite</tt> Overview</a>
     40     <ul>
     41       <li><a href="#testsuitequickstart"><tt>test-suite</tt> Quickstart</a></li>
     42       <li><a href="#testsuitemakefiles"><tt>test-suite</tt> Makefiles</a></li>
     43    </ul>
     44   </li>
     45 </ol>
     46 
     47 <div class="doc_author">
     48   <p>Written by John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner</p>
     49 </div>
     50 
     51 <!--=========================================================================-->
     52 <h2><a name="overview">Overview</a></h2>
     53 <!--=========================================================================-->
     54 
     55 <div>
     56 
     57 <p>This document is the reference manual for the LLVM testing infrastructure. It
     58 documents the structure of the LLVM testing infrastructure, the tools needed to
     59 use it, and how to add and run tests.</p>
     60 
     61 </div>
     62 
     63 <!--=========================================================================-->
     64 <h2><a name="requirements">Requirements</a></h2>
     65 <!--=========================================================================-->
     66 
     67 <div>
     68 
     69 <p>In order to use the LLVM testing infrastructure, you will need all of the
     70 software required to build LLVM, as well
     71 as <a href="http://python.org">Python</a> 2.4 or later.</p>
     72 
     73 </div>
     74 
     75 <!--=========================================================================-->
     76 <h2><a name="org">LLVM testing infrastructure organization</a></h2>
     77 <!--=========================================================================-->
     78 
     79 <div>
     80 
     81 <p>The LLVM testing infrastructure contains two major categories of tests:
     82 regression tests and whole programs. The regression tests are contained inside
     83 the LLVM repository itself under <tt>llvm/test</tt> and are expected to always
     84 pass -- they should be run before every commit.</p>
     85 
     86 <p>The whole programs tests are referred to as the "LLVM test suite" (or
     87 "test-suite") and are in the <tt>test-suite</tt> module in subversion. For
     88 historical reasons, these tests are also referred to as the "nightly tests" in
     89 places, which is less ambiguous than "test-suite" and remains in use although we
     90 run them much more often than nightly.</p>
     91 
     92 <!-- _______________________________________________________________________ -->
     93 <h3><a name="regressiontests">Regression tests</a></h3>
     94 <!-- _______________________________________________________________________ -->
     95 
     96 <div>
     97 
     98 <p>The regression tests are small pieces of code that test a specific feature of
     99 LLVM or trigger a specific bug in LLVM.  They are usually written in LLVM
    100 assembly language, but can be written in other languages if the test targets a
    101 particular language front end (and the appropriate <tt>--with-llvmgcc</tt>
    102 options were used at <tt>configure</tt> time of the <tt>llvm</tt> module). These
    103 tests are driven by the 'lit' testing tool, which is part of LLVM.</p>
    104 
    105 <p>These code fragments are not complete programs. The code generated
    106 from them is never executed to determine correct behavior.</p>
    107 
    108 <p>These code fragment tests are located in the <tt>llvm/test</tt>
    109 directory.</p>
    110 
    111 <p>Typically when a bug is found in LLVM, a regression test containing 
    112 just enough code to reproduce the problem should be written and placed 
    113 somewhere underneath this directory.  In most cases, this will be a small 
    114 piece of LLVM assembly language code, often distilled from an actual 
    115 application or benchmark.</p>
    116 
    117 </div>
    118 
    119 <!-- _______________________________________________________________________ -->
    120 <h3><a name="testsuite"><tt>test-suite</tt></a></h3>
    121 <!-- _______________________________________________________________________ -->
    122 
    123 <div>
    124 
    125 <p>The test suite contains whole programs, which are pieces of code which can be
    126 compiled and linked into a stand-alone program that can be executed.  These
    127 programs are generally written in high level languages such as C or C++.</p>
    128 
    129 <p>These programs are compiled using a user specified compiler and set of flags,
    130 and then executed to capture the program output and timing information.  The
    131 output of these programs is compared to a reference output to ensure that the
    132 program is being compiled correctly.</p>
    133 
    134 <p>In addition to compiling and executing programs, whole program tests serve as
    135 a way of benchmarking LLVM performance, both in terms of the efficiency of the
    136 programs generated as well as the speed with which LLVM compiles, optimizes, and
    137 generates code.</p>
    138 
    139 <p>The test-suite is located in the <tt>test-suite</tt> Subversion module.</p> 
    140 
    141 </div>
    142 
    143 <!-- _______________________________________________________________________ -->
    144 <h3><a name="debuginfotests">Debugging Information tests</a></h3>
    145 <!-- _______________________________________________________________________ -->
    146 
    147 <div>
    148 
    149 <p>The test suite contains tests to check quality of debugging information.
    150 The test are written in C based languages or in LLVM assembly language. </p>
    151 
    152 <p>These tests are compiled and run under a debugger. The debugger output
    153 is checked to validate of debugging information. See README.txt in the 
    154 test suite for more information . This test suite is located in the 
    155 <tt>debuginfo-tests</tt> Subversion module. </p>
    156 
    157 </div>
    158 
    159 </div>
    160 
    161 <!--=========================================================================-->
    162 <h2><a name="quick">Quick start</a></h2>
    163 <!--=========================================================================-->
    164 
    165 <div>
    166 
    167   <p>The tests are located in two separate Subversion modules. The regressions
    168   tests are in the main "llvm" module under the directory
    169   <tt>llvm/test</tt> (so you get these tests for free with the main llvm
    170   tree). Use "make check-all" to run the regression tests after building
    171   LLVM.</p>
    172 
    173   <p>The more comprehensive test suite that includes whole programs in C and C++
    174   is in the <tt>test-suite</tt>
    175   module. See <a href="#testsuitequickstart"><tt>test-suite</tt> Quickstart</a>
    176   for more information on running these tests.</p>
    177 
    178 <!-- _______________________________________________________________________ -->
    179 <h3><a name="quickregressiontests">Regression tests</a></h3>
    180 <div>
    181 <!-- _______________________________________________________________________ -->
    182 <p>To run all of the LLVM regression tests, use master Makefile in
    183  the <tt>llvm/test</tt> directory:</p>
    184 
    185 <div class="doc_code">
    186 <pre>
    187 % gmake -C llvm/test
    188 </pre>
    189 </div>
    190 
    191 <p>or</p>
    192 
    193 <div class="doc_code">
    194 <pre>
    195 % gmake check
    196 </pre>
    197 </div>
    198 
    199 <p>If you have <a href="http://clang.llvm.org/">Clang</a> checked out and built,
    200 you can run the LLVM and Clang tests simultaneously using:</p>
    201 
    202 <p>or</p>
    203 
    204 <div class="doc_code">
    205 <pre>
    206 % gmake check-all
    207 </pre>
    208 </div>
    209 
    210 <p>To run the tests with Valgrind (Memcheck by default), just append
    211 <tt>VG=1</tt> to the commands above, e.g.:</p>
    212 
    213 <div class="doc_code">
    214 <pre>
    215 % gmake check VG=1
    216 </pre>
    217 </div>
    218 
    219 <p>To run individual tests or subsets of tests, you can use the 'llvm-lit'
    220 script which is built as part of LLVM. For example, to run the
    221 'Integer/BitCast.ll' test by itself you can run:</p>
    222 
    223 <div class="doc_code">
    224 <pre>
    225 % llvm-lit ~/llvm/test/Integer/BitCast.ll 
    226 </pre>
    227 </div>
    228 
    229 <p>or to run all of the ARM CodeGen tests:</p>
    230 
    231 <div class="doc_code">
    232 <pre>
    233 % llvm-lit ~/llvm/test/CodeGen/ARM
    234 </pre>
    235 </div>
    236 
    237 <p>For more information on using the 'lit' tool, see 'llvm-lit --help' or the
    238 'lit' man page.</p>
    239 
    240 </div>
    241 
    242 <!-- _______________________________________________________________________ -->
    243 <h3><a name="quickdebuginfotests">Debugging Information tests</a></h3>
    244 <div>
    245 <!-- _______________________________________________________________________ -->
    246 <div>
    247 
    248 <p> To run debugging information tests simply checkout the tests inside
    249 clang/test directory. </p>
    250 
    251 <div class="doc_code">
    252 <pre>
    253 %cd clang/test
    254 % svn co http://llvm.org/svn/llvm-project/debuginfo-tests/trunk debuginfo-tests
    255 </pre>
    256 </div>
    257 
    258 <p> These tests are already set up to run as part of clang regression tests.</p>
    259 
    260 </div>
    261 
    262 </div>
    263 
    264 </div>
    265 
    266 <!--=========================================================================-->
    267 <h2><a name="rtstructure">Regression test structure</a></h2>
    268 <!--=========================================================================-->
    269 <div>
    270   <p>The LLVM regression tests are driven by 'lit' and are located in
    271   the <tt>llvm/test</tt> directory.
    272 
    273   <p>This directory contains a large array of small tests
    274   that exercise various features of LLVM and to ensure that regressions do not
    275   occur. The directory is broken into several sub-directories, each focused on
    276   a particular area of LLVM. A few of the important ones are:</p>
    277 
    278   <ul>
    279     <li><tt>Analysis</tt>: checks Analysis passes.</li>
    280     <li><tt>Archive</tt>: checks the Archive library.</li>
    281     <li><tt>Assembler</tt>: checks Assembly reader/writer functionality.</li>
    282     <li><tt>Bitcode</tt>: checks Bitcode reader/writer functionality.</li>
    283     <li><tt>CodeGen</tt>: checks code generation and each target.</li>
    284     <li><tt>Features</tt>: checks various features of the LLVM language.</li>
    285     <li><tt>Linker</tt>: tests bitcode linking.</li>
    286     <li><tt>Transforms</tt>: tests each of the scalar, IPO, and utility
    287     transforms to ensure they make the right transformations.</li>
    288     <li><tt>Verifier</tt>: tests the IR verifier.</li>
    289   </ul>
    290 
    291 <!-- _______________________________________________________________________ -->
    292 <h3><a name="rtcustom">Writing new regression tests</a></h3>
    293 <!-- _______________________________________________________________________ -->
    294 <div>
    295   <p>The regression test structure is very simple, but does require some
    296   information to be set. This information is gathered via <tt>configure</tt> and
    297   is written to a file, <tt>lit.site.cfg</tt>
    298   in <tt>llvm/test</tt>. The <tt>llvm/test</tt> Makefile does this work for
    299   you.</p>
    300 
    301   <p>In order for the regression tests to work, each directory of tests must
    302   have a <tt>lit.local.cfg</tt> file. Lit looks for this file to determine how
    303   to run the tests. This file is just Python code and thus is very flexible,
    304   but we've standardized it for the LLVM regression tests. If you're adding a
    305   directory of tests, just copy <tt>lit.local.cfg</tt> from another directory to
    306   get running. The standard <tt>lit.local.cfg</tt> simply specifies which files
    307   to look in for tests. Any directory that contains only directories does not
    308   need the <tt>lit.local.cfg</tt> file. Read the
    309   <a href="http://llvm.org/cmds/lit.html">Lit documentation</a> for more
    310   information. </p>
    311 
    312   <p>The <tt>llvm-runtests</tt> function looks at each file that is passed to
    313   it and gathers any lines together that match "RUN:". These are the "RUN" lines
    314   that specify how the test is to be run. So, each test script must contain
    315   RUN lines if it is to do anything. If there are no RUN lines, the
    316   <tt>llvm-runtests</tt> function will issue an error and the test will
    317   fail.</p>
    318 
    319   <p>RUN lines are specified in the comments of the test program using the 
    320   keyword <tt>RUN</tt> followed by a colon, and lastly the command (pipeline) 
    321   to execute.  Together, these lines form the "script" that 
    322   <tt>llvm-runtests</tt> executes to run the test case.  The syntax of the
    323   RUN lines is similar to a shell's syntax for pipelines including I/O
    324   redirection and variable substitution.  However, even though these lines 
    325   may <i>look</i> like a shell script, they are not. RUN lines are interpreted 
    326   directly by the Tcl <tt>exec</tt> command. They are never executed by a 
    327   shell. Consequently the syntax differs from normal shell script syntax in a 
    328   few ways.  You can specify as many RUN lines as needed.</p>
    329 
    330   <p>lit performs substitution on each RUN line to replace LLVM tool
    331   names with the full paths to the executable built for each tool (in
    332   $(LLVM_OBJ_ROOT)/$(BuildMode)/bin).  This ensures that lit does not
    333   invoke any stray LLVM tools in the user's path during testing.</p>
    334 
    335   <p>Each RUN line is executed on its own, distinct from other lines unless
    336   its last character is <tt>\</tt>. This continuation character causes the RUN
    337   line to be concatenated with the next one. In this way you can build up long
    338   pipelines of commands without making huge line lengths. The lines ending in
    339   <tt>\</tt> are concatenated until a RUN line that doesn't end in <tt>\</tt> is
    340   found. This concatenated set of RUN lines then constitutes one execution. 
    341   Tcl will substitute variables and arrange for the pipeline to be executed. If
    342   any process in the pipeline fails, the entire line (and test case) fails too.
    343   </p>
    344 
    345   <p> Below is an example of legal RUN lines in a <tt>.ll</tt> file:</p>
    346 
    347 <div class="doc_code">
    348 <pre>
    349 ; RUN: llvm-as &lt; %s | llvm-dis &gt; %t1
    350 ; RUN: llvm-dis &lt; %s.bc-13 &gt; %t2
    351 ; RUN: diff %t1 %t2
    352 </pre>
    353 </div>
    354 
    355   <p>As with a Unix shell, the RUN: lines permit pipelines and I/O redirection
    356   to be used. However, the usage is slightly different than for Bash. To check
    357   what's legal, see the documentation for the 
    358   <a href="http://www.tcl.tk/man/tcl8.5/TclCmd/exec.htm#M2">Tcl exec</a>
    359   command and the 
    360   <a href="http://www.tcl.tk/man/tcl8.5/tutorial/Tcl26.html">tutorial</a>. 
    361   The major differences are:</p>
    362   <ul>
    363     <li>You can't do <tt>2&gt;&amp;1</tt>. That will cause Tcl to write to a
    364     file named <tt>&amp;1</tt>. Usually this is done to get stderr to go through
    365     a pipe. You can do that in tcl with <tt>|&amp;</tt> so replace this idiom:
    366     <tt>... 2&gt;&amp;1 | grep</tt> with <tt>... |&amp; grep</tt></li>
    367     <li>You can only redirect to a file, not to another descriptor and not from
    368     a here document.</li>
    369     <li>tcl supports redirecting to open files with the @ syntax but you
    370     shouldn't use that here.</li>
    371   </ul>
    372 
    373   <p>There are some quoting rules that you must pay attention to when writing
    374   your RUN lines. In general nothing needs to be quoted. Tcl won't strip off any
    375   quote characters so they will get passed to the invoked program. For
    376   example:</p>
    377 
    378 <div class="doc_code">
    379 <pre>
    380 ... | grep 'find this string'
    381 </pre>
    382 </div>
    383 
    384   <p>This will fail because the ' characters are passed to grep. This would
    385   instruction grep to look for <tt>'find</tt> in the files <tt>this</tt> and
    386   <tt>string'</tt>. To avoid this use curly braces to tell Tcl that it should
    387   treat everything enclosed as one value. So our example would become:</p>
    388 
    389 <div class="doc_code">
    390 <pre>
    391 ... | grep {find this string}
    392 </pre>
    393 </div>
    394 
    395   <p>Additionally, the characters <tt>[</tt> and <tt>]</tt> are treated 
    396   specially by Tcl. They tell Tcl to interpret the content as a command to
    397   execute. Since these characters are often used in regular expressions this can
    398   have disastrous results and cause the entire test run in a directory to fail.
    399   For example, a common idiom is to look for some basicblock number:</p>
    400 
    401 <div class="doc_code">
    402 <pre>
    403 ... | grep bb[2-8]
    404 </pre>
    405 </div>
    406 
    407   <p>This, however, will cause Tcl to fail because its going to try to execute
    408   a program named "2-8". Instead, what you want is this:</p>
    409 
    410 <div class="doc_code">
    411 <pre>
    412 ... | grep {bb\[2-8\]}
    413 </pre>
    414 </div>
    415 
    416   <p>Finally, if you need to pass the <tt>\</tt> character down to a program,
    417   then it must be doubled. This is another Tcl special character. So, suppose
    418   you had:
    419 
    420 <div class="doc_code">
    421 <pre>
    422 ... | grep 'i32\*'
    423 </pre>
    424 </div>
    425 
    426   <p>This will fail to match what you want (a pointer to i32). First, the
    427   <tt>'</tt> do not get stripped off. Second, the <tt>\</tt> gets stripped off
    428   by Tcl so what grep sees is: <tt>'i32*'</tt>. That's not likely to match
    429   anything. To resolve this you must use <tt>\\</tt> and the <tt>{}</tt>, like
    430   this:</p>
    431 
    432 <div class="doc_code">
    433 <pre>
    434 ... | grep {i32\\*}
    435 </pre>
    436 </div>
    437 
    438 <p>If your system includes GNU <tt>grep</tt>, make sure
    439 that <tt>GREP_OPTIONS</tt> is not set in your environment. Otherwise,
    440 you may get invalid results (both false positives and false
    441 negatives).</p>
    442 
    443 </div>
    444 
    445 <!-- _______________________________________________________________________ -->
    446 <h3><a name="FileCheck">The FileCheck utility</a></h3>
    447 <!-- _______________________________________________________________________ -->
    448 
    449 <div>
    450 
    451 <p>A powerful feature of the RUN: lines is that it allows any arbitrary commands
    452    to be executed as part of the test harness.  While standard (portable) unix
    453    tools like 'grep' work fine on run lines, as you see above, there are a lot
    454    of caveats due to interaction with Tcl syntax, and we want to make sure the
    455    run lines are portable to a wide range of systems.  Another major problem is
    456    that grep is not very good at checking to verify that the output of a tools
    457    contains a series of different output in a specific order.  The FileCheck
    458    tool was designed to help with these problems.</p>
    459 
    460 <p>FileCheck (whose basic command line arguments are described in <a
    461    href="http://llvm.org/cmds/FileCheck.html">the FileCheck man page</a> is
    462    designed to read a file to check from standard input, and the set of things
    463    to verify from a file specified as a command line argument.  A simple example
    464    of using FileCheck from a RUN line looks like this:</p>
    465    
    466 <div class="doc_code">
    467 <pre>
    468 ; RUN: llvm-as &lt; %s | llc -march=x86-64 | <b>FileCheck %s</b>
    469 </pre>
    470 </div>
    471 
    472 <p>This syntax says to pipe the current file ("%s") into llvm-as, pipe that into
    473 llc, then pipe the output of llc into FileCheck.  This means that FileCheck will
    474 be verifying its standard input (the llc output) against the filename argument
    475 specified (the original .ll file specified by "%s").  To see how this works,
    476 let's look at the rest of the .ll file (after the RUN line):</p>
    477 
    478 <div class="doc_code">
    479 <pre>
    480 define void @sub1(i32* %p, i32 %v) {
    481 entry:
    482 ; <b>CHECK: sub1:</b>
    483 ; <b>CHECK: subl</b>
    484         %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
    485         ret void
    486 }
    487 
    488 define void @inc4(i64* %p) {
    489 entry:
    490 ; <b>CHECK: inc4:</b>
    491 ; <b>CHECK: incq</b>
    492         %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
    493         ret void
    494 }
    495 </pre>
    496 </div>
    497 
    498 <p>Here you can see some "CHECK:" lines specified in comments.  Now you can see
    499 how the file is piped into llvm-as, then llc, and the machine code output is
    500 what we are verifying.  FileCheck checks the machine code output to verify that
    501 it matches what the "CHECK:" lines specify.</p>
    502 
    503 <p>The syntax of the CHECK: lines is very simple: they are fixed strings that
    504 must occur in order.  FileCheck defaults to ignoring horizontal whitespace
    505 differences (e.g. a space is allowed to match a tab) but otherwise, the contents
    506 of the CHECK: line is required to match some thing in the test file exactly.</p>
    507 
    508 <p>One nice thing about FileCheck (compared to grep) is that it allows merging
    509 test cases together into logical groups.  For example, because the test above
    510 is checking for the "sub1:" and "inc4:" labels, it will not match unless there
    511 is a "subl" in between those labels.  If it existed somewhere else in the file,
    512 that would not count: "grep subl" matches if subl exists anywhere in the
    513 file.</p>
    514 
    515 <!-- _______________________________________________________________________ -->
    516 <h4>
    517   <a name="FileCheck-check-prefix">The FileCheck -check-prefix option</a>
    518 </h4>
    519 
    520 <div>
    521 
    522 <p>The FileCheck -check-prefix option allows multiple test configurations to be
    523 driven from one .ll file.  This is useful in many circumstances, for example,
    524 testing different architectural variants with llc.  Here's a simple example:</p>
    525 
    526 <div class="doc_code">
    527 <pre>
    528 ; RUN: llvm-as &lt; %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
    529 ; RUN:              | <b>FileCheck %s -check-prefix=X32</b>
    530 ; RUN: llvm-as &lt; %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
    531 ; RUN:              | <b>FileCheck %s -check-prefix=X64</b>
    532 
    533 define &lt;4 x i32&gt; @pinsrd_1(i32 %s, &lt;4 x i32&gt; %tmp) nounwind {
    534         %tmp1 = insertelement &lt;4 x i32&gt; %tmp, i32 %s, i32 1
    535         ret &lt;4 x i32&gt; %tmp1
    536 ; <b>X32:</b> pinsrd_1:
    537 ; <b>X32:</b>    pinsrd $1, 4(%esp), %xmm0
    538 
    539 ; <b>X64:</b> pinsrd_1:
    540 ; <b>X64:</b>    pinsrd $1, %edi, %xmm0
    541 }
    542 </pre>
    543 </div>
    544 
    545 <p>In this case, we're testing that we get the expected code generation with
    546 both 32-bit and 64-bit code generation.</p>
    547 
    548 </div>
    549 
    550 <!-- _______________________________________________________________________ -->
    551 <h4>
    552   <a name="FileCheck-CHECK-NEXT">The "CHECK-NEXT:" directive</a>
    553 </h4>
    554 
    555 <div>
    556 
    557 <p>Sometimes you want to match lines and would like to verify that matches
    558 happen on exactly consecutive lines with no other lines in between them.  In
    559 this case, you can use CHECK: and CHECK-NEXT: directives to specify this.  If
    560 you specified a custom check prefix, just use "&lt;PREFIX&gt;-NEXT:".  For
    561 example, something like this works as you'd expect:</p>
    562 
    563 <div class="doc_code">
    564 <pre>
    565 define void @t2(&lt;2 x double&gt;* %r, &lt;2 x double&gt;* %A, double %B) {
    566 	%tmp3 = load &lt;2 x double&gt;* %A, align 16
    567 	%tmp7 = insertelement &lt;2 x double&gt; undef, double %B, i32 0
    568 	%tmp9 = shufflevector &lt;2 x double&gt; %tmp3,
    569                               &lt;2 x double&gt; %tmp7,
    570                               &lt;2 x i32&gt; &lt; i32 0, i32 2 &gt;
    571 	store &lt;2 x double&gt; %tmp9, &lt;2 x double&gt;* %r, align 16
    572 	ret void
    573         
    574 ; <b>CHECK:</b> t2:
    575 ; <b>CHECK:</b> 	movl	8(%esp), %eax
    576 ; <b>CHECK-NEXT:</b> 	movapd	(%eax), %xmm0
    577 ; <b>CHECK-NEXT:</b> 	movhpd	12(%esp), %xmm0
    578 ; <b>CHECK-NEXT:</b> 	movl	4(%esp), %eax
    579 ; <b>CHECK-NEXT:</b> 	movapd	%xmm0, (%eax)
    580 ; <b>CHECK-NEXT:</b> 	ret
    581 }
    582 </pre>
    583 </div>
    584 
    585 <p>CHECK-NEXT: directives reject the input unless there is exactly one newline
    586 between it an the previous directive.  A CHECK-NEXT cannot be the first
    587 directive in a file.</p>
    588 
    589 </div>
    590 
    591 <!-- _______________________________________________________________________ -->
    592 <h4>
    593   <a name="FileCheck-CHECK-NOT">The "CHECK-NOT:" directive</a>
    594 </h4>
    595 
    596 <div>
    597 
    598 <p>The CHECK-NOT: directive is used to verify that a string doesn't occur
    599 between two matches (or the first match and the beginning of the file).  For
    600 example, to verify that a load is removed by a transformation, a test like this
    601 can be used:</p>
    602 
    603 <div class="doc_code">
    604 <pre>
    605 define i8 @coerce_offset0(i32 %V, i32* %P) {
    606   store i32 %V, i32* %P
    607    
    608   %P2 = bitcast i32* %P to i8*
    609   %P3 = getelementptr i8* %P2, i32 2
    610 
    611   %A = load i8* %P3
    612   ret i8 %A
    613 ; <b>CHECK:</b> @coerce_offset0
    614 ; <b>CHECK-NOT:</b> load
    615 ; <b>CHECK:</b> ret i8
    616 }
    617 </pre>
    618 </div>
    619 
    620 </div>
    621 
    622 <!-- _______________________________________________________________________ -->
    623 <h4>
    624   <a name="FileCheck-Matching">FileCheck Pattern Matching Syntax</a>
    625 </h4>
    626 
    627 <div>
    628 
    629 <p>The CHECK: and CHECK-NOT: directives both take a pattern to match.  For most
    630 uses of FileCheck, fixed string matching is perfectly sufficient.  For some
    631 things, a more flexible form of matching is desired.  To support this, FileCheck
    632 allows you to specify regular expressions in matching strings, surrounded by
    633 double braces: <b>{{yourregex}}</b>.  Because we want to use fixed string
    634 matching for a majority of what we do, FileCheck has been designed to support
    635 mixing and matching fixed string matching with regular expressions.  This allows
    636 you to write things like this:</p>
    637 
    638 <div class="doc_code">
    639 <pre>
    640 ; CHECK: movhpd	<b>{{[0-9]+}}</b>(%esp), <b>{{%xmm[0-7]}}</b>
    641 </pre>
    642 </div>
    643 
    644 <p>In this case, any offset from the ESP register will be allowed, and any xmm
    645 register will be allowed.</p>
    646 
    647 <p>Because regular expressions are enclosed with double braces, they are
    648 visually distinct, and you don't need to use escape characters within the double
    649 braces like you would in C.  In the rare case that you want to match double
    650 braces explicitly from the input, you can use something ugly like
    651 <b>{{[{][{]}}</b> as your pattern.</p>
    652 
    653 </div>
    654 
    655 <!-- _______________________________________________________________________ -->
    656 <h4>
    657   <a name="FileCheck-Variables">FileCheck Variables</a>
    658 </h4>
    659 
    660 <div>
    661 
    662 <p>It is often useful to match a pattern and then verify that it occurs again
    663 later in the file.  For codegen tests, this can be useful to allow any register,
    664 but verify that that register is used consistently later.  To do this, FileCheck
    665 allows named variables to be defined and substituted into patterns.  Here is a
    666 simple example:</p>
    667 
    668 <div class="doc_code">
    669 <pre>
    670 ; CHECK: test5:
    671 ; CHECK:    notw	<b>[[REGISTER:%[a-z]+]]</b>
    672 ; CHECK:    andw	{{.*}}<b>[[REGISTER]]</b>
    673 </pre>
    674 </div>
    675 
    676 <p>The first check line matches a regex (<tt>%[a-z]+</tt>) and captures it into
    677 the variables "REGISTER".  The second line verifies that whatever is in REGISTER
    678 occurs later in the file after an "andw".  FileCheck variable references are
    679 always contained in <tt>[[ ]]</tt> pairs, are named, and their names can be
    680 formed with the regex "<tt>[a-zA-Z][a-zA-Z0-9]*</tt>".  If a colon follows the
    681 name, then it is a definition of the variable, if not, it is a use.</p>
    682 
    683 <p>FileCheck variables can be defined multiple times, and uses always get the
    684 latest value.  Note that variables are all read at the start of a "CHECK" line
    685 and are all defined at the end.  This means that if you have something like
    686 "<tt>CHECK: [[XYZ:.*]]x[[XYZ]]</tt>" that the check line will read the previous
    687 value of the XYZ variable and define a new one after the match is performed.  If
    688 you need to do something like this you can probably take advantage of the fact
    689 that FileCheck is not actually line-oriented when it matches, this allows you to
    690 define two separate CHECK lines that match on the same line.
    691 </p>
    692 
    693 </div>
    694 
    695 </div>
    696 
    697 <!-- _______________________________________________________________________ -->
    698 <h3><a name="rtvars">Variables and substitutions</a></h3>
    699 <!-- _______________________________________________________________________ -->
    700 <div>
    701   <p>With a RUN line there are a number of substitutions that are permitted. In
    702   general, any Tcl variable that is available in the <tt>substitute</tt> 
    703   function (in <tt>test/lib/llvm.exp</tt>) can be substituted into a RUN line.
    704   To make a substitution just write the variable's name preceded by a $. 
    705   Additionally, for compatibility reasons with previous versions of the test
    706   library, certain names can be accessed with an alternate syntax: a % prefix.
    707   These alternates are deprecated and may go away in a future version.
    708   </p>
    709   <p>Here are the available variable names. The alternate syntax is listed in
    710   parentheses.</p>
    711 
    712   <dl style="margin-left: 25px">
    713     <dt><b>$test</b> (%s)</dt>
    714     <dd>The full path to the test case's source. This is suitable for passing
    715     on the command line as the input to an llvm tool.</dd>
    716 
    717     <dt><b>$srcdir</b></dt>
    718     <dd>The source directory from where the "<tt>make check</tt>" was run.</dd>
    719 
    720     <dt><b>objdir</b></dt>
    721     <dd>The object directory that corresponds to the <tt>$srcdir</tt>.</dd>
    722 
    723     <dt><b>subdir</b></dt>
    724     <dd>A partial path from the <tt>test</tt> directory that contains the 
    725     sub-directory that contains the test source being executed.</dd>
    726 
    727     <dt><b>srcroot</b></dt>
    728     <dd>The root directory of the LLVM src tree.</dd>
    729 
    730     <dt><b>objroot</b></dt>
    731     <dd>The root directory of the LLVM object tree. This could be the same
    732     as the srcroot.</dd>
    733 
    734     <dt><b>path</b><dt>
    735     <dd>The path to the directory that contains the test case source.  This is 
    736     for locating any supporting files that are not generated by the test, but 
    737     used by the test.</dd>
    738 
    739     <dt><b>tmp</b></dt>
    740     <dd>The path to a temporary file name that could be used for this test case.
    741     The file name won't conflict with other test cases. You can append to it if
    742     you need multiple temporaries. This is useful as the destination of some
    743     redirected output.</dd>
    744 
    745     <dt><b>target_triplet</b> (%target_triplet)</dt>
    746     <dd>The target triplet that corresponds to the current host machine (the one
    747     running the test cases). This should probably be called "host".<dd>
    748 
    749     <dt><b>link</b> (%link)</dt> 
    750     <dd>This full link command used to link LLVM executables. This has all the
    751     configured -I, -L and -l options.</dd>
    752 
    753     <dt><b>shlibext</b> (%shlibext)</dt>
    754     <dd>The suffix for the host platforms share library (dll) files. This
    755     includes the period as the first character.</dd>
    756   </dl>
    757   <p>To add more variables, two things need to be changed. First, add a line in
    758   the <tt>test/Makefile</tt> that creates the <tt>site.exp</tt> file. This will
    759   "set" the variable as a global in the site.exp file. Second, in the
    760   <tt>test/lib/llvm.exp</tt> file, in the substitute proc, add the variable name
    761   to the list of "global" declarations at the beginning of the proc. That's it,
    762   the variable can then be used in test scripts.</p>
    763 </div>
    764   
    765 <!-- _______________________________________________________________________ -->
    766 <h3><a name="rtfeatures">Other Features</a></h3>
    767 <!-- _______________________________________________________________________ -->
    768 <div>
    769   <p>To make RUN line writing easier, there are several shell scripts located
    770   in the <tt>llvm/test/Scripts</tt> directory. This directory is in the PATH
    771   when running tests, so you can just call these scripts using their name. For
    772   example:</p>
    773   <dl>
    774     <dt><b>ignore</b></dt>
    775     <dd>This script runs its arguments and then always returns 0. This is useful
    776     in cases where the test needs to cause a tool to generate an error (e.g. to
    777     check the error output). However, any program in a pipeline that returns a
    778     non-zero result will cause the test to fail. This script overcomes that 
    779     issue and nicely documents that the test case is purposefully ignoring the
    780     result code of the tool</dd>
    781 
    782     <dt><b>not</b></dt>
    783     <dd>This script runs its arguments and then inverts the result code from 
    784     it. Zero result codes become 1. Non-zero result codes become 0. This is
    785     useful to invert the result of a grep. For example "not grep X" means
    786     succeed only if you don't find X in the input.</dd>
    787   </dl>
    788 
    789   <p>Sometimes it is necessary to mark a test case as "expected fail" or XFAIL.
    790   You can easily mark a test as XFAIL just by including <tt>XFAIL: </tt> on a
    791   line near the top of the file. This signals that the test case should succeed
    792   if the test fails. Such test cases are counted separately by the testing tool. To
    793   specify an expected fail, use the XFAIL keyword in the comments of the test
    794   program followed by a colon and one or more regular expressions (separated by
    795   a comma). The regular expressions allow you to XFAIL the test conditionally by
    796   host platform. The regular expressions following the : are matched against the
    797   target triplet for the host machine. If there is a match, the test is expected
    798   to fail. If not, the test is expected to succeed. To XFAIL everywhere just
    799   specify <tt>XFAIL: *</tt>. Here is an example of an <tt>XFAIL</tt> line:</p>
    800 
    801 <div class="doc_code">
    802 <pre>
    803 ; XFAIL: darwin,sun
    804 </pre>
    805 </div>
    806 
    807   <p>To make the output more useful, the <tt>llvm_runtest</tt> function wil
    808   scan the lines of the test case for ones that contain a pattern that matches
    809   PR[0-9]+. This is the syntax for specifying a PR (Problem Report) number that
    810   is related to the test case. The number after "PR" specifies the LLVM bugzilla
    811   number. When a PR number is specified, it will be used in the pass/fail
    812   reporting. This is useful to quickly get some context when a test fails.</p>
    813 
    814   <p>Finally, any line that contains "END." will cause the special
    815   interpretation of lines to terminate. This is generally done right after the
    816   last RUN: line. This has two side effects: (a) it prevents special
    817   interpretation of lines that are part of the test program, not the
    818   instructions to the test case, and (b) it speeds things up for really big test
    819   cases by avoiding interpretation of the remainder of the file.</p>
    820 
    821 </div>
    822 
    823 </div>
    824 
    825 <!--=========================================================================-->
    826 <h2><a name="testsuiteoverview"><tt>test-suite</tt> Overview</a></h2>
    827 <!--=========================================================================-->
    828 
    829 <div>
    830 
    831 <p>The <tt>test-suite</tt> module contains a number of programs that can be
    832 compiled and executed. The <tt>test-suite</tt> includes reference outputs for
    833 all of the programs, so that the output of the executed program can be checked
    834 for correctness.</p>
    835 
    836 <p><tt>test-suite</tt> tests are divided into three types of tests: MultiSource,
    837 SingleSource, and External.</p> 
    838 
    839 <ul>
    840 <li><tt>test-suite/SingleSource</tt>
    841 <p>The SingleSource directory contains test programs that are only a single 
    842 source file in size.  These are usually small benchmark programs or small 
    843 programs that calculate a particular value.  Several such programs are grouped 
    844 together in each directory.</p></li>
    845 
    846 <li><tt>test-suite/MultiSource</tt>
    847 <p>The MultiSource directory contains subdirectories which contain entire 
    848 programs with multiple source files.  Large benchmarks and whole applications 
    849 go here.</p></li>
    850 
    851 <li><tt>test-suite/External</tt>
    852 <p>The External directory contains Makefiles for building code that is external
    853 to (i.e., not distributed with) LLVM.  The most prominent members of this
    854 directory are the SPEC 95 and SPEC 2000 benchmark suites. The <tt>External</tt>
    855 directory does not contain these actual tests, but only the Makefiles that know
    856 how to properly compile these programs from somewhere else. When
    857 using <tt>LNT</tt>, use the <tt>--test-externals</tt> option to include these
    858 tests in the results.</p></li>
    859 </ul>
    860 </div>
    861 
    862 <!--=========================================================================-->
    863 <h2><a name="testsuitequickstart"><tt>test-suite</tt> Quickstart</a></h2>
    864 <!--=========================================================================-->
    865 
    866 <div>
    867 <p>The modern way of running the <tt>test-suite</tt> is focused on testing and
    868 benchmarking complete compilers using
    869 the <a href="http://llvm.org/docs/lnt">LNT</a> testing infrastructure.</p>
    870 
    871 <p>For more information on using LNT to execute the <tt>test-suite</tt>, please
    872 see the <a href="http://llvm.org/docs/lnt/quickstart.html">LNT Quickstart</a>
    873 documentation.</p>
    874 </div>
    875 
    876 <!--=========================================================================-->
    877 <h2><a name="testsuitemakefiles"><tt>test-suite</tt> Makefiles</a></h2>
    878 <!--=========================================================================-->
    879 
    880 <div>
    881 <p>Historically, the <tt>test-suite</tt> was executed using a complicated setup
    882 of Makefiles. The LNT based approach above is recommended for most users, but
    883 there are some testing scenarios which are not supported by the LNT approach. In
    884 addition, LNT currently uses the Makefile setup under the covers and so
    885 developers who are interested in how LNT works under the hood may want to
    886 understand the Makefile based setup.</p>
    887 
    888 <p>For more information on the <tt>test-suite</tt> Makefile setup, please see
    889 the <a href="TestSuiteMakefileGuide.html">Test Suite Makefile Guide.</a></p>
    890 </div>
    891 
    892 <!-- *********************************************************************** -->
    893 
    894 <hr>
    895 <address>
    896   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
    897   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
    898   <a href="http://validator.w3.org/check/referer"><img
    899   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
    900 
    901   John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner<br>
    902   <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
    903   Last modified: $Date$
    904 </address>
    905 </body>
    906 </html>
    907