
=pod

=head1 NAME

FileCheck - Flexible pattern matching file verifier

=head1 SYNOPSIS

B<FileCheck> I<match-filename> [I<--check-prefix=XXX>] [I<--strict-whitespace>]

=head1 DESCRIPTION

B<FileCheck> reads two files (one from standard input, and one specified on the
command line) and uses one to verify the other.  This behavior is particularly
useful for the testsuite, which wants to verify that the output of some tool
(e.g. llc) contains the expected information (for example, a movsd from esp or
whatever is interesting).  This is similar to using grep, but it is optimized
for matching multiple different inputs in one file in a specific order.

The I<match-filename> file specifies the file that contains the patterns to
match.  The file to verify is always read from standard input.

=head1 OPTIONS

=over

=item B<--help>

Print a summary of command line options.

=item B<--check-prefix> I<prefix>

FileCheck searches the contents of I<match-filename> for patterns to match.  By
default, these patterns are prefixed with "CHECK:".  If you'd like to use a
different prefix (e.g. because the same input file is checking multiple
different tool or options), the B<--check-prefix> argument allows you to specify
a specific prefix to match.

=item B<--strict-whitespace>

By default, FileCheck canonicalizes input horizontal whitespace (spaces and
tabs) which causes it to ignore these differences (a space will match a tab).
The --strict-whitespace argument disables this behavior.

=item B<-version>

Show the version number of this program.

=back

=head1 EXIT STATUS

If B<FileCheck> verifies that the file matches the expected contents, it exits
with 0.  Otherwise, if not, or if an error occurs, it will exit with a non-zero
value.

=head1 TUTORIAL

FileCheck is typically used from LLVM regression tests, being invoked on the RUN
line of the test.  A simple example of using FileCheck from a RUN line looks
like this:

  ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s

This syntax says to pipe the current file ("%s") into llvm-as, pipe that into
llc, then pipe the output of llc into FileCheck.  This means that FileCheck will
be verifying its standard input (the llc output) against the filename argument
specified (the original .ll file specified by "%s").  To see how this works,
lets look at the rest of the .ll file (after the RUN line):

  define void @sub1(i32* %p, i32 %v) {
  entry:
  ; <b>CHECK: sub1:</b>
  ; <b>CHECK: subl</b>
          %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
          ret void
  }
  
  define void @inc4(i64* %p) {
  entry:
  ; <b>CHECK: inc4:</b>
  ; <b>CHECK: incq</b>
          %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
          ret void
  }

Here you can see some "CHECK:" lines specified in comments.  Now you can see
how the file is piped into llvm-as, then llc, and the machine code output is
what we are verifying.  FileCheck checks the machine code output to verify that
it matches what the "CHECK:" lines specify.

The syntax of the CHECK: lines is very simple: they are fixed strings that
must occur in order.  FileCheck defaults to ignoring horizontal whitespace
differences (e.g. a space is allowed to match a tab) but otherwise, the contents
of the CHECK: line is required to match some thing in the test file exactly.

One nice thing about FileCheck (compared to grep) is that it allows merging
test cases together into logical groups.  For example, because the test above
is checking for the "sub1:" and "inc4:" labels, it will not match unless there
is a "subl" in between those labels.  If it existed somewhere else in the file,
that would not count: "grep subl" matches if subl exists anywhere in the
file.



=head2 The FileCheck -check-prefix option

The FileCheck -check-prefix option allows multiple test configurations to be
driven from one .ll file.  This is useful in many circumstances, for example,
testing different architectural variants with llc.  Here's a simple example:

  ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
  ; RUN:              | <b>FileCheck %s -check-prefix=X32</b>
  ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
  ; RUN:              | <b>FileCheck %s -check-prefix=X64</b>

  define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
          %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
          ret <4 x i32> %tmp1
  ; <b>X32:</b> pinsrd_1:
  ; <b>X32:</b>    pinsrd $1, 4(%esp), %xmm0
  
  ; <b>X64:</b> pinsrd_1:
  ; <b>X64:</b>    pinsrd $1, %edi, %xmm0
  }

In this case, we're testing that we get the expected code generation with
both 32-bit and 64-bit code generation.



=head2 The "CHECK-NEXT:" directive

