blob: a424606d4ce0a206656aaf08102263937ae524fa [file] [log] [blame]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00001FileCheck - Flexible pattern matching file verifier
2===================================================
3
James Hendersona0566842019-06-27 13:24:46 +00004.. program:: FileCheck
5
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00006SYNOPSIS
7--------
8
Dmitri Gribenkof589e242012-11-29 19:21:02 +00009:program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000010
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000011DESCRIPTION
12-----------
13
Dmitri Gribenkof589e242012-11-29 19:21:02 +000014: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.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000021
Dmitri Gribenkof589e242012-11-29 19:21:02 +000022The ``match-filename`` file specifies the file that contains the patterns to
Stephen Lina6e877f2013-07-14 18:12:25 +000023match. The file to verify is read from standard input unless the
24:option:`--input-file` option is used.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000025
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000026OPTIONS
27-------
28
Joel E. Denny24994d72018-11-06 22:07:03 +000029Options are parsed from the environment variable ``FILECHECK_OPTS``
30and from the command line.
31
Dmitri Gribenkof589e242012-11-29 19:21:02 +000032.. option:: -help
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000033
34 Print a summary of command line options.
35
Dmitri Gribenkof589e242012-11-29 19:21:02 +000036.. option:: --check-prefix prefix
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000037
Matt Arsenault13df4622013-11-10 02:04:09 +000038 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 one or more
43 prefixes to match. Multiple prefixes are useful for tests which might
44 change for different run options, but most lines remain the same.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000045
Daniel Sandersad875c22016-06-14 16:42:05 +000046.. option:: --check-prefixes prefix1,prefix2,...
47
48 An alias of :option:`--check-prefix` that allows multiple prefixes to be
49 specified as a comma separated list.
50
Dmitri Gribenkof589e242012-11-29 19:21:02 +000051.. option:: --input-file filename
Eli Bendersky8a7e80f2012-11-07 01:41:30 +000052
53 File to check (defaults to stdin).
54
James Y Knight85913cc2016-02-11 16:46:09 +000055.. option:: --match-full-lines
56
57 By default, FileCheck allows matches of anywhere on a line. This
58 option will require all positive matches to cover an entire
59 line. Leading and trailing whitespace is ignored, unless
60 :option:`--strict-whitespace` is also specified. (Note: negative
61 matches from ``CHECK-NOT`` are not affected by this option!)
62
63 Passing this option is equivalent to inserting ``{{^ *}}`` or
64 ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive
65 check pattern.
66
Dmitri Gribenkof589e242012-11-29 19:21:02 +000067.. option:: --strict-whitespace
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000068
69 By default, FileCheck canonicalizes input horizontal whitespace (spaces and
70 tabs) which causes it to ignore these differences (a space will match a tab).
Guy Benyei5ea04c32013-02-06 20:40:38 +000071 The :option:`--strict-whitespace` argument disables this behavior. End-of-line
Sean Silvab6bfbad2013-06-21 00:27:54 +000072 sequences are canonicalized to UNIX-style ``\n`` in all modes.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000073
Alexander Kornienko56ccdbb2014-07-11 12:39:32 +000074.. option:: --implicit-check-not check-pattern
75
76 Adds implicit negative checks for the specified patterns between positive
77 checks. The option allows writing stricter tests without stuffing them with
Dan Liewa762a132014-07-21 16:39:00 +000078 ``CHECK-NOT``\ s.
Alexander Kornienko56ccdbb2014-07-11 12:39:32 +000079
80 For example, "``--implicit-check-not warning:``" can be useful when testing
81 diagnostic messages from tools that don't have an option similar to ``clang
82 -verify``. With this option FileCheck will verify that input does not contain
83 warnings not covered by any ``CHECK:`` patterns.
84
Joel E. Denny3c5d2672018-12-18 00:01:39 +000085.. option:: --dump-input <mode>
86
87 Dump input to stderr, adding annotations representing currently enabled
88 diagnostics. Do this either 'always', on 'fail', or 'never'. Specify 'help'
89 to explain the dump format and quit.
90
George Karpenkov346dfbe2018-07-20 20:21:57 +000091.. option:: --dump-input-on-failure
92
Joel E. Denny3c5d2672018-12-18 00:01:39 +000093 When the check fails, dump all of the original input. This option is
94 deprecated in favor of `--dump-input=fail`.
George Karpenkov346dfbe2018-07-20 20:21:57 +000095
Artem Belevichf55e72a2017-03-09 17:59:04 +000096.. option:: --enable-var-scope
97
98 Enables scope for regex variables.
99
100 Variables with names that start with ``$`` are considered global and
101 remain set throughout the file.
102
103 All other variables get undefined after each encountered ``CHECK-LABEL``.
104
Alexander Richardson46e1fd62017-11-07 13:24:44 +0000105.. option:: -D<VAR=VALUE>
106
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000107 Sets a filecheck pattern variable ``VAR`` with value ``VALUE`` that can be
108 used in ``CHECK:`` lines.
Alexander Richardson46e1fd62017-11-07 13:24:44 +0000109
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000110.. option:: -D#<NUMVAR>=<VALUE>
111
112 Sets a filecheck numeric variable ``NUMVAR`` to ``<VALUE>`` that can be used
113 in ``CHECK:`` lines.
114
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000115.. option:: -version
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000116
117 Show the version number of this program.
118
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000119.. option:: -v
120
Joel E. Denny352695c2019-01-22 21:41:42 +0000121 Print good directive pattern matches. However, if ``-input-dump=fail`` or
122 ``-input-dump=always``, add those matches as input annotations instead.
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000123
124.. option:: -vv
125
126 Print information helpful in diagnosing internal FileCheck issues, such as
127 discarded overlapping ``CHECK-DAG:`` matches, implicit EOF pattern matches,
128 and ``CHECK-NOT:`` patterns that do not have matches. Implies ``-v``.
Joel E. Denny352695c2019-01-22 21:41:42 +0000129 However, if ``-input-dump=fail`` or ``-input-dump=always``, just add that
130 information as input annotations instead.
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000131
Joel E. Dennybcf5b442018-07-11 20:27:27 +0000132.. option:: --allow-deprecated-dag-overlap
133
134 Enable overlapping among matches in a group of consecutive ``CHECK-DAG:``
135 directives. This option is deprecated and is only provided for convenience
136 as old tests are migrated to the new non-overlapping ``CHECK-DAG:``
137 implementation.
138
Joel E. Denny3e665092018-10-24 21:46:42 +0000139.. option:: --color
140
141 Use colors in output (autodetected by default).
142
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000143EXIT STATUS
144-----------
145
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000146If :program:`FileCheck` verifies that the file matches the expected contents,
147it exits with 0. Otherwise, if not, or if an error occurs, it will exit with a
148non-zero value.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000149
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000150TUTORIAL
151--------
152
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000153FileCheck is typically used from LLVM regression tests, being invoked on the RUN
154line of the test. A simple example of using FileCheck from a RUN line looks
155like this:
156
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000157.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000158
159 ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
160
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000161This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe
162that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``. This
163means that FileCheck will be verifying its standard input (the llc output)
164against the filename argument specified (the original ``.ll`` file specified by
165"``%s``"). To see how this works, let's look at the rest of the ``.ll`` file
166(after the RUN line):
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000167
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000168.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000169
170 define void @sub1(i32* %p, i32 %v) {
171 entry:
172 ; CHECK: sub1:
173 ; CHECK: subl
174 %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
175 ret void
176 }
177
178 define void @inc4(i64* %p) {
179 entry:
180 ; CHECK: inc4:
181 ; CHECK: incq
182 %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
183 ret void
184 }
185
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000186Here you can see some "``CHECK:``" lines specified in comments. Now you can
187see how the file is piped into ``llvm-as``, then ``llc``, and the machine code
188output is what we are verifying. FileCheck checks the machine code output to
189verify that it matches what the "``CHECK:``" lines specify.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000190
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000191The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000192must occur in order. FileCheck defaults to ignoring horizontal whitespace
193differences (e.g. a space is allowed to match a tab) but otherwise, the contents
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000194of the "``CHECK:``" line is required to match some thing in the test file exactly.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000195
196One nice thing about FileCheck (compared to grep) is that it allows merging
197test cases together into logical groups. For example, because the test above
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000198is checking for the "``sub1:``" and "``inc4:``" labels, it will not match
199unless there is a "``subl``" in between those labels. If it existed somewhere
200else in the file, that would not count: "``grep subl``" matches if "``subl``"
201exists anywhere in the file.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000202
203The FileCheck -check-prefix option
204~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
205
Renato Golin124f2592016-07-20 12:16:38 +0000206The FileCheck `-check-prefix` option allows multiple test
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000207configurations to be driven from one `.ll` file. This is useful in many
208circumstances, for example, testing different architectural variants with
209:program:`llc`. Here's a simple example:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000210
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000211.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000212
213 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000214 ; RUN: | FileCheck %s -check-prefix=X32
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000215 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000216 ; RUN: | FileCheck %s -check-prefix=X64
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000217
218 define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
219 %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
220 ret <4 x i32> %tmp1
221 ; X32: pinsrd_1:
222 ; X32: pinsrd $1, 4(%esp), %xmm0
223
224 ; X64: pinsrd_1:
225 ; X64: pinsrd $1, %edi, %xmm0
226 }
227
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000228In this case, we're testing that we get the expected code generation with
229both 32-bit and 64-bit code generation.
230
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000231The "CHECK-NEXT:" directive
232~~~~~~~~~~~~~~~~~~~~~~~~~~~
233
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000234Sometimes you want to match lines and would like to verify that matches
235happen on exactly consecutive lines with no other lines in between them. In
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000236this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify
237this. If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``".
238For example, something like this works as you'd expect:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000239
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000240.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000241
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000242 define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
243 %tmp3 = load <2 x double>* %A, align 16
244 %tmp7 = insertelement <2 x double> undef, double %B, i32 0
245 %tmp9 = shufflevector <2 x double> %tmp3,
246 <2 x double> %tmp7,
247 <2 x i32> < i32 0, i32 2 >
248 store <2 x double> %tmp9, <2 x double>* %r, align 16
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000249 ret void
250
251 ; CHECK: t2:
252 ; CHECK: movl 8(%esp), %eax
253 ; CHECK-NEXT: movapd (%eax), %xmm0
254 ; CHECK-NEXT: movhpd 12(%esp), %xmm0
255 ; CHECK-NEXT: movl 4(%esp), %eax
256 ; CHECK-NEXT: movapd %xmm0, (%eax)
257 ; CHECK-NEXT: ret
258 }
259
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000260"``CHECK-NEXT:``" directives reject the input unless there is exactly one
Eli Bendersky2fef6b62012-11-21 22:40:52 +0000261newline between it and the previous directive. A "``CHECK-NEXT:``" cannot be
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000262the first directive in a file.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000263
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000264The "CHECK-SAME:" directive
265~~~~~~~~~~~~~~~~~~~~~~~~~~~
266
267Sometimes you want to match lines and would like to verify that matches happen
268on the same line as the previous match. In this case, you can use "``CHECK:``"
269and "``CHECK-SAME:``" directives to specify this. If you specified a custom
270check prefix, just use "``<PREFIX>-SAME:``".
271
272"``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``"
273(described below).
274
275For example, the following works like you'd expect:
276
277.. code-block:: llvm
278
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000279 !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000280
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000281 ; CHECK: !DILocation(line: 5,
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000282 ; CHECK-NOT: column:
283 ; CHECK-SAME: scope: ![[SCOPE:[0-9]+]]
284
285"``CHECK-SAME:``" directives reject the input if there are any newlines between
286it and the previous directive. A "``CHECK-SAME:``" cannot be the first
287directive in a file.
288
James Henderson5507f662018-06-26 15:15:45 +0000289The "CHECK-EMPTY:" directive
James Hendersonc307b002018-06-26 15:29:09 +0000290~~~~~~~~~~~~~~~~~~~~~~~~~~~~
James Henderson5507f662018-06-26 15:15:45 +0000291
292If you need to check that the next line has nothing on it, not even whitespace,
293you can use the "``CHECK-EMPTY:``" directive.
294
295.. code-block:: llvm
296
Chandler Carruthef705b72018-08-06 01:41:25 +0000297 declare void @foo()
James Henderson5507f662018-06-26 15:15:45 +0000298
Chandler Carruthef705b72018-08-06 01:41:25 +0000299 declare void @bar()
James Henderson5507f662018-06-26 15:15:45 +0000300 ; CHECK: foo
301 ; CHECK-EMPTY:
302 ; CHECK-NEXT: bar
303
304Just like "``CHECK-NEXT:``" the directive will fail if there is more than one
305newline before it finds the next blank line, and it cannot be the first
306directive in a file.
307
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000308The "CHECK-NOT:" directive
309~~~~~~~~~~~~~~~~~~~~~~~~~~
310
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000311The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000312between two matches (or before the first match, or after the last match). For
313example, to verify that a load is removed by a transformation, a test like this
314can be used:
315
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000316.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000317
318 define i8 @coerce_offset0(i32 %V, i32* %P) {
319 store i32 %V, i32* %P
320
321 %P2 = bitcast i32* %P to i8*
322 %P3 = getelementptr i8* %P2, i32 2
323
324 %A = load i8* %P3
325 ret i8 %A
326 ; CHECK: @coerce_offset0
327 ; CHECK-NOT: load
328 ; CHECK: ret i8
329 }
330
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000331The "CHECK-COUNT:" directive
Fedor Sergeev5bf0c152018-11-13 01:12:19 +0000332~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000333
334If you need to match multiple lines with the same pattern over and over again
335you can repeat a plain ``CHECK:`` as many times as needed. If that looks too
336boring you can instead use a counted check "``CHECK-COUNT-<num>:``", where
337``<num>`` is a positive decimal number. It will match the pattern exactly
338``<num>`` times, no more and no less. If you specified a custom check prefix,
339just use "``<PREFIX>-COUNT-<num>:``" for the same effect.
340Here is a simple example:
341
Fedor Sergeev8b078122018-11-13 05:47:01 +0000342.. code-block:: text
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000343
344 Loop at depth 1
345 Loop at depth 1
346 Loop at depth 1
347 Loop at depth 1
348 Loop at depth 2
349 Loop at depth 3
350
351 ; CHECK-COUNT-6: Loop at depth {{[0-9]+}}
352 ; CHECK-NOT: Loop at depth {{[0-9]+}}
353
Michael Liao91a1b2c2013-05-14 20:34:12 +0000354The "CHECK-DAG:" directive
355~~~~~~~~~~~~~~~~~~~~~~~~~~
356
357If it's necessary to match strings that don't occur in a strictly sequential
358order, "``CHECK-DAG:``" could be used to verify them between two matches (or
359before the first match, or after the last match). For example, clang emits
360vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks
361in the natural order:
362
363.. code-block:: c++
364
365 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
366
367 struct Foo { virtual void method(); };
368 Foo f; // emit vtable
369 // CHECK-DAG: @_ZTV3Foo =
370
371 struct Bar { virtual void method(); };
372 Bar b;
373 // CHECK-DAG: @_ZTV3Bar =
374
Renato Golin58ab84a2013-10-11 18:50:22 +0000375``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to
376exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result,
377the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all
378occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind
379occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example,
380
381.. code-block:: llvm
382
383 ; CHECK-DAG: BEFORE
384 ; CHECK-NOT: NOT
385 ; CHECK-DAG: AFTER
386
387This case will reject input strings where ``BEFORE`` occurs after ``AFTER``.
Michael Liao91a1b2c2013-05-14 20:34:12 +0000388
389With captured variables, ``CHECK-DAG:`` is able to match valid topological
390orderings of a DAG with edges from the definition of a variable to its use.
391It's useful, e.g., when your test cases need to match different output
392sequences from the instruction scheduler. For example,
393
394.. code-block:: llvm
395
396 ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
397 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
398 ; CHECK: mul r5, [[REG1]], [[REG2]]
399
400In this case, any order of that two ``add`` instructions will be allowed.
401
Renato Golin58ab84a2013-10-11 18:50:22 +0000402If you are defining `and` using variables in the same ``CHECK-DAG:`` block,
403be aware that the definition rule can match `after` its use.
404
405So, for instance, the code below will pass:
Michael Liao91a1b2c2013-05-14 20:34:12 +0000406
Renato Golin124f2592016-07-20 12:16:38 +0000407.. code-block:: text
Michael Liao91a1b2c2013-05-14 20:34:12 +0000408
Renato Golin58ab84a2013-10-11 18:50:22 +0000409 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
410 ; CHECK-DAG: vmov.32 [[REG2]][1]
411 vmov.32 d0[1]
412 vmov.32 d0[0]
Michael Liao91a1b2c2013-05-14 20:34:12 +0000413
Renato Golin58ab84a2013-10-11 18:50:22 +0000414While this other code, will not:
415
Renato Golin124f2592016-07-20 12:16:38 +0000416.. code-block:: text
Renato Golin58ab84a2013-10-11 18:50:22 +0000417
418 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
419 ; CHECK-DAG: vmov.32 [[REG2]][1]
420 vmov.32 d1[1]
421 vmov.32 d0[0]
422
423While this can be very useful, it's also dangerous, because in the case of
424register sequence, you must have a strong order (read before write, copy before
425use, etc). If the definition your test is looking for doesn't match (because
426of a bug in the compiler), it may match further away from the use, and mask
427real bugs away.
428
429In those cases, to enforce the order, use a non-DAG directive between DAG-blocks.
Michael Liao91a1b2c2013-05-14 20:34:12 +0000430
Joel E. Dennybcf5b442018-07-11 20:27:27 +0000431A ``CHECK-DAG:`` directive skips matches that overlap the matches of any
432preceding ``CHECK-DAG:`` directives in the same ``CHECK-DAG:`` block. Not only
433is this non-overlapping behavior consistent with other directives, but it's
434also necessary to handle sets of non-unique strings or patterns. For example,
435the following directives look for unordered log entries for two tasks in a
436parallel program, such as the OpenMP runtime:
437
438.. code-block:: text
439
440 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
441 // CHECK-DAG: [[THREAD_ID]]: task_end
442 //
443 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
444 // CHECK-DAG: [[THREAD_ID]]: task_end
445
446The second pair of directives is guaranteed not to match the same log entries
447as the first pair even though the patterns are identical and even if the text
448of the log entries is identical because the thread ID manages to be reused.
449
Stephen Linf8bd2e52013-07-12 14:51:05 +0000450The "CHECK-LABEL:" directive
Bill Wendlingc02da462013-07-30 08:26:24 +0000451~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stephen Linf8bd2e52013-07-12 14:51:05 +0000452
453Sometimes in a file containing multiple tests divided into logical blocks, one
454or more ``CHECK:`` directives may inadvertently succeed by matching lines in a
455later block. While an error will usually eventually be generated, the check
456flagged as causing the error may not actually bear any relationship to the
457actual source of the problem.
458
459In order to produce better error messages in these cases, the "``CHECK-LABEL:``"
460directive can be used. It is treated identically to a normal ``CHECK``
Stephen Linb9464072013-07-18 23:26:58 +0000461directive except that FileCheck makes an additional assumption that a line
462matched by the directive cannot also be matched by any other check present in
463``match-filename``; this is intended to be used for lines containing labels or
464other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides
465the input stream into separate blocks, each of which is processed independently,
466preventing a ``CHECK:`` directive in one block matching a line in another block.
Artem Belevichf55e72a2017-03-09 17:59:04 +0000467If ``--enable-var-scope`` is in effect, all local variables are cleared at the
468beginning of the block.
469
Stephen Linb9464072013-07-18 23:26:58 +0000470For example,
Stephen Linf8bd2e52013-07-12 14:51:05 +0000471
472.. code-block:: llvm
473
474 define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
475 entry:
476 ; CHECK-LABEL: C_ctor_base:
477 ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0
478 ; CHECK: bl A_ctor_base
479 ; CHECK: mov r0, [[SAVETHIS]]
480 %0 = bitcast %struct.C* %this to %struct.A*
481 %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
482 %1 = bitcast %struct.C* %this to %struct.B*
483 %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
484 ret %struct.C* %this
485 }
486
487 define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
488 entry:
489 ; CHECK-LABEL: D_ctor_base:
490
491The use of ``CHECK-LABEL:`` directives in this case ensures that the three
492``CHECK:`` directives only accept lines corresponding to the body of the
493``@C_ctor_base`` function, even if the patterns match lines found later in
Stephen Linb9464072013-07-18 23:26:58 +0000494the file. Furthermore, if one of these three ``CHECK:`` directives fail,
495FileCheck will recover by continuing to the next block, allowing multiple test
496failures to be detected in a single invocation.
Stephen Linf8bd2e52013-07-12 14:51:05 +0000497
498There is no requirement that ``CHECK-LABEL:`` directives contain strings that
499correspond to actual syntactic labels in a source or output language: they must
500simply uniquely match a single line in the file being verified.
501
502``CHECK-LABEL:`` directives cannot contain variable definitions or uses.
503
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000504FileCheck Regex Matching Syntax
505~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000506
Paul Robinson282b3d32015-03-05 23:04:26 +0000507All FileCheck directives take a pattern to match.
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000508For most uses of FileCheck, fixed string matching is perfectly sufficient. For
509some things, a more flexible form of matching is desired. To support this,
510FileCheck allows you to specify regular expressions in matching strings,
Sjoerd Meijer9a26a7e2017-10-13 14:02:36 +0000511surrounded by double braces: ``{{yourregex}}``. FileCheck implements a POSIX
512regular expression matcher; it supports Extended POSIX regular expressions
513(ERE). Because we want to use fixed string matching for a majority of what we
514do, FileCheck has been designed to support mixing and matching fixed string
515matching with regular expressions. This allows you to write things like this:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000516
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000517.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000518
519 ; CHECK: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}
520
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000521In this case, any offset from the ESP register will be allowed, and any xmm
522register will be allowed.
523
524Because regular expressions are enclosed with double braces, they are
525visually distinct, and you don't need to use escape characters within the double
526braces like you would in C. In the rare case that you want to match double
527braces explicitly from the input, you can use something ugly like
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000528``{{[{][{]}}`` as your pattern.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000529
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000530FileCheck String Substitution Blocks
531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000532
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000533It is often useful to match a pattern and then verify that it occurs again
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000534later in the file. For codegen tests, this can be useful to allow any
535register, but verify that that register is used consistently later. To do
536this, :program:`FileCheck` supports string substitution blocks that allow
537string variables to be defined and substituted into patterns. Here is a simple
538example:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000539
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000540.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000541
542 ; CHECK: test5:
543 ; CHECK: notw [[REGISTER:%[a-z]+]]
Chad Rosierfd7469c2012-05-24 21:17:47 +0000544 ; CHECK: andw {{.*}}[[REGISTER]]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000545
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000546The first check line matches a regex ``%[a-z]+`` and captures it into the
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000547string variable ``REGISTER``. The second line verifies that whatever is in
548``REGISTER`` occurs later in the file after an "``andw``". :program:`FileCheck`
549string substitution blocks are always contained in ``[[ ]]`` pairs, and string
550variable names can be formed with the regex ``[a-zA-Z_][a-zA-Z0-9_]*``. If a
551colon follows the name, then it is a definition of the variable; otherwise, it
552is a substitution.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000553
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000554:program:`FileCheck` variables can be defined multiple times, and substitutions
555always get the latest value. Variables can also be substituted later on the
556same line they were defined on. For example:
Eli Bendersky4ca99ba2012-12-01 22:03:57 +0000557
558.. code-block:: llvm
559
560 ; CHECK: op [[REG:r[0-9]+]], [[REG]]
561
562Can be useful if you want the operands of ``op`` to be the same register,
563and don't care exactly which register it is.
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000564
Artem Belevichf55e72a2017-03-09 17:59:04 +0000565If ``--enable-var-scope`` is in effect, variables with names that
566start with ``$`` are considered to be global. All others variables are
567local. All local variables get undefined at the beginning of each
568CHECK-LABEL block. Global variables are not affected by CHECK-LABEL.
569This makes it easier to ensure that individual tests are not affected
570by variables set in preceding tests.
571
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000572FileCheck Numeric Substitution Blocks
573~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000574
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000575:program:`FileCheck` also supports numeric substitution blocks that allow
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000576defining numeric variables and checking for numeric values that satisfy a
577numeric expression constraint based on those variables via a numeric
578substitution. This allows ``CHECK:`` directives to verify a numeric relation
579between two numbers, such as the need for consecutive registers to be used.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000580
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000581The syntax to define a numeric variable is ``[[#<NUMVAR>:]]`` where
582``<NUMVAR>`` is the name of the numeric variable to define to the matching
583value.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000584
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000585For example:
586
587.. code-block:: llvm
588
589 ; CHECK: mov r[[#REG:]], 42
590
591would match ``mov r5, 42`` and set ``REG`` to the value ``5``.
592
593The syntax of a numeric substitution is ``[[#<NUMVAR><op><offset>]]`` where:
594
595* ``<NUMVAR>`` is the name of a defined numeric variable.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000596
Thomas Preud'hommea2ef1ba2019-06-19 23:47:24 +0000597* ``<op>`` is an optional operation to perform on the value of ``<NUMVAR>``.
598 Currently supported operations are ``+`` and ``-``.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000599
600* ``<offset>`` is the immediate value that constitutes the second operand of
Thomas Preud'hommea2ef1ba2019-06-19 23:47:24 +0000601 the operation ``<op>``. It must be present if ``<op>`` is present, absent
602 otherwise.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000603
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000604Spaces are accepted before, after and between any of these elements.
605
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000606For example:
607
608.. code-block:: llvm
609
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000610 ; CHECK: load r[[#REG:]], [r0]
611 ; CHECK: load r[[#REG+1]], [r1]
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000612
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000613The above example would match the text:
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000614
Thomas Preud'homme5c15dba2019-05-15 15:20:45 +0000615.. code-block:: gas
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000616
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000617 load r5, [r0]
618 load r6, [r1]
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000619
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000620but would not match the text:
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000621
Thomas Preud'homme5c15dba2019-05-15 15:20:45 +0000622.. code-block:: gas
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000623
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000624 load r5, [r0]
625 load r7, [r1]
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000626
627due to ``7`` being unequal to ``5 + 1``.
628
629The ``--enable-var-scope`` option has the same effect on numeric variables as
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000630on string variables.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000631
Thomas Preud'hommea2ef1ba2019-06-19 23:47:24 +0000632Important note: In its current implementation, an expression cannot use a
633numeric variable defined on the same line.
Thomas Preud'homme71d3f222019-06-06 13:21:06 +0000634
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000635FileCheck Pseudo Numeric Variables
636~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000637
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000638Sometimes there's a need to verify output that contains line numbers of the
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000639match file, e.g. when testing compiler diagnostics. This introduces a certain
640fragility of the match file structure, as "``CHECK:``" lines contain absolute
641line numbers in the same file, which have to be updated whenever line numbers
642change due to text addition or deletion.
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000643
Thomas Preud'hommea2ef1ba2019-06-19 23:47:24 +0000644To support this case, FileCheck expressions understand the ``@LINE`` pseudo
645numeric variable which evaluates to the line number of the CHECK pattern where
646it is found.
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000647
648This way match patterns can be put near the relevant test lines and include
649relative line number references, for example:
650
651.. code-block:: c++
652
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000653 // CHECK: test.cpp:[[# @LINE + 4]]:6: error: expected ';' after top level declarator
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000654 // CHECK-NEXT: {{^int a}}
655 // CHECK-NEXT: {{^ \^}}
656 // CHECK-NEXT: {{^ ;}}
657 int a
658
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000659To support legacy uses of ``@LINE`` as a special string variable,
660:program:`FileCheck` also accepts the following uses of ``@LINE`` with string
661substitution block syntax: ``[[@LINE]]``, ``[[@LINE+<offset>]]`` and
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000662``[[@LINE-<offset>]]`` without any spaces inside the brackets and where
663``offset`` is an integer.
664
Wolfgang Pieb0b4509e2016-06-27 23:59:00 +0000665Matching Newline Characters
666~~~~~~~~~~~~~~~~~~~~~~~~~~~
667
668To match newline characters in regular expressions the character class
669``[[:space:]]`` can be used. For example, the following pattern:
670
671.. code-block:: c++
672
673 // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd"
674
675matches output of the form (from llvm-dwarfdump):
676
Renato Golin124f2592016-07-20 12:16:38 +0000677.. code-block:: text
Wolfgang Pieb0b4509e2016-06-27 23:59:00 +0000678
679 DW_AT_location [DW_FORM_sec_offset] (0x00000233)
680 DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c9] = "intd")
681
682letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value
683``0x00000233``, extracted from the line immediately preceding "``intd``".