blob: e54ab762cd26deccf1b55cd9a5190ec42d3967db [file] [log] [blame]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00001FileCheck - Flexible pattern matching file verifier
2===================================================
3
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00004SYNOPSIS
5--------
6
Dmitri Gribenkof589e242012-11-29 19:21:02 +00007:program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00008
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +00009DESCRIPTION
10-----------
11
Dmitri Gribenkof589e242012-11-29 19:21:02 +000012:program:`FileCheck` reads two files (one from standard input, and one
13specified on the command line) and uses one to verify the other. This
14behavior is particularly useful for the testsuite, which wants to verify that
15the output of some tool (e.g. :program:`llc`) contains the expected information
16(for example, a movsd from esp or whatever is interesting). This is similar to
17using :program:`grep`, but it is optimized for matching multiple different
18inputs in one file in a specific order.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000019
Dmitri Gribenkof589e242012-11-29 19:21:02 +000020The ``match-filename`` file specifies the file that contains the patterns to
Stephen Lina6e877f2013-07-14 18:12:25 +000021match. The file to verify is read from standard input unless the
22:option:`--input-file` option is used.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000023
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000024OPTIONS
25-------
26
Joel E. Denny24994d72018-11-06 22:07:03 +000027Options are parsed from the environment variable ``FILECHECK_OPTS``
28and from the command line.
29
Dmitri Gribenkof589e242012-11-29 19:21:02 +000030.. option:: -help
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000031
32 Print a summary of command line options.
33
Dmitri Gribenkof589e242012-11-29 19:21:02 +000034.. option:: --check-prefix prefix
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000035
Matt Arsenault13df4622013-11-10 02:04:09 +000036 FileCheck searches the contents of ``match-filename`` for patterns to
37 match. By default, these patterns are prefixed with "``CHECK:``".
38 If you'd like to use a different prefix (e.g. because the same input
39 file is checking multiple different tool or options), the
40 :option:`--check-prefix` argument allows you to specify one or more
41 prefixes to match. Multiple prefixes are useful for tests which might
42 change for different run options, but most lines remain the same.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000043
Daniel Sandersad875c22016-06-14 16:42:05 +000044.. option:: --check-prefixes prefix1,prefix2,...
45
46 An alias of :option:`--check-prefix` that allows multiple prefixes to be
47 specified as a comma separated list.
48
Dmitri Gribenkof589e242012-11-29 19:21:02 +000049.. option:: --input-file filename
Eli Bendersky8a7e80f2012-11-07 01:41:30 +000050
51 File to check (defaults to stdin).
52
James Y Knight85913cc2016-02-11 16:46:09 +000053.. option:: --match-full-lines
54
55 By default, FileCheck allows matches of anywhere on a line. This
56 option will require all positive matches to cover an entire
57 line. Leading and trailing whitespace is ignored, unless
58 :option:`--strict-whitespace` is also specified. (Note: negative
59 matches from ``CHECK-NOT`` are not affected by this option!)
60
61 Passing this option is equivalent to inserting ``{{^ *}}`` or
62 ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive
63 check pattern.
64
Dmitri Gribenkof589e242012-11-29 19:21:02 +000065.. option:: --strict-whitespace
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000066
67 By default, FileCheck canonicalizes input horizontal whitespace (spaces and
68 tabs) which causes it to ignore these differences (a space will match a tab).
Guy Benyei5ea04c32013-02-06 20:40:38 +000069 The :option:`--strict-whitespace` argument disables this behavior. End-of-line
Sean Silvab6bfbad2013-06-21 00:27:54 +000070 sequences are canonicalized to UNIX-style ``\n`` in all modes.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +000071
Alexander Kornienko56ccdbb2014-07-11 12:39:32 +000072.. option:: --implicit-check-not check-pattern
73
74 Adds implicit negative checks for the specified patterns between positive
75 checks. The option allows writing stricter tests without stuffing them with
Dan Liewa762a132014-07-21 16:39:00 +000076 ``CHECK-NOT``\ s.
Alexander Kornienko56ccdbb2014-07-11 12:39:32 +000077
78 For example, "``--implicit-check-not warning:``" can be useful when testing
79 diagnostic messages from tools that don't have an option similar to ``clang
80 -verify``. With this option FileCheck will verify that input does not contain
81 warnings not covered by any ``CHECK:`` patterns.
82
Joel E. Denny3c5d2672018-12-18 00:01:39 +000083.. option:: --dump-input <mode>
84
85 Dump input to stderr, adding annotations representing currently enabled
86 diagnostics. Do this either 'always', on 'fail', or 'never'. Specify 'help'
87 to explain the dump format and quit.
88
George Karpenkov346dfbe2018-07-20 20:21:57 +000089.. option:: --dump-input-on-failure
90
Joel E. Denny3c5d2672018-12-18 00:01:39 +000091 When the check fails, dump all of the original input. This option is
92 deprecated in favor of `--dump-input=fail`.
George Karpenkov346dfbe2018-07-20 20:21:57 +000093
Artem Belevichf55e72a2017-03-09 17:59:04 +000094.. option:: --enable-var-scope
95
96 Enables scope for regex variables.
97
98 Variables with names that start with ``$`` are considered global and
99 remain set throughout the file.
100
101 All other variables get undefined after each encountered ``CHECK-LABEL``.
102
Alexander Richardson46e1fd62017-11-07 13:24:44 +0000103.. option:: -D<VAR=VALUE>
104
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000105 Sets a filecheck pattern variable ``VAR`` with value ``VALUE`` that can be
106 used in ``CHECK:`` lines.
Alexander Richardson46e1fd62017-11-07 13:24:44 +0000107
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000108.. option:: -D#<NUMVAR>=<VALUE>
109
110 Sets a filecheck numeric variable ``NUMVAR`` to ``<VALUE>`` that can be used
111 in ``CHECK:`` lines.
112
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000113.. option:: -version
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000114
115 Show the version number of this program.
116
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000117.. option:: -v
118
Joel E. Denny352695c2019-01-22 21:41:42 +0000119 Print good directive pattern matches. However, if ``-input-dump=fail`` or
120 ``-input-dump=always``, add those matches as input annotations instead.
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000121
122.. option:: -vv
123
124 Print information helpful in diagnosing internal FileCheck issues, such as
125 discarded overlapping ``CHECK-DAG:`` matches, implicit EOF pattern matches,
126 and ``CHECK-NOT:`` patterns that do not have matches. Implies ``-v``.
Joel E. Denny352695c2019-01-22 21:41:42 +0000127 However, if ``-input-dump=fail`` or ``-input-dump=always``, just add that
128 information as input annotations instead.
Joel E. Dennydc5ba312018-07-13 03:08:23 +0000129
Joel E. Dennybcf5b442018-07-11 20:27:27 +0000130.. option:: --allow-deprecated-dag-overlap
131
132 Enable overlapping among matches in a group of consecutive ``CHECK-DAG:``
133 directives. This option is deprecated and is only provided for convenience
134 as old tests are migrated to the new non-overlapping ``CHECK-DAG:``
135 implementation.
136
Joel E. Denny3e665092018-10-24 21:46:42 +0000137.. option:: --color
138
139 Use colors in output (autodetected by default).
140
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000141EXIT STATUS
142-----------
143
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000144If :program:`FileCheck` verifies that the file matches the expected contents,
145it exits with 0. Otherwise, if not, or if an error occurs, it will exit with a
146non-zero value.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000147
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000148TUTORIAL
149--------
150
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000151FileCheck is typically used from LLVM regression tests, being invoked on the RUN
152line of the test. A simple example of using FileCheck from a RUN line looks
153like this:
154
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000155.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000156
157 ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
158
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000159This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe
160that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``. This
161means that FileCheck will be verifying its standard input (the llc output)
162against the filename argument specified (the original ``.ll`` file specified by
163"``%s``"). To see how this works, let's look at the rest of the ``.ll`` file
164(after the RUN line):
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000165
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000166.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000167
168 define void @sub1(i32* %p, i32 %v) {
169 entry:
170 ; CHECK: sub1:
171 ; CHECK: subl
172 %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
173 ret void
174 }
175
176 define void @inc4(i64* %p) {
177 entry:
178 ; CHECK: inc4:
179 ; CHECK: incq
180 %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
181 ret void
182 }
183
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000184Here you can see some "``CHECK:``" lines specified in comments. Now you can
185see how the file is piped into ``llvm-as``, then ``llc``, and the machine code
186output is what we are verifying. FileCheck checks the machine code output to
187verify that it matches what the "``CHECK:``" lines specify.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000188
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000189The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000190must occur in order. FileCheck defaults to ignoring horizontal whitespace
191differences (e.g. a space is allowed to match a tab) but otherwise, the contents
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000192of the "``CHECK:``" line is required to match some thing in the test file exactly.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000193
194One nice thing about FileCheck (compared to grep) is that it allows merging
195test cases together into logical groups. For example, because the test above
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000196is checking for the "``sub1:``" and "``inc4:``" labels, it will not match
197unless there is a "``subl``" in between those labels. If it existed somewhere
198else in the file, that would not count: "``grep subl``" matches if "``subl``"
199exists anywhere in the file.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000200
201The FileCheck -check-prefix option
202~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
203
Renato Golin124f2592016-07-20 12:16:38 +0000204The FileCheck `-check-prefix` option allows multiple test
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000205configurations to be driven from one `.ll` file. This is useful in many
206circumstances, for example, testing different architectural variants with
207:program:`llc`. Here's a simple example:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000208
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000209.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000210
211 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000212 ; RUN: | FileCheck %s -check-prefix=X32
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000213 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000214 ; RUN: | FileCheck %s -check-prefix=X64
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000215
216 define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
217 %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
218 ret <4 x i32> %tmp1
219 ; X32: pinsrd_1:
220 ; X32: pinsrd $1, 4(%esp), %xmm0
221
222 ; X64: pinsrd_1:
223 ; X64: pinsrd $1, %edi, %xmm0
224 }
225
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000226In this case, we're testing that we get the expected code generation with
227both 32-bit and 64-bit code generation.
228
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000229The "CHECK-NEXT:" directive
230~~~~~~~~~~~~~~~~~~~~~~~~~~~
231
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000232Sometimes you want to match lines and would like to verify that matches
233happen on exactly consecutive lines with no other lines in between them. In
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000234this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify
235this. If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``".
236For example, something like this works as you'd expect:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000237
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000238.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000239
Dmitri Gribenko19408a72012-06-12 00:48:47 +0000240 define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
241 %tmp3 = load <2 x double>* %A, align 16
242 %tmp7 = insertelement <2 x double> undef, double %B, i32 0
243 %tmp9 = shufflevector <2 x double> %tmp3,
244 <2 x double> %tmp7,
245 <2 x i32> < i32 0, i32 2 >
246 store <2 x double> %tmp9, <2 x double>* %r, align 16
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000247 ret void
248
249 ; CHECK: t2:
250 ; CHECK: movl 8(%esp), %eax
251 ; CHECK-NEXT: movapd (%eax), %xmm0
252 ; CHECK-NEXT: movhpd 12(%esp), %xmm0
253 ; CHECK-NEXT: movl 4(%esp), %eax
254 ; CHECK-NEXT: movapd %xmm0, (%eax)
255 ; CHECK-NEXT: ret
256 }
257
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000258"``CHECK-NEXT:``" directives reject the input unless there is exactly one
Eli Bendersky2fef6b62012-11-21 22:40:52 +0000259newline between it and the previous directive. A "``CHECK-NEXT:``" cannot be
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000260the first directive in a file.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000261
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000262The "CHECK-SAME:" directive
263~~~~~~~~~~~~~~~~~~~~~~~~~~~
264
265Sometimes you want to match lines and would like to verify that matches happen
266on the same line as the previous match. In this case, you can use "``CHECK:``"
267and "``CHECK-SAME:``" directives to specify this. If you specified a custom
268check prefix, just use "``<PREFIX>-SAME:``".
269
270"``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``"
271(described below).
272
273For example, the following works like you'd expect:
274
275.. code-block:: llvm
276
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000277 !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000278
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000279 ; CHECK: !DILocation(line: 5,
Duncan P. N. Exon Smithcffbbe92015-03-05 17:00:05 +0000280 ; CHECK-NOT: column:
281 ; CHECK-SAME: scope: ![[SCOPE:[0-9]+]]
282
283"``CHECK-SAME:``" directives reject the input if there are any newlines between
284it and the previous directive. A "``CHECK-SAME:``" cannot be the first
285directive in a file.
286
James Henderson5507f662018-06-26 15:15:45 +0000287The "CHECK-EMPTY:" directive
James Hendersonc307b002018-06-26 15:29:09 +0000288~~~~~~~~~~~~~~~~~~~~~~~~~~~~
James Henderson5507f662018-06-26 15:15:45 +0000289
290If you need to check that the next line has nothing on it, not even whitespace,
291you can use the "``CHECK-EMPTY:``" directive.
292
293.. code-block:: llvm
294
Chandler Carruthef705b72018-08-06 01:41:25 +0000295 declare void @foo()
James Henderson5507f662018-06-26 15:15:45 +0000296
Chandler Carruthef705b72018-08-06 01:41:25 +0000297 declare void @bar()
James Henderson5507f662018-06-26 15:15:45 +0000298 ; CHECK: foo
299 ; CHECK-EMPTY:
300 ; CHECK-NEXT: bar
301
302Just like "``CHECK-NEXT:``" the directive will fail if there is more than one
303newline before it finds the next blank line, and it cannot be the first
304directive in a file.
305
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000306The "CHECK-NOT:" directive
307~~~~~~~~~~~~~~~~~~~~~~~~~~
308
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000309The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000310between two matches (or before the first match, or after the last match). For
311example, to verify that a load is removed by a transformation, a test like this
312can be used:
313
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000314.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000315
316 define i8 @coerce_offset0(i32 %V, i32* %P) {
317 store i32 %V, i32* %P
318
319 %P2 = bitcast i32* %P to i8*
320 %P3 = getelementptr i8* %P2, i32 2
321
322 %A = load i8* %P3
323 ret i8 %A
324 ; CHECK: @coerce_offset0
325 ; CHECK-NOT: load
326 ; CHECK: ret i8
327 }
328
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000329The "CHECK-COUNT:" directive
Fedor Sergeev5bf0c152018-11-13 01:12:19 +0000330~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000331
332If you need to match multiple lines with the same pattern over and over again
333you can repeat a plain ``CHECK:`` as many times as needed. If that looks too
334boring you can instead use a counted check "``CHECK-COUNT-<num>:``", where
335``<num>`` is a positive decimal number. It will match the pattern exactly
336``<num>`` times, no more and no less. If you specified a custom check prefix,
337just use "``<PREFIX>-COUNT-<num>:``" for the same effect.
338Here is a simple example:
339
Fedor Sergeev8b078122018-11-13 05:47:01 +0000340.. code-block:: text
Fedor Sergeev6c9e19b2018-11-13 00:46:13 +0000341
342 Loop at depth 1
343 Loop at depth 1
344 Loop at depth 1
345 Loop at depth 1
346 Loop at depth 2
347 Loop at depth 3
348
349 ; CHECK-COUNT-6: Loop at depth {{[0-9]+}}
350 ; CHECK-NOT: Loop at depth {{[0-9]+}}
351
Michael Liao91a1b2c2013-05-14 20:34:12 +0000352The "CHECK-DAG:" directive
353~~~~~~~~~~~~~~~~~~~~~~~~~~
354
355If it's necessary to match strings that don't occur in a strictly sequential
356order, "``CHECK-DAG:``" could be used to verify them between two matches (or
357before the first match, or after the last match). For example, clang emits
358vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks
359in the natural order:
360
361.. code-block:: c++
362
363 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
364
365 struct Foo { virtual void method(); };
366 Foo f; // emit vtable
367 // CHECK-DAG: @_ZTV3Foo =
368
369 struct Bar { virtual void method(); };
370 Bar b;
371 // CHECK-DAG: @_ZTV3Bar =
372
Renato Golin58ab84a2013-10-11 18:50:22 +0000373``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to
374exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result,
375the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all
376occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind
377occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example,
378
379.. code-block:: llvm
380
381 ; CHECK-DAG: BEFORE
382 ; CHECK-NOT: NOT
383 ; CHECK-DAG: AFTER
384
385This case will reject input strings where ``BEFORE`` occurs after ``AFTER``.
Michael Liao91a1b2c2013-05-14 20:34:12 +0000386
387With captured variables, ``CHECK-DAG:`` is able to match valid topological
388orderings of a DAG with edges from the definition of a variable to its use.
389It's useful, e.g., when your test cases need to match different output
390sequences from the instruction scheduler. For example,
391
392.. code-block:: llvm
393
394 ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
395 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
396 ; CHECK: mul r5, [[REG1]], [[REG2]]
397
398In this case, any order of that two ``add`` instructions will be allowed.
399
Renato Golin58ab84a2013-10-11 18:50:22 +0000400If you are defining `and` using variables in the same ``CHECK-DAG:`` block,
401be aware that the definition rule can match `after` its use.
402
403So, for instance, the code below will pass:
Michael Liao91a1b2c2013-05-14 20:34:12 +0000404
Renato Golin124f2592016-07-20 12:16:38 +0000405.. code-block:: text
Michael Liao91a1b2c2013-05-14 20:34:12 +0000406
Renato Golin58ab84a2013-10-11 18:50:22 +0000407 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
408 ; CHECK-DAG: vmov.32 [[REG2]][1]
409 vmov.32 d0[1]
410 vmov.32 d0[0]
Michael Liao91a1b2c2013-05-14 20:34:12 +0000411
Renato Golin58ab84a2013-10-11 18:50:22 +0000412While this other code, will not:
413
Renato Golin124f2592016-07-20 12:16:38 +0000414.. code-block:: text
Renato Golin58ab84a2013-10-11 18:50:22 +0000415
416 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
417 ; CHECK-DAG: vmov.32 [[REG2]][1]
418 vmov.32 d1[1]
419 vmov.32 d0[0]
420
421While this can be very useful, it's also dangerous, because in the case of
422register sequence, you must have a strong order (read before write, copy before
423use, etc). If the definition your test is looking for doesn't match (because
424of a bug in the compiler), it may match further away from the use, and mask
425real bugs away.
426
427In those cases, to enforce the order, use a non-DAG directive between DAG-blocks.
Michael Liao91a1b2c2013-05-14 20:34:12 +0000428
Joel E. Dennybcf5b442018-07-11 20:27:27 +0000429A ``CHECK-DAG:`` directive skips matches that overlap the matches of any
430preceding ``CHECK-DAG:`` directives in the same ``CHECK-DAG:`` block. Not only
431is this non-overlapping behavior consistent with other directives, but it's
432also necessary to handle sets of non-unique strings or patterns. For example,
433the following directives look for unordered log entries for two tasks in a
434parallel program, such as the OpenMP runtime:
435
436.. code-block:: text
437
438 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
439 // CHECK-DAG: [[THREAD_ID]]: task_end
440 //
441 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
442 // CHECK-DAG: [[THREAD_ID]]: task_end
443
444The second pair of directives is guaranteed not to match the same log entries
445as the first pair even though the patterns are identical and even if the text
446of the log entries is identical because the thread ID manages to be reused.
447
Stephen Linf8bd2e52013-07-12 14:51:05 +0000448The "CHECK-LABEL:" directive
Bill Wendlingc02da462013-07-30 08:26:24 +0000449~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stephen Linf8bd2e52013-07-12 14:51:05 +0000450
451Sometimes in a file containing multiple tests divided into logical blocks, one
452or more ``CHECK:`` directives may inadvertently succeed by matching lines in a
453later block. While an error will usually eventually be generated, the check
454flagged as causing the error may not actually bear any relationship to the
455actual source of the problem.
456
457In order to produce better error messages in these cases, the "``CHECK-LABEL:``"
458directive can be used. It is treated identically to a normal ``CHECK``
Stephen Linb9464072013-07-18 23:26:58 +0000459directive except that FileCheck makes an additional assumption that a line
460matched by the directive cannot also be matched by any other check present in
461``match-filename``; this is intended to be used for lines containing labels or
462other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides
463the input stream into separate blocks, each of which is processed independently,
464preventing a ``CHECK:`` directive in one block matching a line in another block.
Artem Belevichf55e72a2017-03-09 17:59:04 +0000465If ``--enable-var-scope`` is in effect, all local variables are cleared at the
466beginning of the block.
467
Stephen Linb9464072013-07-18 23:26:58 +0000468For example,
Stephen Linf8bd2e52013-07-12 14:51:05 +0000469
470.. code-block:: llvm
471
472 define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
473 entry:
474 ; CHECK-LABEL: C_ctor_base:
475 ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0
476 ; CHECK: bl A_ctor_base
477 ; CHECK: mov r0, [[SAVETHIS]]
478 %0 = bitcast %struct.C* %this to %struct.A*
479 %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
480 %1 = bitcast %struct.C* %this to %struct.B*
481 %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
482 ret %struct.C* %this
483 }
484
485 define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
486 entry:
487 ; CHECK-LABEL: D_ctor_base:
488
489The use of ``CHECK-LABEL:`` directives in this case ensures that the three
490``CHECK:`` directives only accept lines corresponding to the body of the
491``@C_ctor_base`` function, even if the patterns match lines found later in
Stephen Linb9464072013-07-18 23:26:58 +0000492the file. Furthermore, if one of these three ``CHECK:`` directives fail,
493FileCheck will recover by continuing to the next block, allowing multiple test
494failures to be detected in a single invocation.
Stephen Linf8bd2e52013-07-12 14:51:05 +0000495
496There is no requirement that ``CHECK-LABEL:`` directives contain strings that
497correspond to actual syntactic labels in a source or output language: they must
498simply uniquely match a single line in the file being verified.
499
500``CHECK-LABEL:`` directives cannot contain variable definitions or uses.
501
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000502FileCheck Regex Matching Syntax
503~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000504
Paul Robinson282b3d32015-03-05 23:04:26 +0000505All FileCheck directives take a pattern to match.
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000506For most uses of FileCheck, fixed string matching is perfectly sufficient. For
507some things, a more flexible form of matching is desired. To support this,
508FileCheck allows you to specify regular expressions in matching strings,
Sjoerd Meijer9a26a7e2017-10-13 14:02:36 +0000509surrounded by double braces: ``{{yourregex}}``. FileCheck implements a POSIX
510regular expression matcher; it supports Extended POSIX regular expressions
511(ERE). Because we want to use fixed string matching for a majority of what we
512do, FileCheck has been designed to support mixing and matching fixed string
513matching with regular expressions. This allows you to write things like this:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000514
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000515.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000516
517 ; CHECK: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}
518
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000519In this case, any offset from the ESP register will be allowed, and any xmm
520register will be allowed.
521
522Because regular expressions are enclosed with double braces, they are
523visually distinct, and you don't need to use escape characters within the double
524braces like you would in C. In the rare case that you want to match double
525braces explicitly from the input, you can use something ugly like
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000526``{{[{][{]}}`` as your pattern.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000527
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000528FileCheck String Substitution Blocks
529~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000530
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000531It is often useful to match a pattern and then verify that it occurs again
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000532later in the file. For codegen tests, this can be useful to allow any
533register, but verify that that register is used consistently later. To do
534this, :program:`FileCheck` supports string substitution blocks that allow
535string variables to be defined and substituted into patterns. Here is a simple
536example:
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000537
Dmitri Gribenkoa99fa5b2012-06-12 15:45:07 +0000538.. code-block:: llvm
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000539
540 ; CHECK: test5:
541 ; CHECK: notw [[REGISTER:%[a-z]+]]
Chad Rosierfd7469c2012-05-24 21:17:47 +0000542 ; CHECK: andw {{.*}}[[REGISTER]]
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000543
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000544The first check line matches a regex ``%[a-z]+`` and captures it into the
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000545string variable ``REGISTER``. The second line verifies that whatever is in
546``REGISTER`` occurs later in the file after an "``andw``". :program:`FileCheck`
547string substitution blocks are always contained in ``[[ ]]`` pairs, and string
548variable names can be formed with the regex ``[a-zA-Z_][a-zA-Z0-9_]*``. If a
549colon follows the name, then it is a definition of the variable; otherwise, it
550is a substitution.
Daniel Dunbar8f4a8a62012-05-08 16:50:35 +0000551
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000552:program:`FileCheck` variables can be defined multiple times, and substitutions
553always get the latest value. Variables can also be substituted later on the
554same line they were defined on. For example:
Eli Bendersky4ca99ba2012-12-01 22:03:57 +0000555
556.. code-block:: llvm
557
558 ; CHECK: op [[REG:r[0-9]+]], [[REG]]
559
560Can be useful if you want the operands of ``op`` to be the same register,
561and don't care exactly which register it is.
Dmitri Gribenkoa72e9f02012-11-14 19:42:32 +0000562
Artem Belevichf55e72a2017-03-09 17:59:04 +0000563If ``--enable-var-scope`` is in effect, variables with names that
564start with ``$`` are considered to be global. All others variables are
565local. All local variables get undefined at the beginning of each
566CHECK-LABEL block. Global variables are not affected by CHECK-LABEL.
567This makes it easier to ensure that individual tests are not affected
568by variables set in preceding tests.
569
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000570FileCheck Numeric Substitution Blocks
571~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000572
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000573:program:`FileCheck` also supports numeric substitution blocks that allow
574checking for numeric values that satisfy a numeric expression constraint based
575on numeric variables. This allows ``CHECK:`` directives to verify a numeric
576relation between two numbers, such as the need for consecutive registers to be
577used.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000578
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000579The syntax of a numeric substitution block is ``[[#<NUMVAR><op><offset>]]``
580where:
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000581
582* ``<NUMVAR>`` is the name of a numeric variable defined on the command line.
583
584* ``<op>`` is an optional numeric operation to perform on the value of
585 ``<NUMVAR>``. Currently supported numeric operations are ``+`` and ``-``.
586
587* ``<offset>`` is the immediate value that constitutes the second operand of
588 the numeric operation <op>. It must be present if ``<op>`` is present,
589 absent otherwise.
590
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000591Spaces are accepted before, after and between any of these elements.
592
593Unlike string substitution blocks, numeric substitution blocks only introduce
594numeric substitutions which substitute a numeric expression for its value.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000595For example:
596
597.. code-block:: llvm
598
599 ; CHECK: add r[[#REG]], r[[#REG]], r[[#REG+1]]
600
601The above example would match the line:
602
Thomas Preud'homme5c15dba2019-05-15 15:20:45 +0000603.. code-block:: gas
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000604
605 add r5, r5, r6
606
607but would not match the line:
608
Thomas Preud'homme5c15dba2019-05-15 15:20:45 +0000609.. code-block:: gas
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000610
611 add r5, r5, r7
612
613due to ``7`` being unequal to ``5 + 1``.
614
615The ``--enable-var-scope`` option has the same effect on numeric variables as
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000616on string variables.
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000617
618FileCheck Pseudo Numeric Variables
619~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000620
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000621Sometimes there's a need to verify output that contains line numbers of the
Dmitri Gribenkof589e242012-11-29 19:21:02 +0000622match file, e.g. when testing compiler diagnostics. This introduces a certain
623fragility of the match file structure, as "``CHECK:``" lines contain absolute
624line numbers in the same file, which have to be updated whenever line numbers
625change due to text addition or deletion.
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000626
Thomas Preud'homme7b4ecdd2019-05-14 11:58:30 +0000627To support this case, FileCheck understands the ``@LINE`` pseudo numeric
628variable which evaluates to the line number of the CHECK pattern where it is
629found.
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000630
631This way match patterns can be put near the relevant test lines and include
632relative line number references, for example:
633
634.. code-block:: c++
635
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000636 // CHECK: test.cpp:[[# @LINE + 4]]:6: error: expected ';' after top level declarator
Alexander Kornienko92987fb2012-11-14 21:07:37 +0000637 // CHECK-NEXT: {{^int a}}
638 // CHECK-NEXT: {{^ \^}}
639 // CHECK-NEXT: {{^ ;}}
640 int a
641
Thomas Preud'homme1a944d22019-05-23 00:10:14 +0000642To support legacy uses of ``@LINE`` as a special string variable,
643:program:`FileCheck` also accepts the following uses of ``@LINE`` with string
644substitution block syntax: ``[[@LINE]]``, ``[[@LINE+<offset>]]`` and
Thomas Preud'homme288ed912019-05-02 00:04:38 +0000645``[[@LINE-<offset>]]`` without any spaces inside the brackets and where
646``offset`` is an integer.
647
Wolfgang Pieb0b4509e2016-06-27 23:59:00 +0000648Matching Newline Characters
649~~~~~~~~~~~~~~~~~~~~~~~~~~~
650
651To match newline characters in regular expressions the character class
652``[[:space:]]`` can be used. For example, the following pattern:
653
654.. code-block:: c++
655
656 // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd"
657
658matches output of the form (from llvm-dwarfdump):
659
Renato Golin124f2592016-07-20 12:16:38 +0000660.. code-block:: text
Wolfgang Pieb0b4509e2016-06-27 23:59:00 +0000661
662 DW_AT_location [DW_FORM_sec_offset] (0x00000233)
663 DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c9] = "intd")
664
665letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value
666``0x00000233``, extracted from the line immediately preceding "``intd``".