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="_static/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 58documents the structure of the LLVM testing infrastructure, the tools needed to 59use 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 70software required to build LLVM, as well 71as <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: 82regression tests and whole programs. The regression tests are contained inside 83the LLVM repository itself under <tt>llvm/test</tt> and are expected to always 84pass -- 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 88historical reasons, these tests are also referred to as the "nightly tests" in 89places, which is less ambiguous than "test-suite" and remains in use although we 90run 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 99LLVM or trigger a specific bug in LLVM. They are usually written in LLVM 100assembly language, but can be written in other languages if the test targets a 101particular language front end (and the appropriate <tt>--with-llvmgcc</tt> 102options were used at <tt>configure</tt> time of the <tt>llvm</tt> module). These 103tests 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 106from them is never executed to determine correct behavior.</p> 107 108<p>These code fragment tests are located in the <tt>llvm/test</tt> 109directory.</p> 110 111<p>Typically when a bug is found in LLVM, a regression test containing 112just enough code to reproduce the problem should be written and placed 113somewhere underneath this directory. In most cases, this will be a small 114piece of LLVM assembly language code, often distilled from an actual 115application 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 126compiled and linked into a stand-alone program that can be executed. These 127programs 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, 130and then executed to capture the program output and timing information. The 131output of these programs is compared to a reference output to ensure that the 132program is being compiled correctly.</p> 133 134<p>In addition to compiling and executing programs, whole program tests serve as 135a way of benchmarking LLVM performance, both in terms of the efficiency of the 136programs generated as well as the speed with which LLVM compiles, optimizes, and 137generates 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. 150The 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 153is checked to validate of debugging information. See README.txt in the 154test 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, 200you 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' 220script 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 249clang/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 < %s | llvm-dis > %t1 350; RUN: llvm-dis < %s.bc-13 > %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>&1</tt>. That will cause Tcl to write to a 364 file named <tt>&1</tt>. Usually this is done to get stderr to go through 365 a pipe. You can do that in tcl with <tt>|&</tt> so replace this idiom: 366 <tt>... 2>&1 | grep</tt> with <tt>... |& 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 439that <tt>GREP_OPTIONS</tt> is not set in your environment. Otherwise, 440you may get invalid results (both false positives and false 441negatives).</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 < %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 473llc, then pipe the output of llc into FileCheck. This means that FileCheck will 474be verifying its standard input (the llc output) against the filename argument 475specified (the original .ll file specified by "%s"). To see how this works, 476let's look at the rest of the .ll file (after the RUN line):</p> 477 478<div class="doc_code"> 479<pre> 480define void @sub1(i32* %p, i32 %v) { 481entry: 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 488define void @inc4(i64* %p) { 489entry: 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 499how the file is piped into llvm-as, then llc, and the machine code output is 500what we are verifying. FileCheck checks the machine code output to verify that 501it matches what the "CHECK:" lines specify.</p> 502 503<p>The syntax of the CHECK: lines is very simple: they are fixed strings that 504must occur in order. FileCheck defaults to ignoring horizontal whitespace 505differences (e.g. a space is allowed to match a tab) but otherwise, the contents 506of 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 509test cases together into logical groups. For example, because the test above 510is checking for the "sub1:" and "inc4:" labels, it will not match unless there 511is a "subl" in between those labels. If it existed somewhere else in the file, 512that would not count: "grep subl" matches if subl exists anywhere in the 513file.</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 523driven from one .ll file. This is useful in many circumstances, for example, 524testing different architectural variants with llc. Here's a simple example:</p> 525 526<div class="doc_code"> 527<pre> 528; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \ 529; RUN: | <b>FileCheck %s -check-prefix=X32</b> 530; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \ 531; RUN: | <b>FileCheck %s -check-prefix=X64</b> 532 533define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind { 534 %tmp1 = insertelement <4 x i32> %tmp, i32 %s, i32 1 535 ret <4 x i32> %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 546both 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 558happen on exactly consecutive lines with no other lines in between them. In 559this case, you can use CHECK: and CHECK-NEXT: directives to specify this. If 560you specified a custom check prefix, just use "<PREFIX>-NEXT:". For 561example, something like this works as you'd expect:</p> 562 563<div class="doc_code"> 564<pre> 565define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) { 566 %tmp3 = load <2 x double>* %A, align 16 567 %tmp7 = insertelement <2 x double> undef, double %B, i32 0 568 %tmp9 = shufflevector <2 x double> %tmp3, 569 <2 x double> %tmp7, 570 <2 x i32> < i32 0, i32 2 > 571 store <2 x double> %tmp9, <2 x double>* %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 586between it an the previous directive. A CHECK-NEXT cannot be the first 587directive 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 599between two matches (or the first match and the beginning of the file). For 600example, to verify that a load is removed by a transformation, a test like this 601can be used:</p> 602 603<div class="doc_code"> 604<pre> 605define 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<!-- {% raw %} --> 630 631<p>The CHECK: and CHECK-NOT: directives both take a pattern to match. For most 632uses of FileCheck, fixed string matching is perfectly sufficient. For some 633things, a more flexible form of matching is desired. To support this, FileCheck 634allows you to specify regular expressions in matching strings, surrounded by 635double braces: <b>{{yourregex}}</b>. Because we want to use fixed string 636matching for a majority of what we do, FileCheck has been designed to support 637mixing and matching fixed string matching with regular expressions. This allows 638you to write things like this:</p> 639 640<div class="doc_code"> 641<pre> 642; CHECK: movhpd <b>{{[0-9]+}}</b>(%esp), <b>{{%xmm[0-7]}}</b> 643</pre> 644</div> 645 646<p>In this case, any offset from the ESP register will be allowed, and any xmm 647register will be allowed.</p> 648 649<p>Because regular expressions are enclosed with double braces, they are 650visually distinct, and you don't need to use escape characters within the double 651braces like you would in C. In the rare case that you want to match double 652braces explicitly from the input, you can use something ugly like 653<b>{{[{][{]}}</b> as your pattern.</p> 654 655<!-- {% endraw %} --> 656 657</div> 658 659<!-- _______________________________________________________________________ --> 660<h4> 661 <a name="FileCheck-Variables">FileCheck Variables</a> 662</h4> 663 664<div> 665 666 667<!-- {% raw %} --> 668 669<p>It is often useful to match a pattern and then verify that it occurs again 670later in the file. For codegen tests, this can be useful to allow any register, 671but verify that that register is used consistently later. To do this, FileCheck 672allows named variables to be defined and substituted into patterns. Here is a 673simple example:</p> 674 675<div class="doc_code"> 676<pre> 677; CHECK: test5: 678; CHECK: notw <b>[[REGISTER:%[a-z]+]]</b> 679; CHECK: andw {{.*}}<b>[[REGISTER]]</b> 680</pre> 681</div> 682 683<p>The first check line matches a regex (<tt>%[a-z]+</tt>) and captures it into 684the variables "REGISTER". The second line verifies that whatever is in REGISTER 685occurs later in the file after an "andw". FileCheck variable references are 686always contained in <tt>[[ ]]</tt> pairs, are named, and their names can be 687formed with the regex "<tt>[a-zA-Z][a-zA-Z0-9]*</tt>". If a colon follows the 688name, then it is a definition of the variable, if not, it is a use.</p> 689 690<p>FileCheck variables can be defined multiple times, and uses always get the 691latest value. Note that variables are all read at the start of a "CHECK" line 692and are all defined at the end. This means that if you have something like 693"<tt>CHECK: [[XYZ:.*]]x[[XYZ]]</tt>" that the check line will read the previous 694value of the XYZ variable and define a new one after the match is performed. If 695you need to do something like this you can probably take advantage of the fact 696that FileCheck is not actually line-oriented when it matches, this allows you to 697define two separate CHECK lines that match on the same line. 698</p> 699 700<!-- {% endraw %} --> 701 702</div> 703 704</div> 705 706<!-- _______________________________________________________________________ --> 707<h3><a name="rtvars">Variables and substitutions</a></h3> 708<!-- _______________________________________________________________________ --> 709<div> 710 <p>With a RUN line there are a number of substitutions that are permitted. In 711 general, any Tcl variable that is available in the <tt>substitute</tt> 712 function (in <tt>test/lib/llvm.exp</tt>) can be substituted into a RUN line. 713 To make a substitution just write the variable's name preceded by a $. 714 Additionally, for compatibility reasons with previous versions of the test 715 library, certain names can be accessed with an alternate syntax: a % prefix. 716 These alternates are deprecated and may go away in a future version. 717 </p> 718 <p>Here are the available variable names. The alternate syntax is listed in 719 parentheses.</p> 720 721 <dl style="margin-left: 25px"> 722 <dt><b>$test</b> (%s)</dt> 723 <dd>The full path to the test case's source. This is suitable for passing 724 on the command line as the input to an llvm tool.</dd> 725 726 <dt><b>$srcdir</b></dt> 727 <dd>The source directory from where the "<tt>make check</tt>" was run.</dd> 728 729 <dt><b>objdir</b></dt> 730 <dd>The object directory that corresponds to the <tt>$srcdir</tt>.</dd> 731 732 <dt><b>subdir</b></dt> 733 <dd>A partial path from the <tt>test</tt> directory that contains the 734 sub-directory that contains the test source being executed.</dd> 735 736 <dt><b>srcroot</b></dt> 737 <dd>The root directory of the LLVM src tree.</dd> 738 739 <dt><b>objroot</b></dt> 740 <dd>The root directory of the LLVM object tree. This could be the same 741 as the srcroot.</dd> 742 743 <dt><b>path</b><dt> 744 <dd>The path to the directory that contains the test case source. This is 745 for locating any supporting files that are not generated by the test, but 746 used by the test.</dd> 747 748 <dt><b>tmp</b></dt> 749 <dd>The path to a temporary file name that could be used for this test case. 750 The file name won't conflict with other test cases. You can append to it if 751 you need multiple temporaries. This is useful as the destination of some 752 redirected output.</dd> 753 754 <dt><b>target_triplet</b> (%target_triplet)</dt> 755 <dd>The target triplet that corresponds to the current host machine (the one 756 running the test cases). This should probably be called "host".<dd> 757 758 <dt><b>link</b> (%link)</dt> 759 <dd>This full link command used to link LLVM executables. This has all the 760 configured -I, -L and -l options.</dd> 761 762 <dt><b>shlibext</b> (%shlibext)</dt> 763 <dd>The suffix for the host platforms share library (dll) files. This 764 includes the period as the first character.</dd> 765 </dl> 766 <p>To add more variables, two things need to be changed. First, add a line in 767 the <tt>test/Makefile</tt> that creates the <tt>site.exp</tt> file. This will 768 "set" the variable as a global in the site.exp file. Second, in the 769 <tt>test/lib/llvm.exp</tt> file, in the substitute proc, add the variable name 770 to the list of "global" declarations at the beginning of the proc. That's it, 771 the variable can then be used in test scripts.</p> 772</div> 773 774<!-- _______________________________________________________________________ --> 775<h3><a name="rtfeatures">Other Features</a></h3> 776<!-- _______________________________________________________________________ --> 777<div> 778 <p>To make RUN line writing easier, there are several shell scripts located 779 in the <tt>llvm/test/Scripts</tt> directory. This directory is in the PATH 780 when running tests, so you can just call these scripts using their name. For 781 example:</p> 782 <dl> 783 <dt><b>ignore</b></dt> 784 <dd>This script runs its arguments and then always returns 0. This is useful 785 in cases where the test needs to cause a tool to generate an error (e.g. to 786 check the error output). However, any program in a pipeline that returns a 787 non-zero result will cause the test to fail. This script overcomes that 788 issue and nicely documents that the test case is purposefully ignoring the 789 result code of the tool</dd> 790 791 <dt><b>not</b></dt> 792 <dd>This script runs its arguments and then inverts the result code from 793 it. Zero result codes become 1. Non-zero result codes become 0. This is 794 useful to invert the result of a grep. For example "not grep X" means 795 succeed only if you don't find X in the input.</dd> 796 </dl> 797 798 <p>Sometimes it is necessary to mark a test case as "expected fail" or XFAIL. 799 You can easily mark a test as XFAIL just by including <tt>XFAIL: </tt> on a 800 line near the top of the file. This signals that the test case should succeed 801 if the test fails. Such test cases are counted separately by the testing tool. To 802 specify an expected fail, use the XFAIL keyword in the comments of the test 803 program followed by a colon and one or more regular expressions (separated by 804 a comma). The regular expressions allow you to XFAIL the test conditionally by 805 host platform. The regular expressions following the : are matched against the 806 target triplet for the host machine. If there is a match, the test is expected 807 to fail. If not, the test is expected to succeed. To XFAIL everywhere just 808 specify <tt>XFAIL: *</tt>. Here is an example of an <tt>XFAIL</tt> line:</p> 809 810<div class="doc_code"> 811<pre> 812; XFAIL: darwin,sun 813</pre> 814</div> 815 816 <p>To make the output more useful, the <tt>llvm_runtest</tt> function wil 817 scan the lines of the test case for ones that contain a pattern that matches 818 PR[0-9]+. This is the syntax for specifying a PR (Problem Report) number that 819 is related to the test case. The number after "PR" specifies the LLVM bugzilla 820 number. When a PR number is specified, it will be used in the pass/fail 821 reporting. This is useful to quickly get some context when a test fails.</p> 822 823 <p>Finally, any line that contains "END." will cause the special 824 interpretation of lines to terminate. This is generally done right after the 825 last RUN: line. This has two side effects: (a) it prevents special 826 interpretation of lines that are part of the test program, not the 827 instructions to the test case, and (b) it speeds things up for really big test 828 cases by avoiding interpretation of the remainder of the file.</p> 829 830</div> 831 832</div> 833 834<!--=========================================================================--> 835<h2><a name="testsuiteoverview"><tt>test-suite</tt> Overview</a></h2> 836<!--=========================================================================--> 837 838<div> 839 840<p>The <tt>test-suite</tt> module contains a number of programs that can be 841compiled and executed. The <tt>test-suite</tt> includes reference outputs for 842all of the programs, so that the output of the executed program can be checked 843for correctness.</p> 844 845<p><tt>test-suite</tt> tests are divided into three types of tests: MultiSource, 846SingleSource, and External.</p> 847 848<ul> 849<li><tt>test-suite/SingleSource</tt> 850<p>The SingleSource directory contains test programs that are only a single 851source file in size. These are usually small benchmark programs or small 852programs that calculate a particular value. Several such programs are grouped 853together in each directory.</p></li> 854 855<li><tt>test-suite/MultiSource</tt> 856<p>The MultiSource directory contains subdirectories which contain entire 857programs with multiple source files. Large benchmarks and whole applications 858go here.</p></li> 859 860<li><tt>test-suite/External</tt> 861<p>The External directory contains Makefiles for building code that is external 862to (i.e., not distributed with) LLVM. The most prominent members of this 863directory are the SPEC 95 and SPEC 2000 benchmark suites. The <tt>External</tt> 864directory does not contain these actual tests, but only the Makefiles that know 865how to properly compile these programs from somewhere else. When 866using <tt>LNT</tt>, use the <tt>--test-externals</tt> option to include these 867tests in the results.</p></li> 868</ul> 869</div> 870 871<!--=========================================================================--> 872<h2><a name="testsuitequickstart"><tt>test-suite</tt> Quickstart</a></h2> 873<!--=========================================================================--> 874 875<div> 876<p>The modern way of running the <tt>test-suite</tt> is focused on testing and 877benchmarking complete compilers using 878the <a href="http://llvm.org/docs/lnt">LNT</a> testing infrastructure.</p> 879 880<p>For more information on using LNT to execute the <tt>test-suite</tt>, please 881see the <a href="http://llvm.org/docs/lnt/quickstart.html">LNT Quickstart</a> 882documentation.</p> 883</div> 884 885<!--=========================================================================--> 886<h2><a name="testsuitemakefiles"><tt>test-suite</tt> Makefiles</a></h2> 887<!--=========================================================================--> 888 889<div> 890<p>Historically, the <tt>test-suite</tt> was executed using a complicated setup 891of Makefiles. The LNT based approach above is recommended for most users, but 892there are some testing scenarios which are not supported by the LNT approach. In 893addition, LNT currently uses the Makefile setup under the covers and so 894developers who are interested in how LNT works under the hood may want to 895understand the Makefile based setup.</p> 896 897<p>For more information on the <tt>test-suite</tt> Makefile setup, please see 898the <a href="TestSuiteMakefileGuide.html">Test Suite Makefile Guide.</a></p> 899</div> 900 901<!-- *********************************************************************** --> 902 903<hr> 904<address> 905 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img 906 src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> 907 <a href="http://validator.w3.org/check/referer"><img 908 src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> 909 910 John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner<br> 911 <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> 912 Last modified: $Date$ 913</address> 914</body> 915</html> 916