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