1FileCheck - Flexible pattern matching file verifier 2=================================================== 3 4.. program:: FileCheck 5 6SYNOPSIS 7-------- 8 9:program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*] 10 11DESCRIPTION 12----------- 13 14:program:`FileCheck` reads two files (one from standard input, and one 15specified on the command line) and uses one to verify the other. This 16behavior is particularly useful for the testsuite, which wants to verify that 17the output of some tool (e.g. :program:`llc`) contains the expected information 18(for example, a movsd from esp or whatever is interesting). This is similar to 19using :program:`grep`, but it is optimized for matching multiple different 20inputs in one file in a specific order. 21 22The ``match-filename`` file specifies the file that contains the patterns to 23match. The file to verify is read from standard input unless the 24:option:`--input-file` option is used. 25 26OPTIONS 27------- 28 29Options are parsed from the environment variable ``FILECHECK_OPTS`` 30and from the command line. 31 32.. option:: -help 33 34 Print a summary of command line options. 35 36.. option:: --check-prefix prefix 37 38 FileCheck searches the contents of ``match-filename`` for patterns to 39 match. By default, these patterns are prefixed with "``CHECK:``". 40 If you'd like to use a different prefix (e.g. because the same input 41 file is checking multiple different tool or options), the 42 :option:`--check-prefix` argument allows you to specify (without the trailing 43 "``:``") one or more prefixes to match. Multiple prefixes are useful for tests 44 which might change for different run options, but most lines remain the same. 45 46 FileCheck does not permit duplicate prefixes, even if one is a check prefix 47 and one is a comment prefix (see :option:`--comment-prefixes` below). 48 49.. option:: --check-prefixes prefix1,prefix2,... 50 51 An alias of :option:`--check-prefix` that allows multiple prefixes to be 52 specified as a comma separated list. 53 54.. option:: --comment-prefixes prefix1,prefix2,... 55 56 By default, FileCheck ignores any occurrence in ``match-filename`` of any check 57 prefix if it is preceded on the same line by "``COM:``" or "``RUN:``". See the 58 section `The "COM:" directive`_ for usage details. 59 60 These default comment prefixes can be overridden by 61 :option:`--comment-prefixes` if they are not appropriate for your testing 62 environment. However, doing so is not recommended in LLVM's LIT-based test 63 suites, which should be easier to maintain if they all follow a consistent 64 comment style. In that case, consider proposing a change to the default 65 comment prefixes instead. 66 67.. option:: --allow-unused-prefixes 68 69 This option controls the behavior when using more than one prefix as specified 70 by :option:`--check-prefix` or :option:`--check-prefixes`, and some of these 71 prefixes are missing in the test file. If true, this is allowed, if false, 72 FileCheck will report an error, listing the missing prefixes. The default value 73 is false. 74 75.. option:: --input-file filename 76 77 File to check (defaults to stdin). 78 79.. option:: --match-full-lines 80 81 By default, FileCheck allows matches of anywhere on a line. This 82 option will require all positive matches to cover an entire 83 line. Leading and trailing whitespace is ignored, unless 84 :option:`--strict-whitespace` is also specified. (Note: negative 85 matches from ``CHECK-NOT`` are not affected by this option!) 86 87 Passing this option is equivalent to inserting ``{{^ *}}`` or 88 ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive 89 check pattern. 90 91.. option:: --strict-whitespace 92 93 By default, FileCheck canonicalizes input horizontal whitespace (spaces and 94 tabs) which causes it to ignore these differences (a space will match a tab). 95 The :option:`--strict-whitespace` argument disables this behavior. End-of-line 96 sequences are canonicalized to UNIX-style ``\n`` in all modes. 97 98.. option:: --ignore-case 99 100 By default, FileCheck uses case-sensitive matching. This option causes 101 FileCheck to use case-insensitive matching. 102 103.. option:: --implicit-check-not check-pattern 104 105 Adds implicit negative checks for the specified patterns between positive 106 checks. The option allows writing stricter tests without stuffing them with 107 ``CHECK-NOT``\ s. 108 109 For example, "``--implicit-check-not warning:``" can be useful when testing 110 diagnostic messages from tools that don't have an option similar to ``clang 111 -verify``. With this option FileCheck will verify that input does not contain 112 warnings not covered by any ``CHECK:`` patterns. 113 114.. option:: --dump-input <value> 115 116 Dump input to stderr, adding annotations representing currently enabled 117 diagnostics. When there are multiple occurrences of this option, the 118 ``<value>`` that appears earliest in the list below has precedence. The 119 default is ``fail``. 120 121 * ``help`` - Explain input dump and quit 122 * ``always`` - Always dump input 123 * ``fail`` - Dump input on failure 124 * ``never`` - Never dump input 125 126.. option:: --dump-input-context <N> 127 128 In the dump requested by ``--dump-input``, print ``<N>`` input lines before 129 and ``<N>`` input lines after any lines specified by ``--dump-input-filter``. 130 When there are multiple occurrences of this option, the largest specified 131 ``<N>`` has precedence. The default is 5. 132 133.. option:: --dump-input-filter <value> 134 135 In the dump requested by ``--dump-input``, print only input lines of kind 136 ``<value>`` plus any context specified by ``--dump-input-context``. When 137 there are multiple occurrences of this option, the ``<value>`` that appears 138 earliest in the list below has precedence. The default is ``error`` when 139 ``--dump-input=fail``, and it's ``all`` when ``--dump-input=always``. 140 141 * ``all`` - All input lines 142 * ``annotation-full`` - Input lines with annotations 143 * ``annotation`` - Input lines with starting points of annotations 144 * ``error`` - Input lines with starting points of error annotations 145 146.. option:: --enable-var-scope 147 148 Enables scope for regex variables. 149 150 Variables with names that start with ``$`` are considered global and 151 remain set throughout the file. 152 153 All other variables get undefined after each encountered ``CHECK-LABEL``. 154 155.. option:: -D<VAR=VALUE> 156 157 Sets a filecheck pattern variable ``VAR`` with value ``VALUE`` that can be 158 used in ``CHECK:`` lines. 159 160.. option:: -D#<FMT>,<NUMVAR>=<NUMERIC EXPRESSION> 161 162 Sets a filecheck numeric variable ``NUMVAR`` of matching format ``FMT`` to 163 the result of evaluating ``<NUMERIC EXPRESSION>`` that can be used in 164 ``CHECK:`` lines. See section 165 ``FileCheck Numeric Variables and Expressions`` for details on supported 166 numeric expressions. 167 168.. option:: -version 169 170 Show the version number of this program. 171 172.. option:: -v 173 174 Print good directive pattern matches. However, if ``-dump-input=fail`` or 175 ``-dump-input=always``, add those matches as input annotations instead. 176 177.. option:: -vv 178 179 Print information helpful in diagnosing internal FileCheck issues, such as 180 discarded overlapping ``CHECK-DAG:`` matches, implicit EOF pattern matches, 181 and ``CHECK-NOT:`` patterns that do not have matches. Implies ``-v``. 182 However, if ``-dump-input=fail`` or ``-dump-input=always``, just add that 183 information as input annotations instead. 184 185.. option:: --allow-deprecated-dag-overlap 186 187 Enable overlapping among matches in a group of consecutive ``CHECK-DAG:`` 188 directives. This option is deprecated and is only provided for convenience 189 as old tests are migrated to the new non-overlapping ``CHECK-DAG:`` 190 implementation. 191 192.. option:: --allow-empty 193 194 Allow checking empty input. By default, empty input is rejected. 195 196.. option:: --color 197 198 Use colors in output (autodetected by default). 199 200EXIT STATUS 201----------- 202 203If :program:`FileCheck` verifies that the file matches the expected contents, 204it exits with 0. Otherwise, if not, or if an error occurs, it will exit with a 205non-zero value. 206 207TUTORIAL 208-------- 209 210FileCheck is typically used from LLVM regression tests, being invoked on the RUN 211line of the test. A simple example of using FileCheck from a RUN line looks 212like this: 213 214.. code-block:: llvm 215 216 ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s 217 218This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe 219that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``. This 220means that FileCheck will be verifying its standard input (the llc output) 221against the filename argument specified (the original ``.ll`` file specified by 222"``%s``"). To see how this works, let's look at the rest of the ``.ll`` file 223(after the RUN line): 224 225.. code-block:: llvm 226 227 define void @sub1(i32* %p, i32 %v) { 228 entry: 229 ; CHECK: sub1: 230 ; CHECK: subl 231 %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v) 232 ret void 233 } 234 235 define void @inc4(i64* %p) { 236 entry: 237 ; CHECK: inc4: 238 ; CHECK: incq 239 %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1) 240 ret void 241 } 242 243Here you can see some "``CHECK:``" lines specified in comments. Now you can 244see how the file is piped into ``llvm-as``, then ``llc``, and the machine code 245output is what we are verifying. FileCheck checks the machine code output to 246verify that it matches what the "``CHECK:``" lines specify. 247 248The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that 249must occur in order. FileCheck defaults to ignoring horizontal whitespace 250differences (e.g. a space is allowed to match a tab) but otherwise, the contents 251of the "``CHECK:``" line is required to match some thing in the test file exactly. 252 253One nice thing about FileCheck (compared to grep) is that it allows merging 254test cases together into logical groups. For example, because the test above 255is checking for the "``sub1:``" and "``inc4:``" labels, it will not match 256unless there is a "``subl``" in between those labels. If it existed somewhere 257else in the file, that would not count: "``grep subl``" matches if "``subl``" 258exists anywhere in the file. 259 260The FileCheck -check-prefix option 261~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 262 263The FileCheck `-check-prefix` option allows multiple test 264configurations to be driven from one `.ll` file. This is useful in many 265circumstances, for example, testing different architectural variants with 266:program:`llc`. Here's a simple example: 267 268.. code-block:: llvm 269 270 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \ 271 ; RUN: | FileCheck %s -check-prefix=X32 272 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \ 273 ; RUN: | FileCheck %s -check-prefix=X64 274 275 define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind { 276 %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1 277 ret <4 x i32> %tmp1 278 ; X32: pinsrd_1: 279 ; X32: pinsrd $1, 4(%esp), %xmm0 280 281 ; X64: pinsrd_1: 282 ; X64: pinsrd $1, %edi, %xmm0 283 } 284 285In this case, we're testing that we get the expected code generation with 286both 32-bit and 64-bit code generation. 287 288The "COM:" directive 289~~~~~~~~~~~~~~~~~~~~ 290 291Sometimes you want to disable a FileCheck directive without removing it 292entirely, or you want to write comments that mention a directive by name. The 293"``COM:``" directive makes it easy to do this. For example, you might have: 294 295.. code-block:: llvm 296 297 ; X32: pinsrd_1: 298 ; X32: pinsrd $1, 4(%esp), %xmm0 299 300 ; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but 301 ; COM: X64 will have something similar to X32: 302 ; COM: 303 ; COM: X64: pinsrd_1: 304 ; COM: X64: pinsrd $1, %edi, %xmm0 305 306Without "``COM:``", you would need to use some combination of rewording and 307directive syntax mangling to prevent FileCheck from recognizing the commented 308occurrences of "``X32:``" and "``X64:``" above as directives. Moreover, 309FileCheck diagnostics have been proposed that might complain about the above 310occurrences of "``X64``" that don't have the trailing "``:``" because they look 311like directive typos. Dodging all these problems can be tedious for a test 312author, and directive syntax mangling can make the purpose of test code unclear. 313"``COM:``" avoids all these problems. 314 315A few important usage notes: 316 317* "``COM:``" within another directive's pattern does *not* comment out the 318 remainder of the pattern. For example: 319 320 .. code-block:: llvm 321 322 ; X32: pinsrd $1, 4(%esp), %xmm0 COM: This is part of the X32 pattern! 323 324 If you need to temporarily comment out part of a directive's pattern, move it 325 to another line. The reason is that FileCheck parses "``COM:``" in the same 326 manner as any other directive: only the first directive on the line is 327 recognized as a directive. 328 329* For the sake of LIT, FileCheck treats "``RUN:``" just like "``COM:``". If this 330 is not suitable for your test environment, see :option:`--comment-prefixes`. 331 332* FileCheck does not recognize "``COM``", "``RUN``", or any user-defined comment 333 prefix as a comment directive if it's combined with one of the usual check 334 directive suffixes, such as "``-NEXT:``" or "``-NOT:``", discussed below. 335 FileCheck treats such a combination as plain text instead. If it needs to act 336 as a comment directive for your test environment, define it as such with 337 :option:`--comment-prefixes`. 338 339The "CHECK-NEXT:" directive 340~~~~~~~~~~~~~~~~~~~~~~~~~~~ 341 342Sometimes you want to match lines and would like to verify that matches 343happen on exactly consecutive lines with no other lines in between them. In 344this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify 345this. If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``". 346For example, something like this works as you'd expect: 347 348.. code-block:: llvm 349 350 define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) { 351 %tmp3 = load <2 x double>* %A, align 16 352 %tmp7 = insertelement <2 x double> undef, double %B, i32 0 353 %tmp9 = shufflevector <2 x double> %tmp3, 354 <2 x double> %tmp7, 355 <2 x i32> < i32 0, i32 2 > 356 store <2 x double> %tmp9, <2 x double>* %r, align 16 357 ret void 358 359 ; CHECK: t2: 360 ; CHECK: movl 8(%esp), %eax 361 ; CHECK-NEXT: movapd (%eax), %xmm0 362 ; CHECK-NEXT: movhpd 12(%esp), %xmm0 363 ; CHECK-NEXT: movl 4(%esp), %eax 364 ; CHECK-NEXT: movapd %xmm0, (%eax) 365 ; CHECK-NEXT: ret 366 } 367 368"``CHECK-NEXT:``" directives reject the input unless there is exactly one 369newline between it and the previous directive. A "``CHECK-NEXT:``" cannot be 370the first directive in a file. 371 372The "CHECK-SAME:" directive 373~~~~~~~~~~~~~~~~~~~~~~~~~~~ 374 375Sometimes you want to match lines and would like to verify that matches happen 376on the same line as the previous match. In this case, you can use "``CHECK:``" 377and "``CHECK-SAME:``" directives to specify this. If you specified a custom 378check prefix, just use "``<PREFIX>-SAME:``". 379 380"``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``" 381(described below). 382 383For example, the following works like you'd expect: 384 385.. code-block:: llvm 386 387 !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2) 388 389 ; CHECK: !DILocation(line: 5, 390 ; CHECK-NOT: column: 391 ; CHECK-SAME: scope: ![[SCOPE:[0-9]+]] 392 393"``CHECK-SAME:``" directives reject the input if there are any newlines between 394it and the previous directive. 395 396"``CHECK-SAME:``" is also useful to avoid writing matchers for irrelevant 397fields. For example, suppose you're writing a test which parses a tool that 398generates output like this: 399 400.. code-block:: text 401 402 Name: foo 403 Field1: ... 404 Field2: ... 405 Field3: ... 406 Value: 1 407 408 Name: bar 409 Field1: ... 410 Field2: ... 411 Field3: ... 412 Value: 2 413 414 Name: baz 415 Field1: ... 416 Field2: ... 417 Field3: ... 418 Value: 1 419 420To write a test that verifies ``foo`` has the value ``1``, you might first 421write this: 422 423.. code-block:: text 424 425 CHECK: Name: foo 426 CHECK: Value: 1{{$}} 427 428However, this would be a bad test: if the value for ``foo`` changes, the test 429would still pass because the "``CHECK: Value: 1``" line would match the value 430from ``baz``. To fix this, you could add ``CHECK-NEXT`` matchers for every 431``FieldN:`` line, but that would be verbose, and need to be updated when 432``Field4`` is added. A more succinct way to write the test using the 433"``CHECK-SAME:``" matcher would be as follows: 434 435.. code-block:: text 436 437 CHECK: Name: foo 438 CHECK: Value: 439 CHECK-SAME: {{ 1$}} 440 441This verifies that the *next* time "``Value:``" appears in the output, it has 442the value ``1``. 443 444Note: a "``CHECK-SAME:``" cannot be the first directive in a file. 445 446The "CHECK-EMPTY:" directive 447~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 448 449If you need to check that the next line has nothing on it, not even whitespace, 450you can use the "``CHECK-EMPTY:``" directive. 451 452.. code-block:: llvm 453 454 declare void @foo() 455 456 declare void @bar() 457 ; CHECK: foo 458 ; CHECK-EMPTY: 459 ; CHECK-NEXT: bar 460 461Just like "``CHECK-NEXT:``" the directive will fail if there is more than one 462newline before it finds the next blank line, and it cannot be the first 463directive in a file. 464 465The "CHECK-NOT:" directive 466~~~~~~~~~~~~~~~~~~~~~~~~~~ 467 468The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur 469between two matches (or before the first match, or after the last match). For 470example, to verify that a load is removed by a transformation, a test like this 471can be used: 472 473.. code-block:: llvm 474 475 define i8 @coerce_offset0(i32 %V, i32* %P) { 476 store i32 %V, i32* %P 477 478 %P2 = bitcast i32* %P to i8* 479 %P3 = getelementptr i8* %P2, i32 2 480 481 %A = load i8* %P3 482 ret i8 %A 483 ; CHECK: @coerce_offset0 484 ; CHECK-NOT: load 485 ; CHECK: ret i8 486 } 487 488The "CHECK-COUNT:" directive 489~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 490 491If you need to match multiple lines with the same pattern over and over again 492you can repeat a plain ``CHECK:`` as many times as needed. If that looks too 493boring you can instead use a counted check "``CHECK-COUNT-<num>:``", where 494``<num>`` is a positive decimal number. It will match the pattern exactly 495``<num>`` times, no more and no less. If you specified a custom check prefix, 496just use "``<PREFIX>-COUNT-<num>:``" for the same effect. 497Here is a simple example: 498 499.. code-block:: text 500 501 Loop at depth 1 502 Loop at depth 1 503 Loop at depth 1 504 Loop at depth 1 505 Loop at depth 2 506 Loop at depth 3 507 508 ; CHECK-COUNT-6: Loop at depth {{[0-9]+}} 509 ; CHECK-NOT: Loop at depth {{[0-9]+}} 510 511The "CHECK-DAG:" directive 512~~~~~~~~~~~~~~~~~~~~~~~~~~ 513 514If it's necessary to match strings that don't occur in a strictly sequential 515order, "``CHECK-DAG:``" could be used to verify them between two matches (or 516before the first match, or after the last match). For example, clang emits 517vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks 518in the natural order: 519 520.. code-block:: c++ 521 522 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s 523 524 struct Foo { virtual void method(); }; 525 Foo f; // emit vtable 526 // CHECK-DAG: @_ZTV3Foo = 527 528 struct Bar { virtual void method(); }; 529 Bar b; 530 // CHECK-DAG: @_ZTV3Bar = 531 532``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to 533exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result, 534the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all 535occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind 536occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example, 537 538.. code-block:: llvm 539 540 ; CHECK-DAG: BEFORE 541 ; CHECK-NOT: NOT 542 ; CHECK-DAG: AFTER 543 544This case will reject input strings where ``BEFORE`` occurs after ``AFTER``. 545 546With captured variables, ``CHECK-DAG:`` is able to match valid topological 547orderings of a DAG with edges from the definition of a variable to its use. 548It's useful, e.g., when your test cases need to match different output 549sequences from the instruction scheduler. For example, 550 551.. code-block:: llvm 552 553 ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2 554 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4 555 ; CHECK: mul r5, [[REG1]], [[REG2]] 556 557In this case, any order of that two ``add`` instructions will be allowed. 558 559If you are defining `and` using variables in the same ``CHECK-DAG:`` block, 560be aware that the definition rule can match `after` its use. 561 562So, for instance, the code below will pass: 563 564.. code-block:: text 565 566 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0] 567 ; CHECK-DAG: vmov.32 [[REG2]][1] 568 vmov.32 d0[1] 569 vmov.32 d0[0] 570 571While this other code, will not: 572 573.. code-block:: text 574 575 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0] 576 ; CHECK-DAG: vmov.32 [[REG2]][1] 577 vmov.32 d1[1] 578 vmov.32 d0[0] 579 580While this can be very useful, it's also dangerous, because in the case of 581register sequence, you must have a strong order (read before write, copy before 582use, etc). If the definition your test is looking for doesn't match (because 583of a bug in the compiler), it may match further away from the use, and mask 584real bugs away. 585 586In those cases, to enforce the order, use a non-DAG directive between DAG-blocks. 587 588A ``CHECK-DAG:`` directive skips matches that overlap the matches of any 589preceding ``CHECK-DAG:`` directives in the same ``CHECK-DAG:`` block. Not only 590is this non-overlapping behavior consistent with other directives, but it's 591also necessary to handle sets of non-unique strings or patterns. For example, 592the following directives look for unordered log entries for two tasks in a 593parallel program, such as the OpenMP runtime: 594 595.. code-block:: text 596 597 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin 598 // CHECK-DAG: [[THREAD_ID]]: task_end 599 // 600 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin 601 // CHECK-DAG: [[THREAD_ID]]: task_end 602 603The second pair of directives is guaranteed not to match the same log entries 604as the first pair even though the patterns are identical and even if the text 605of the log entries is identical because the thread ID manages to be reused. 606 607The "CHECK-LABEL:" directive 608~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 609 610Sometimes in a file containing multiple tests divided into logical blocks, one 611or more ``CHECK:`` directives may inadvertently succeed by matching lines in a 612later block. While an error will usually eventually be generated, the check 613flagged as causing the error may not actually bear any relationship to the 614actual source of the problem. 615 616In order to produce better error messages in these cases, the "``CHECK-LABEL:``" 617directive can be used. It is treated identically to a normal ``CHECK`` 618directive except that FileCheck makes an additional assumption that a line 619matched by the directive cannot also be matched by any other check present in 620``match-filename``; this is intended to be used for lines containing labels or 621other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides 622the input stream into separate blocks, each of which is processed independently, 623preventing a ``CHECK:`` directive in one block matching a line in another block. 624If ``--enable-var-scope`` is in effect, all local variables are cleared at the 625beginning of the block. 626 627For example, 628 629.. code-block:: llvm 630 631 define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) { 632 entry: 633 ; CHECK-LABEL: C_ctor_base: 634 ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0 635 ; CHECK: bl A_ctor_base 636 ; CHECK: mov r0, [[SAVETHIS]] 637 %0 = bitcast %struct.C* %this to %struct.A* 638 %call = tail call %struct.A* @A_ctor_base(%struct.A* %0) 639 %1 = bitcast %struct.C* %this to %struct.B* 640 %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x) 641 ret %struct.C* %this 642 } 643 644 define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) { 645 entry: 646 ; CHECK-LABEL: D_ctor_base: 647 648The use of ``CHECK-LABEL:`` directives in this case ensures that the three 649``CHECK:`` directives only accept lines corresponding to the body of the 650``@C_ctor_base`` function, even if the patterns match lines found later in 651the file. Furthermore, if one of these three ``CHECK:`` directives fail, 652FileCheck will recover by continuing to the next block, allowing multiple test 653failures to be detected in a single invocation. 654 655There is no requirement that ``CHECK-LABEL:`` directives contain strings that 656correspond to actual syntactic labels in a source or output language: they must 657simply uniquely match a single line in the file being verified. 658 659``CHECK-LABEL:`` directives cannot contain variable definitions or uses. 660 661Directive modifiers 662~~~~~~~~~~~~~~~~~~~ 663 664A directive modifier can be append to a directive by following the directive 665with ``{<modifier>}`` where the only supported value for ``<modifier>`` is 666``LITERAL``. 667 668The ``LITERAL`` directive modifier can be used to perform a literal match. The 669modifier results in the directive not recognizing any syntax to perform regex 670matching, variable capture or any substitutions. This is useful when the text 671to match would require excessive escaping otherwise. For example, the 672following will perform literal matches rather than considering these as 673regular expressions: 674 675.. code-block:: text 676 677 Input: [[[10, 20]], [[30, 40]]] 678 Output %r10: [[10, 20]] 679 Output %r10: [[30, 40]] 680 681 ; CHECK{LITERAL}: [[[10, 20]], [[30, 40]]] 682 ; CHECK-DAG{LITERAL}: [[30, 40]] 683 ; CHECK-DAG{LITERAL}: [[10, 20]] 684 685FileCheck Regex Matching Syntax 686~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 687 688All FileCheck directives take a pattern to match. 689For most uses of FileCheck, fixed string matching is perfectly sufficient. For 690some things, a more flexible form of matching is desired. To support this, 691FileCheck allows you to specify regular expressions in matching strings, 692surrounded by double braces: ``{{yourregex}}``. FileCheck implements a POSIX 693regular expression matcher; it supports Extended POSIX regular expressions 694(ERE). Because we want to use fixed string matching for a majority of what we 695do, FileCheck has been designed to support mixing and matching fixed string 696matching with regular expressions. This allows you to write things like this: 697 698.. code-block:: llvm 699 700 ; CHECK: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}} 701 702In this case, any offset from the ESP register will be allowed, and any xmm 703register will be allowed. 704 705Because regular expressions are enclosed with double braces, they are 706visually distinct, and you don't need to use escape characters within the double 707braces like you would in C. In the rare case that you want to match double 708braces explicitly from the input, you can use something ugly like 709``{{[}][}]}}`` as your pattern. Or if you are using the repetition count 710syntax, for example ``[[:xdigit:]]{8}`` to match exactly 8 hex digits, you 711would need to add parentheses like this ``{{([[:xdigit:]]{8})}}`` to avoid 712confusion with FileCheck's closing double-brace. 713 714FileCheck String Substitution Blocks 715~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 716 717It is often useful to match a pattern and then verify that it occurs again 718later in the file. For codegen tests, this can be useful to allow any 719register, but verify that that register is used consistently later. To do 720this, :program:`FileCheck` supports string substitution blocks that allow 721string variables to be defined and substituted into patterns. Here is a simple 722example: 723 724.. code-block:: llvm 725 726 ; CHECK: test5: 727 ; CHECK: notw [[REGISTER:%[a-z]+]] 728 ; CHECK: andw {{.*}}[[REGISTER]] 729 730The first check line matches a regex ``%[a-z]+`` and captures it into the 731string variable ``REGISTER``. The second line verifies that whatever is in 732``REGISTER`` occurs later in the file after an "``andw``". :program:`FileCheck` 733string substitution blocks are always contained in ``[[ ]]`` pairs, and string 734variable names can be formed with the regex ``\$[a-zA-Z_][a-zA-Z0-9_]*``. If a 735colon follows the name, then it is a definition of the variable; otherwise, it 736is a substitution. 737 738:program:`FileCheck` variables can be defined multiple times, and substitutions 739always get the latest value. Variables can also be substituted later on the 740same line they were defined on. For example: 741 742.. code-block:: llvm 743 744 ; CHECK: op [[REG:r[0-9]+]], [[REG]] 745 746Can be useful if you want the operands of ``op`` to be the same register, 747and don't care exactly which register it is. 748 749If ``--enable-var-scope`` is in effect, variables with names that 750start with ``$`` are considered to be global. All others variables are 751local. All local variables get undefined at the beginning of each 752CHECK-LABEL block. Global variables are not affected by CHECK-LABEL. 753This makes it easier to ensure that individual tests are not affected 754by variables set in preceding tests. 755 756FileCheck Numeric Substitution Blocks 757~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 758 759:program:`FileCheck` also supports numeric substitution blocks that allow 760defining numeric variables and checking for numeric values that satisfy a 761numeric expression constraint based on those variables via a numeric 762substitution. This allows ``CHECK:`` directives to verify a numeric relation 763between two numbers, such as the need for consecutive registers to be used. 764 765The syntax to capture a numeric value is 766``[[#%<fmtspec>,<NUMVAR>:]]`` where: 767 768* ``%<fmtspec>,`` is an optional format specifier to indicate what number 769 format to match and the minimum number of digits to expect. 770 771* ``<NUMVAR>:`` is an optional definition of variable ``<NUMVAR>`` from the 772 captured value. 773 774The syntax of ``<fmtspec>`` is: ``#.<precision><conversion specifier>`` where: 775 776* ``#`` is an optional flag available for hex values (see 777 ``<conversion specifier>`` below) which requires the value matched to be 778 prefixed by ``0x``. 779* ``.<precision>`` is an optional printf-style precision specifier in which 780 ``<precision>`` indicates the minimum number of digits that the value matched 781 must have, expecting leading zeros if needed. 782 783* ``<conversion specifier>`` is an optional scanf-style conversion specifier 784 to indicate what number format to match (e.g. hex number). Currently 785 accepted format specifiers are ``%u``, ``%d``, ``%x`` and ``%X``. If absent, 786 the format specifier defaults to ``%u``. 787 788 789For example: 790 791.. code-block:: llvm 792 793 ; CHECK: mov r[[#REG:]], 0x[[#%.8X,ADDR:]] 794 795would match ``mov r5, 0x0000FEFE`` and set ``REG`` to the value ``5`` and 796``ADDR`` to the value ``0xFEFE``. Note that due to the precision it would fail 797to match ``mov r5, 0xFEFE``. 798 799As a result of the numeric variable definition being optional, it is possible 800to only check that a numeric value is present in a given format. This can be 801useful when the value itself is not useful, for instance: 802 803.. code-block:: gas 804 805 ; CHECK-NOT: mov r0, r[[#]] 806 807to check that a value is synthesized rather than moved around. 808 809 810The syntax of a numeric substitution is 811``[[#%<fmtspec>, <constraint> <expr>]]`` where: 812 813* ``<fmtspec>`` is the same format specifier as for defining a variable but 814 in this context indicating how a numeric expression value should be matched 815 against. If absent, both components of the format specifier are inferred from 816 the matching format of the numeric variable(s) used by the expression 817 constraint if any, and defaults to ``%u`` if no numeric variable is used, 818 denoting that the value should be unsigned with no leading zeros. In case of 819 conflict between format specifiers of several numeric variables, the 820 conversion specifier becomes mandatory but the precision specifier remains 821 optional. 822 823* ``<constraint>`` is the constraint describing how the value to match must 824 relate to the value of the numeric expression. The only currently accepted 825 constraint is ``==`` for an exact match and is the default if 826 ``<constraint>`` is not provided. No matching constraint must be specified 827 when the ``<expr>`` is empty. 828 829* ``<expr>`` is an expression. An expression is in turn recursively defined 830 as: 831 832 * a numeric operand, or 833 * an expression followed by an operator and a numeric operand. 834 835 A numeric operand is a previously defined numeric variable, an integer 836 literal, or a function. Spaces are accepted before, after and between any of 837 these elements. Numeric operands have 64-bit precision. Overflow and underflow 838 are rejected. There is no support for operator precedence, but parentheses 839 can be used to change the evaluation order. 840 841The supported operators are: 842 843 * ``+`` - Returns the sum of its two operands. 844 * ``-`` - Returns the difference of its two operands. 845 846The syntax of a function call is ``<name>(<arguments>)`` where: 847 848* ``name`` is a predefined string literal. Accepted values are: 849 850 * add - Returns the sum of its two operands. 851 * div - Returns the quotient of its two operands. 852 * max - Returns the largest of its two operands. 853 * min - Returns the smallest of its two operands. 854 * mul - Returns the product of its two operands. 855 * sub - Returns the difference of its two operands. 856 857* ``<arguments>`` is a comma separated list of expressions. 858 859For example: 860 861.. code-block:: llvm 862 863 ; CHECK: load r[[#REG:]], [r0] 864 ; CHECK: load r[[#REG+1]], [r1] 865 ; CHECK: Loading from 0x[[#%x,ADDR:]] 866 ; CHECK-SAME: to 0x[[#ADDR + 7]] 867 868The above example would match the text: 869 870.. code-block:: gas 871 872 load r5, [r0] 873 load r6, [r1] 874 Loading from 0xa0463440 to 0xa0463447 875 876but would not match the text: 877 878.. code-block:: gas 879 880 load r5, [r0] 881 load r7, [r1] 882 Loading from 0xa0463440 to 0xa0463443 883 884Due to ``7`` being unequal to ``5 + 1`` and ``a0463443`` being unequal to 885``a0463440 + 7``. 886 887 888A numeric variable can also be defined to the result of a numeric expression, 889in which case the numeric expression constraint is checked and if verified the 890variable is assigned to the value. The unified syntax for both checking a 891numeric expression and capturing its value into a numeric variable is thus 892``[[#%<fmtspec>,<NUMVAR>: <constraint> <expr>]]`` with each element as 893described previously. One can use this syntax to make a testcase more 894self-describing by using variables instead of values: 895 896.. code-block:: gas 897 898 ; CHECK: mov r[[#REG_OFFSET:]], 0x[[#%X,FIELD_OFFSET:12]] 899 ; CHECK-NEXT: load r[[#]], [r[[#REG_BASE:]], r[[#REG_OFFSET]]] 900 901which would match: 902 903.. code-block:: gas 904 905 mov r4, 0xC 906 load r6, [r5, r4] 907 908The ``--enable-var-scope`` option has the same effect on numeric variables as 909on string variables. 910 911Important note: In its current implementation, an expression cannot use a 912numeric variable defined earlier in the same CHECK directive. 913 914FileCheck Pseudo Numeric Variables 915~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 916 917Sometimes there's a need to verify output that contains line numbers of the 918match file, e.g. when testing compiler diagnostics. This introduces a certain 919fragility of the match file structure, as "``CHECK:``" lines contain absolute 920line numbers in the same file, which have to be updated whenever line numbers 921change due to text addition or deletion. 922 923To support this case, FileCheck expressions understand the ``@LINE`` pseudo 924numeric variable which evaluates to the line number of the CHECK pattern where 925it is found. 926 927This way match patterns can be put near the relevant test lines and include 928relative line number references, for example: 929 930.. code-block:: c++ 931 932 // CHECK: test.cpp:[[# @LINE + 4]]:6: error: expected ';' after top level declarator 933 // CHECK-NEXT: {{^int a}} 934 // CHECK-NEXT: {{^ \^}} 935 // CHECK-NEXT: {{^ ;}} 936 int a 937 938To support legacy uses of ``@LINE`` as a special string variable, 939:program:`FileCheck` also accepts the following uses of ``@LINE`` with string 940substitution block syntax: ``[[@LINE]]``, ``[[@LINE+<offset>]]`` and 941``[[@LINE-<offset>]]`` without any spaces inside the brackets and where 942``offset`` is an integer. 943 944Matching Newline Characters 945~~~~~~~~~~~~~~~~~~~~~~~~~~~ 946 947To match newline characters in regular expressions the character class 948``[[:space:]]`` can be used. For example, the following pattern: 949 950.. code-block:: c++ 951 952 // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd" 953 954matches output of the form (from llvm-dwarfdump): 955 956.. code-block:: text 957 958 DW_AT_location [DW_FORM_sec_offset] (0x00000233) 959 DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c9] = "intd") 960 961letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value 962``0x00000233``, extracted from the line immediately preceding "``intd``". 963