Home | History | Annotate | Download | only in CommandGuide
      1 FileCheck - Flexible pattern matching file verifier
      2 ===================================================
      3 
      4 SYNOPSIS
      5 --------
      6 
      7 :program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*]
      8 
      9 DESCRIPTION
     10 -----------
     11 
     12 :program:`FileCheck` reads two files (one from standard input, and one
     13 specified on the command line) and uses one to verify the other.  This
     14 behavior is particularly useful for the testsuite, which wants to verify that
     15 the output of some tool (e.g. :program:`llc`) contains the expected information
     16 (for example, a movsd from esp or whatever is interesting).  This is similar to
     17 using :program:`grep`, but it is optimized for matching multiple different
     18 inputs in one file in a specific order.
     19 
     20 The ``match-filename`` file specifies the file that contains the patterns to
     21 match.  The file to verify is read from standard input unless the
     22 :option:`--input-file` option is used.
     23 
     24 OPTIONS
     25 -------
     26 
     27 .. option:: -help
     28 
     29  Print a summary of command line options.
     30 
     31 .. option:: --check-prefix prefix
     32 
     33  FileCheck searches the contents of ``match-filename`` for patterns to
     34  match.  By default, these patterns are prefixed with "``CHECK:``".
     35  If you'd like to use a different prefix (e.g. because the same input
     36  file is checking multiple different tool or options), the
     37  :option:`--check-prefix` argument allows you to specify one or more
     38  prefixes to match. Multiple prefixes are useful for tests which might
     39  change for different run options, but most lines remain the same.
     40 
     41 .. option:: --check-prefixes prefix1,prefix2,...
     42 
     43  An alias of :option:`--check-prefix` that allows multiple prefixes to be
     44  specified as a comma separated list.
     45 
     46 .. option:: --input-file filename
     47 
     48   File to check (defaults to stdin).
     49 
     50 .. option:: --match-full-lines
     51 
     52  By default, FileCheck allows matches of anywhere on a line. This
     53  option will require all positive matches to cover an entire
     54  line. Leading and trailing whitespace is ignored, unless
     55  :option:`--strict-whitespace` is also specified. (Note: negative
     56  matches from ``CHECK-NOT`` are not affected by this option!)
     57 
     58  Passing this option is equivalent to inserting ``{{^ *}}`` or
     59  ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive
     60  check pattern.
     61 
     62 .. option:: --strict-whitespace
     63 
     64  By default, FileCheck canonicalizes input horizontal whitespace (spaces and
     65  tabs) which causes it to ignore these differences (a space will match a tab).
     66  The :option:`--strict-whitespace` argument disables this behavior. End-of-line
     67  sequences are canonicalized to UNIX-style ``\n`` in all modes.
     68 
     69 .. option:: --implicit-check-not check-pattern
     70 
     71   Adds implicit negative checks for the specified patterns between positive
     72   checks. The option allows writing stricter tests without stuffing them with
     73   ``CHECK-NOT``\ s.
     74 
     75   For example, "``--implicit-check-not warning:``" can be useful when testing
     76   diagnostic messages from tools that don't have an option similar to ``clang
     77   -verify``. With this option FileCheck will verify that input does not contain
     78   warnings not covered by any ``CHECK:`` patterns.
     79 
     80 .. option:: -version
     81 
     82  Show the version number of this program.
     83 
     84 EXIT STATUS
     85 -----------
     86 
     87 If :program:`FileCheck` verifies that the file matches the expected contents,
     88 it exits with 0.  Otherwise, if not, or if an error occurs, it will exit with a
     89 non-zero value.
     90 
     91 TUTORIAL
     92 --------
     93 
     94 FileCheck is typically used from LLVM regression tests, being invoked on the RUN
     95 line of the test.  A simple example of using FileCheck from a RUN line looks
     96 like this:
     97 
     98 .. code-block:: llvm
     99 
    100    ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
    101 
    102 This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe
    103 that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``.  This
    104 means that FileCheck will be verifying its standard input (the llc output)
    105 against the filename argument specified (the original ``.ll`` file specified by
    106 "``%s``").  To see how this works, let's look at the rest of the ``.ll`` file
    107 (after the RUN line):
    108 
    109 .. code-block:: llvm
    110 
    111    define void @sub1(i32* %p, i32 %v) {
    112    entry:
    113    ; CHECK: sub1:
    114    ; CHECK: subl
    115            %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
    116            ret void
    117    }
    118 
    119    define void @inc4(i64* %p) {
    120    entry:
    121    ; CHECK: inc4:
    122    ; CHECK: incq
    123            %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
    124            ret void
    125    }
    126 
    127 Here you can see some "``CHECK:``" lines specified in comments.  Now you can
    128 see how the file is piped into ``llvm-as``, then ``llc``, and the machine code
    129 output is what we are verifying.  FileCheck checks the machine code output to
    130 verify that it matches what the "``CHECK:``" lines specify.
    131 
    132 The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that
    133 must occur in order.  FileCheck defaults to ignoring horizontal whitespace
    134 differences (e.g. a space is allowed to match a tab) but otherwise, the contents
    135 of the "``CHECK:``" line is required to match some thing in the test file exactly.
    136 
    137 One nice thing about FileCheck (compared to grep) is that it allows merging
    138 test cases together into logical groups.  For example, because the test above
    139 is checking for the "``sub1:``" and "``inc4:``" labels, it will not match
    140 unless there is a "``subl``" in between those labels.  If it existed somewhere
    141 else in the file, that would not count: "``grep subl``" matches if "``subl``"
    142 exists anywhere in the file.
    143 
    144 The FileCheck -check-prefix option
    145 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    146 
    147 The FileCheck :option:`-check-prefix` option allows multiple test
    148 configurations to be driven from one `.ll` file.  This is useful in many
    149 circumstances, for example, testing different architectural variants with
    150 :program:`llc`.  Here's a simple example:
    151 
    152 .. code-block:: llvm
    153 
    154    ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
    155    ; RUN:              | FileCheck %s -check-prefix=X32
    156    ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
    157    ; RUN:              | FileCheck %s -check-prefix=X64
    158 
    159    define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
    160            %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
    161            ret <4 x i32> %tmp1
    162    ; X32: pinsrd_1:
    163    ; X32:    pinsrd $1, 4(%esp), %xmm0
    164 
    165    ; X64: pinsrd_1:
    166    ; X64:    pinsrd $1, %edi, %xmm0
    167    }
    168 
    169 In this case, we're testing that we get the expected code generation with
    170 both 32-bit and 64-bit code generation.
    171 
    172 The "CHECK-NEXT:" directive
    173 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    174 
    175 Sometimes you want to match lines and would like to verify that matches
    176 happen on exactly consecutive lines with no other lines in between them.  In
    177 this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify
    178 this.  If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``".
    179 For example, something like this works as you'd expect:
    180 
    181 .. code-block:: llvm
    182 
    183    define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
    184  	%tmp3 = load <2 x double>* %A, align 16
    185  	%tmp7 = insertelement <2 x double> undef, double %B, i32 0
    186  	%tmp9 = shufflevector <2 x double> %tmp3,
    187                                <2 x double> %tmp7,
    188                                <2 x i32> < i32 0, i32 2 >
    189  	store <2 x double> %tmp9, <2 x double>* %r, align 16
    190  	ret void
    191 
    192    ; CHECK:          t2:
    193    ; CHECK: 	        movl	8(%esp), %eax
    194    ; CHECK-NEXT: 	movapd	(%eax), %xmm0
    195    ; CHECK-NEXT: 	movhpd	12(%esp), %xmm0
    196    ; CHECK-NEXT: 	movl	4(%esp), %eax
    197    ; CHECK-NEXT: 	movapd	%xmm0, (%eax)
    198    ; CHECK-NEXT: 	ret
    199    }
    200 
    201 "``CHECK-NEXT:``" directives reject the input unless there is exactly one
    202 newline between it and the previous directive.  A "``CHECK-NEXT:``" cannot be
    203 the first directive in a file.
    204 
    205 The "CHECK-SAME:" directive
    206 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    207 
    208 Sometimes you want to match lines and would like to verify that matches happen
    209 on the same line as the previous match.  In this case, you can use "``CHECK:``"
    210 and "``CHECK-SAME:``" directives to specify this.  If you specified a custom
    211 check prefix, just use "``<PREFIX>-SAME:``".
    212 
    213 "``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``"
    214 (described below).
    215 
    216 For example, the following works like you'd expect:
    217 
    218 .. code-block:: llvm
    219 
    220    !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
    221 
    222    ; CHECK:       !DILocation(line: 5,
    223    ; CHECK-NOT:               column:
    224    ; CHECK-SAME:              scope: ![[SCOPE:[0-9]+]]
    225 
    226 "``CHECK-SAME:``" directives reject the input if there are any newlines between
    227 it and the previous directive.  A "``CHECK-SAME:``" cannot be the first
    228 directive in a file.
    229 
    230 The "CHECK-NOT:" directive
    231 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    232 
    233 The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur
    234 between two matches (or before the first match, or after the last match).  For
    235 example, to verify that a load is removed by a transformation, a test like this
    236 can be used:
    237 
    238 .. code-block:: llvm
    239 
    240    define i8 @coerce_offset0(i32 %V, i32* %P) {
    241      store i32 %V, i32* %P
    242 
    243      %P2 = bitcast i32* %P to i8*
    244      %P3 = getelementptr i8* %P2, i32 2
    245 
    246      %A = load i8* %P3
    247      ret i8 %A
    248    ; CHECK: @coerce_offset0
    249    ; CHECK-NOT: load
    250    ; CHECK: ret i8
    251    }
    252 
    253 The "CHECK-DAG:" directive
    254 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    255 
    256 If it's necessary to match strings that don't occur in a strictly sequential
    257 order, "``CHECK-DAG:``" could be used to verify them between two matches (or
    258 before the first match, or after the last match). For example, clang emits
    259 vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks
    260 in the natural order:
    261 
    262 .. code-block:: c++
    263 
    264     // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
    265 
    266     struct Foo { virtual void method(); };
    267     Foo f;  // emit vtable
    268     // CHECK-DAG: @_ZTV3Foo =
    269 
    270     struct Bar { virtual void method(); };
    271     Bar b;
    272     // CHECK-DAG: @_ZTV3Bar =
    273 
    274 ``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to
    275 exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result,
    276 the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all
    277 occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind
    278 occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example,
    279 
    280 .. code-block:: llvm
    281 
    282    ; CHECK-DAG: BEFORE
    283    ; CHECK-NOT: NOT
    284    ; CHECK-DAG: AFTER
    285 
    286 This case will reject input strings where ``BEFORE`` occurs after ``AFTER``.
    287 
    288 With captured variables, ``CHECK-DAG:`` is able to match valid topological
    289 orderings of a DAG with edges from the definition of a variable to its use.
    290 It's useful, e.g., when your test cases need to match different output
    291 sequences from the instruction scheduler. For example,
    292 
    293 .. code-block:: llvm
    294 
    295    ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
    296    ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
    297    ; CHECK:     mul r5, [[REG1]], [[REG2]]
    298 
    299 In this case, any order of that two ``add`` instructions will be allowed.
    300 
    301 If you are defining `and` using variables in the same ``CHECK-DAG:`` block,
    302 be aware that the definition rule can match `after` its use.
    303 
    304 So, for instance, the code below will pass:
    305 
    306 .. code-block:: llvm
    307 
    308   ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
    309   ; CHECK-DAG: vmov.32 [[REG2]][1]
    310   vmov.32 d0[1]
    311   vmov.32 d0[0]
    312 
    313 While this other code, will not:
    314 
    315 .. code-block:: llvm
    316 
    317   ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
    318   ; CHECK-DAG: vmov.32 [[REG2]][1]
    319   vmov.32 d1[1]
    320   vmov.32 d0[0]
    321 
    322 While this can be very useful, it's also dangerous, because in the case of
    323 register sequence, you must have a strong order (read before write, copy before
    324 use, etc). If the definition your test is looking for doesn't match (because
    325 of a bug in the compiler), it may match further away from the use, and mask
    326 real bugs away.
    327 
    328 In those cases, to enforce the order, use a non-DAG directive between DAG-blocks.
    329 
    330 The "CHECK-LABEL:" directive
    331 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    332 
    333 Sometimes in a file containing multiple tests divided into logical blocks, one
    334 or more ``CHECK:`` directives may inadvertently succeed by matching lines in a
    335 later block. While an error will usually eventually be generated, the check
    336 flagged as causing the error may not actually bear any relationship to the
    337 actual source of the problem.
    338 
    339 In order to produce better error messages in these cases, the "``CHECK-LABEL:``"
    340 directive can be used. It is treated identically to a normal ``CHECK``
    341 directive except that FileCheck makes an additional assumption that a line
    342 matched by the directive cannot also be matched by any other check present in
    343 ``match-filename``; this is intended to be used for lines containing labels or
    344 other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides
    345 the input stream into separate blocks, each of which is processed independently,
    346 preventing a ``CHECK:`` directive in one block matching a line in another block.
    347 For example,
    348 
    349 .. code-block:: llvm
    350 
    351   define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
    352   entry:
    353   ; CHECK-LABEL: C_ctor_base:
    354   ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0
    355   ; CHECK: bl A_ctor_base
    356   ; CHECK: mov r0, [[SAVETHIS]]
    357     %0 = bitcast %struct.C* %this to %struct.A*
    358     %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
    359     %1 = bitcast %struct.C* %this to %struct.B*
    360     %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
    361     ret %struct.C* %this
    362   }
    363 
    364   define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
    365   entry:
    366   ; CHECK-LABEL: D_ctor_base:
    367 
    368 The use of ``CHECK-LABEL:`` directives in this case ensures that the three
    369 ``CHECK:`` directives only accept lines corresponding to the body of the
    370 ``@C_ctor_base`` function, even if the patterns match lines found later in
    371 the file. Furthermore, if one of these three ``CHECK:`` directives fail,
    372 FileCheck will recover by continuing to the next block, allowing multiple test
    373 failures to be detected in a single invocation.
    374 
    375 There is no requirement that ``CHECK-LABEL:`` directives contain strings that
    376 correspond to actual syntactic labels in a source or output language: they must
    377 simply uniquely match a single line in the file being verified.
    378 
    379 ``CHECK-LABEL:`` directives cannot contain variable definitions or uses.
    380 
    381 FileCheck Pattern Matching Syntax
    382 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    383 
    384 All FileCheck directives take a pattern to match.
    385 For most uses of FileCheck, fixed string matching is perfectly sufficient.  For
    386 some things, a more flexible form of matching is desired.  To support this,
    387 FileCheck allows you to specify regular expressions in matching strings,
    388 surrounded by double braces: ``{{yourregex}}``.  Because we want to use fixed
    389 string matching for a majority of what we do, FileCheck has been designed to
    390 support mixing and matching fixed string matching with regular expressions.
    391 This allows you to write things like this:
    392 
    393 .. code-block:: llvm
    394 
    395    ; CHECK: movhpd	{{[0-9]+}}(%esp), {{%xmm[0-7]}}
    396 
    397 In this case, any offset from the ESP register will be allowed, and any xmm
    398 register will be allowed.
    399 
    400 Because regular expressions are enclosed with double braces, they are
    401 visually distinct, and you don't need to use escape characters within the double
    402 braces like you would in C.  In the rare case that you want to match double
    403 braces explicitly from the input, you can use something ugly like
    404 ``{{[{][{]}}`` as your pattern.
    405 
    406 FileCheck Variables
    407 ~~~~~~~~~~~~~~~~~~~
    408 
    409 It is often useful to match a pattern and then verify that it occurs again
    410 later in the file.  For codegen tests, this can be useful to allow any register,
    411 but verify that that register is used consistently later.  To do this,
    412 :program:`FileCheck` allows named variables to be defined and substituted into
    413 patterns.  Here is a simple example:
    414 
    415 .. code-block:: llvm
    416 
    417    ; CHECK: test5:
    418    ; CHECK:    notw	[[REGISTER:%[a-z]+]]
    419    ; CHECK:    andw	{{.*}}[[REGISTER]]
    420 
    421 The first check line matches a regex ``%[a-z]+`` and captures it into the
    422 variable ``REGISTER``.  The second line verifies that whatever is in
    423 ``REGISTER`` occurs later in the file after an "``andw``".  :program:`FileCheck`
    424 variable references are always contained in ``[[ ]]`` pairs, and their names can
    425 be formed with the regex ``[a-zA-Z][a-zA-Z0-9]*``.  If a colon follows the name,
    426 then it is a definition of the variable; otherwise, it is a use.
    427 
    428 :program:`FileCheck` variables can be defined multiple times, and uses always
    429 get the latest value.  Variables can also be used later on the same line they
    430 were defined on. For example:
    431 
    432 .. code-block:: llvm
    433 
    434     ; CHECK: op [[REG:r[0-9]+]], [[REG]]
    435 
    436 Can be useful if you want the operands of ``op`` to be the same register,
    437 and don't care exactly which register it is.
    438 
    439 FileCheck Expressions
    440 ~~~~~~~~~~~~~~~~~~~~~
    441 
    442 Sometimes there's a need to verify output which refers line numbers of the
    443 match file, e.g. when testing compiler diagnostics.  This introduces a certain
    444 fragility of the match file structure, as "``CHECK:``" lines contain absolute
    445 line numbers in the same file, which have to be updated whenever line numbers
    446 change due to text addition or deletion.
    447 
    448 To support this case, FileCheck allows using ``[[@LINE]]``,
    449 ``[[@LINE+<offset>]]``, ``[[@LINE-<offset>]]`` expressions in patterns. These
    450 expressions expand to a number of the line where a pattern is located (with an
    451 optional integer offset).
    452 
    453 This way match patterns can be put near the relevant test lines and include
    454 relative line number references, for example:
    455 
    456 .. code-block:: c++
    457 
    458    // CHECK: test.cpp:[[@LINE+4]]:6: error: expected ';' after top level declarator
    459    // CHECK-NEXT: {{^int a}}
    460    // CHECK-NEXT: {{^     \^}}
    461    // CHECK-NEXT: {{^     ;}}
    462    int a
    463 
    464 Matching Newline Characters
    465 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    466 
    467 To match newline characters in regular expressions the character class
    468 ``[[:space:]]`` can be used. For example, the following pattern:
    469 
    470 .. code-block:: c++
    471 
    472    // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd"
    473 
    474 matches output of the form (from llvm-dwarfdump):
    475 
    476 .. code-block:: llvm
    477 
    478        DW_AT_location [DW_FORM_sec_offset]   (0x00000233)
    479        DW_AT_name [DW_FORM_strp]  ( .debug_str[0x000000c9] = "intd")
    480 
    481 letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value 
    482 ``0x00000233``, extracted from the line immediately preceding "``intd``".
    483