Sometimes you want to match lines and would like to verify that matches
happen on exactly consequtive lines with no other lines in between them.  In
this case, you can use CHECK: and CHECK-NEXT: directives to specify this.  If
you specified a custom check prefix, just use "<PREFIX>-NEXT:".  For
example, something like this works as you'd expect:

  define void @t2(<2 x double>* %r, <2 x double&gt;* %A, double %B) {
	%tmp3 = load <2 x double&gt;* %A, align 16
	%tmp7 = insertelement <2 x double&gt; undef, double %B, i32 0
	%tmp9 = shufflevector <2 x double&gt; %tmp3,
                              <2 x double&gt; %tmp7,
                              <2 x i32&gt; < i32 0, i32 2 &gt;
	store <2 x double&gt; %tmp9, <2 x double&gt;* %r, align 16
	ret void
        
  ; <b>CHECK:</b> t2:
  ; <b>CHECK:</b> 	movl	8(%esp), %eax
  ; <b>CHECK-NEXT:</b> 	movapd	(%eax), %xmm0
  ; <b>CHECK-NEXT:</b> 	movhpd	12(%esp), %xmm0
  ; <b>CHECK-NEXT:</b> 	movl	4(%esp), %eax
  ; <b>CHECK-NEXT:</b> 	movapd	%xmm0, (%eax)
  ; <b>CHECK-NEXT:</b> 	ret
  }

CHECK-NEXT: directives reject the input unless there is exactly one newline
between it an the previous directive.  A CHECK-NEXT cannot be the first
directive in a file.



=head2 The "CHECK-NOT:" directive

The CHECK-NOT: directive is used to verify that a string doesn't occur
between two matches (or the first match and the beginning of the file).  For
example, to verify that a load is removed by a transformation, a test like this
can be used:

  define i8 @coerce_offset0(i32 %V, i32* %P) {
    store i32 %V, i32* %P
   
    %P2 = bitcast i32* %P to i8*
    %P3 = getelementptr i8* %P2, i32 2

    %A = load i8* %P3
    ret i8 %A
  ; <b>CHECK:</b> @coerce_offset0
  ; <b>CHECK-NOT:</b> load
  ; <b>CHECK:</b> ret i8
  }



=head2 FileCheck Pattern Matching Syntax

The CHECK: and CHECK-NOT: directives both take a pattern to match.  For most
uses of FileCheck, fixed string matching is perfectly sufficient.  For some
things, a more flexible form of matching is desired.  To support this, FileCheck
allows you to specify regular expressions in matching strings, surrounded by
double braces: B<{{yourregex}}>.  Because we want to use fixed string
matching for a majority of what we do, FileCheck has been designed to support
mixing and matching fixed string matching with regular expressions.  This allows
you to write things like this:

  ; CHECK: movhpd	<b>{{[0-9]+}}</b>(%esp), <b>{{%xmm[0-7]}}</b>

In this case, any offset from the ESP register will be allowed, and any xmm
register will be allowed.

Because regular expressions are enclosed with double braces, they are
visually distinct, and you don't need to use escape characters within the double
braces like you would in C.  In the rare case that you want to match double
braces explicitly from the input, you can use something ugly like
B<{{[{][{]}}> as your pattern.



=head2 FileCheck Variables

It is often useful to match a pattern and then verify that it occurs again
later in the file.  For codegen tests, this can be useful to allow any register,
but verify that that register is used consistently later.  To do this, FileCheck
allows named variables to be defined and substituted into patterns.  Here is a
simple example:

  ; CHECK: test5:
  ; CHECK:    notw	<b>[[REGISTER:%[a-z]+]]</b>
  ; CHECK:    andw	{{.*}}<b>[[REGISTER]]</b>

The first check line matches a regex (<tt>%[a-z]+</tt>) and captures it into
the variables "REGISTER".  The second line verifies that whatever is in REGISTER
occurs later in the file after an "andw".  FileCheck variable references are
always contained in <tt>[[ ]]</tt> pairs, are named, and their names can be
formed with the regex "<tt>[a-zA-Z_][a-zA-Z0-9_]*</tt>".  If a colon follows the
name, then it is a definition of the variable, if not, it is a use.

FileCheck variables can be defined multiple times, and uses always get the
latest value.  Note that variables are all read at the start of a "CHECK" line
and are all defined at the end.  This means that if you have something like
"<tt>CHECK: [[XYZ:.*]]x[[XYZ]]<tt>" that the check line will read the previous
value of the XYZ variable and define a new one after the match is performed.  If
you need to do something like this you can probably take advantage of the fact
that FileCheck is not actually line-oriented when it matches, this allows you to
define two separate CHECK lines that match on the same line.



=head1 AUTHORS

Maintained by The LLVM Team (L<http://llvm.org>).

=cut
