author | Stefan Teleman <stefan.teleman@oracle.com> |
Thu, 28 Jul 2016 16:25:34 -0700 | |
changeset 6512 | 92717ce71105 |
permissions | -rw-r--r-- |
6512
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1 |
.\" Man page generated from reStructuredText. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
.TH "FILECHECK" "1" "2016-07-10" "3.8" "LLVM" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
.SH NAME |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
FileCheck \- Flexible pattern matching file verifier |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
.nr rst2man-indent-level 0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
.de1 rstReportMargin |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
\\$1 \\n[an-margin] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
level \\n[rst2man-indent-level] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
- |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
\\n[rst2man-indent0] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
\\n[rst2man-indent1] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
\\n[rst2man-indent2] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
.. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
.de1 INDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
.\" .rstReportMargin pre: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
. RS \\$1 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
. nr rst2man-indent-level +1 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
.\" .rstReportMargin post: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
.. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
.de UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
. RE |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
.\" indent \\n[an-margin] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
.nr rst2man-indent-level -1 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
.. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
.SH SYNOPSIS |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
\fBFileCheck\fP \fImatch\-filename\fP [\fI\-\-check\-prefix=XXX\fP] [\fI\-\-strict\-whitespace\fP] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
.SH DESCRIPTION |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
\fBFileCheck\fP reads two files (one from standard input, and one |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
specified on the command line) and uses one to verify the other. This |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
behavior is particularly useful for the testsuite, which wants to verify that |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
the output of some tool (e.g. \fBllc\fP) contains the expected information |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
(for example, a movsd from esp or whatever is interesting). This is similar to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
using \fBgrep\fP, but it is optimized for matching multiple different |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
inputs in one file in a specific order. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
The \fBmatch\-filename\fP file specifies the file that contains the patterns to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
match. The file to verify is read from standard input unless the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
\fI\%\-\-input\-file\fP option is used. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
.SH OPTIONS |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
.B \-help |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
Print a summary of command line options. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
.B \-\-check\-prefix prefix |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
FileCheck searches the contents of \fBmatch\-filename\fP for patterns to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
match. By default, these patterns are prefixed with "\fBCHECK:\fP". |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
If you\(aqd like to use a different prefix (e.g. because the same input |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
file is checking multiple different tool or options), the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
\fI\%\-\-check\-prefix\fP argument allows you to specify one or more |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
prefixes to match. Multiple prefixes are useful for tests which might |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
change for different run options, but most lines remain the same. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
.B \-\-input\-file filename |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
File to check (defaults to stdin). |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
.B \-\-strict\-whitespace |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
74 |
By default, FileCheck canonicalizes input horizontal whitespace (spaces and |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
75 |
tabs) which causes it to ignore these differences (a space will match a tab). |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
76 |
The \fI\%\-\-strict\-whitespace\fP argument disables this behavior. End\-of\-line |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
77 |
sequences are canonicalized to UNIX\-style \fB\en\fP in all modes. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
78 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
79 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
80 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
81 |
.B \-\-implicit\-check\-not check\-pattern |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
82 |
Adds implicit negative checks for the specified patterns between positive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
83 |
checks. The option allows writing stricter tests without stuffing them with |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
84 |
\fBCHECK\-NOT\fPs. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
85 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
86 |
For example, "\fB\-\-implicit\-check\-not warning:\fP" can be useful when testing |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
87 |
diagnostic messages from tools that don\(aqt have an option similar to \fBclang |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
88 |
\-verify\fP\&. With this option FileCheck will verify that input does not contain |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
89 |
warnings not covered by any \fBCHECK:\fP patterns. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
90 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
91 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
92 |
.TP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
93 |
.B \-version |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
94 |
Show the version number of this program. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
95 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
96 |
.SH EXIT STATUS |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
97 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
98 |
If \fBFileCheck\fP verifies that the file matches the expected contents, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
99 |
it exits with 0. Otherwise, if not, or if an error occurs, it will exit with a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
100 |
non\-zero value. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
101 |
.SH TUTORIAL |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
102 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
103 |
FileCheck is typically used from LLVM regression tests, being invoked on the RUN |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
104 |
line of the test. A simple example of using FileCheck from a RUN line looks |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
105 |
like this: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
106 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
107 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
108 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
109 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
110 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
111 |
; RUN: llvm\-as < %s | llc \-march=x86\-64 | FileCheck %s |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
112 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
113 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
114 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
115 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
116 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
117 |
This syntax says to pipe the current file ("\fB%s\fP") into \fBllvm\-as\fP, pipe |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
118 |
that into \fBllc\fP, then pipe the output of \fBllc\fP into \fBFileCheck\fP\&. This |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
119 |
means that FileCheck will be verifying its standard input (the llc output) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
120 |
against the filename argument specified (the original \fB\&.ll\fP file specified by |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
121 |
"\fB%s\fP"). To see how this works, let\(aqs look at the rest of the \fB\&.ll\fP file |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
122 |
(after the RUN line): |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
123 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
124 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
125 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
126 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
127 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
128 |
define void @sub1(i32* %p, i32 %v) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
129 |
entry: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
130 |
; CHECK: sub1: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
131 |
; CHECK: subl |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
132 |
%0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
133 |
ret void |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
134 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
135 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
136 |
define void @inc4(i64* %p) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
137 |
entry: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
138 |
; CHECK: inc4: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
139 |
; CHECK: incq |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
140 |
%0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
141 |
ret void |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
142 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
143 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
144 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
145 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
146 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
147 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
148 |
Here you can see some "\fBCHECK:\fP" lines specified in comments. Now you can |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
149 |
see how the file is piped into \fBllvm\-as\fP, then \fBllc\fP, and the machine code |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
150 |
output is what we are verifying. FileCheck checks the machine code output to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
151 |
verify that it matches what the "\fBCHECK:\fP" lines specify. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
152 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
153 |
The syntax of the "\fBCHECK:\fP" lines is very simple: they are fixed strings that |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
154 |
must occur in order. FileCheck defaults to ignoring horizontal whitespace |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
155 |
differences (e.g. a space is allowed to match a tab) but otherwise, the contents |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
156 |
of the "\fBCHECK:\fP" line is required to match some thing in the test file exactly. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
157 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
158 |
One nice thing about FileCheck (compared to grep) is that it allows merging |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
159 |
test cases together into logical groups. For example, because the test above |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
160 |
is checking for the "\fBsub1:\fP" and "\fBinc4:\fP" labels, it will not match |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
161 |
unless there is a "\fBsubl\fP" in between those labels. If it existed somewhere |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
162 |
else in the file, that would not count: "\fBgrep subl\fP" matches if "\fBsubl\fP" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
163 |
exists anywhere in the file. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
164 |
.SS The FileCheck \-check\-prefix option |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
165 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
166 |
The FileCheck \fB\-check\-prefix\fP option allows multiple test |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
167 |
configurations to be driven from one \fI\&.ll\fP file. This is useful in many |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
168 |
circumstances, for example, testing different architectural variants with |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
169 |
\fBllc\fP\&. Here\(aqs a simple example: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
170 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
171 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
172 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
173 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
174 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
175 |
; RUN: llvm\-as < %s | llc \-mtriple=i686\-apple\-darwin9 \-mattr=sse41 \e |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
176 |
; RUN: | FileCheck %s \-check\-prefix=X32 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
177 |
; RUN: llvm\-as < %s | llc \-mtriple=x86_64\-apple\-darwin9 \-mattr=sse41 \e |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
178 |
; RUN: | FileCheck %s \-check\-prefix=X64 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
179 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
180 |
define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
181 |
%tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
182 |
ret <4 x i32> %tmp1 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
183 |
; X32: pinsrd_1: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
184 |
; X32: pinsrd $1, 4(%esp), %xmm0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
185 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
186 |
; X64: pinsrd_1: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
187 |
; X64: pinsrd $1, %edi, %xmm0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
188 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
189 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
190 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
191 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
192 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
193 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
194 |
In this case, we\(aqre testing that we get the expected code generation with |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
195 |
both 32\-bit and 64\-bit code generation. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
196 |
.SS The "CHECK\-NEXT:" directive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
197 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
198 |
Sometimes you want to match lines and would like to verify that matches |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
199 |
happen on exactly consecutive lines with no other lines in between them. In |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
200 |
this case, you can use "\fBCHECK:\fP" and "\fBCHECK\-NEXT:\fP" directives to specify |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
201 |
this. If you specified a custom check prefix, just use "\fB<PREFIX>\-NEXT:\fP". |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
202 |
For example, something like this works as you\(aqd expect: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
203 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
204 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
205 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
206 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
207 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
208 |
define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
209 |
%tmp3 = load <2 x double>* %A, align 16 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
210 |
%tmp7 = insertelement <2 x double> undef, double %B, i32 0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
211 |
%tmp9 = shufflevector <2 x double> %tmp3, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
212 |
<2 x double> %tmp7, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
213 |
<2 x i32> < i32 0, i32 2 > |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
214 |
store <2 x double> %tmp9, <2 x double>* %r, align 16 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
215 |
ret void |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
216 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
217 |
; CHECK: t2: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
218 |
; CHECK: movl 8(%esp), %eax |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
219 |
; CHECK\-NEXT: movapd (%eax), %xmm0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
220 |
; CHECK\-NEXT: movhpd 12(%esp), %xmm0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
221 |
; CHECK\-NEXT: movl 4(%esp), %eax |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
222 |
; CHECK\-NEXT: movapd %xmm0, (%eax) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
223 |
; CHECK\-NEXT: ret |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
224 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
225 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
226 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
227 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
228 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
229 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
230 |
"\fBCHECK\-NEXT:\fP" directives reject the input unless there is exactly one |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
231 |
newline between it and the previous directive. A "\fBCHECK\-NEXT:\fP" cannot be |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
232 |
the first directive in a file. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
233 |
.SS The "CHECK\-SAME:" directive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
234 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
235 |
Sometimes you want to match lines and would like to verify that matches happen |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
236 |
on the same line as the previous match. In this case, you can use "\fBCHECK:\fP" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
237 |
and "\fBCHECK\-SAME:\fP" directives to specify this. If you specified a custom |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
238 |
check prefix, just use "\fB<PREFIX>\-SAME:\fP". |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
239 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
240 |
"\fBCHECK\-SAME:\fP" is particularly powerful in conjunction with "\fBCHECK\-NOT:\fP" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
241 |
(described below). |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
242 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
243 |
For example, the following works like you\(aqd expect: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
244 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
245 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
246 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
247 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
248 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
249 |
!0 = !DILocation(line: 5, scope: !1, inlinedAt: !2) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
250 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
251 |
; CHECK: !DILocation(line: 5, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
252 |
; CHECK\-NOT: column: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
253 |
; CHECK\-SAME: scope: ![[SCOPE:[0\-9]+]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
254 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
255 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
256 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
257 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
258 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
259 |
"\fBCHECK\-SAME:\fP" directives reject the input if there are any newlines between |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
260 |
it and the previous directive. A "\fBCHECK\-SAME:\fP" cannot be the first |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
261 |
directive in a file. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
262 |
.SS The "CHECK\-NOT:" directive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
263 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
264 |
The "\fBCHECK\-NOT:\fP" directive is used to verify that a string doesn\(aqt occur |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
265 |
between two matches (or before the first match, or after the last match). For |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
266 |
example, to verify that a load is removed by a transformation, a test like this |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
267 |
can be used: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
268 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
269 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
270 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
271 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
272 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
273 |
define i8 @coerce_offset0(i32 %V, i32* %P) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
274 |
store i32 %V, i32* %P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
275 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
276 |
%P2 = bitcast i32* %P to i8* |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
277 |
%P3 = getelementptr i8* %P2, i32 2 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
278 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
279 |
%A = load i8* %P3 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
280 |
ret i8 %A |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
281 |
; CHECK: @coerce_offset0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
282 |
; CHECK\-NOT: load |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
283 |
; CHECK: ret i8 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
284 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
285 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
286 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
287 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
288 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
289 |
.SS The "CHECK\-DAG:" directive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
290 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
291 |
If it\(aqs necessary to match strings that don\(aqt occur in a strictly sequential |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
292 |
order, "\fBCHECK\-DAG:\fP" could be used to verify them between two matches (or |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
293 |
before the first match, or after the last match). For example, clang emits |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
294 |
vtable globals in reverse order. Using \fBCHECK\-DAG:\fP, we can keep the checks |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
295 |
in the natural order: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
296 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
297 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
298 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
299 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
300 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
301 |
// RUN: %clang_cc1 %s \-emit\-llvm \-o \- | FileCheck %s |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
302 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
303 |
struct Foo { virtual void method(); }; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
304 |
Foo f; // emit vtable |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
305 |
// CHECK\-DAG: @_ZTV3Foo = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
306 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
307 |
struct Bar { virtual void method(); }; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
308 |
Bar b; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
309 |
// CHECK\-DAG: @_ZTV3Bar = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
310 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
311 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
312 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
313 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
314 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
315 |
\fBCHECK\-NOT:\fP directives could be mixed with \fBCHECK\-DAG:\fP directives to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
316 |
exclude strings between the surrounding \fBCHECK\-DAG:\fP directives. As a result, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
317 |
the surrounding \fBCHECK\-DAG:\fP directives cannot be reordered, i.e. all |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
318 |
occurrences matching \fBCHECK\-DAG:\fP before \fBCHECK\-NOT:\fP must not fall behind |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
319 |
occurrences matching \fBCHECK\-DAG:\fP after \fBCHECK\-NOT:\fP\&. For example, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
320 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
321 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
322 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
323 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
324 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
325 |
; CHECK\-DAG: BEFORE |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
326 |
; CHECK\-NOT: NOT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
327 |
; CHECK\-DAG: AFTER |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
328 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
329 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
330 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
331 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
332 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
333 |
This case will reject input strings where \fBBEFORE\fP occurs after \fBAFTER\fP\&. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
334 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
335 |
With captured variables, \fBCHECK\-DAG:\fP is able to match valid topological |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
336 |
orderings of a DAG with edges from the definition of a variable to its use. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
337 |
It\(aqs useful, e.g., when your test cases need to match different output |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
338 |
sequences from the instruction scheduler. For example, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
339 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
340 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
341 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
342 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
343 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
344 |
; CHECK\-DAG: add [[REG1:r[0\-9]+]], r1, r2 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
345 |
; CHECK\-DAG: add [[REG2:r[0\-9]+]], r3, r4 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
346 |
; CHECK: mul r5, [[REG1]], [[REG2]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
347 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
348 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
349 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
350 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
351 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
352 |
In this case, any order of that two \fBadd\fP instructions will be allowed. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
353 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
354 |
If you are defining \fIand\fP using variables in the same \fBCHECK\-DAG:\fP block, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
355 |
be aware that the definition rule can match \fIafter\fP its use. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
356 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
357 |
So, for instance, the code below will pass: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
358 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
359 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
360 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
361 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
362 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
363 |
; CHECK\-DAG: vmov.32 [[REG2:d[0\-9]+]][0] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
364 |
; CHECK\-DAG: vmov.32 [[REG2]][1] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
365 |
vmov.32 d0[1] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
366 |
vmov.32 d0[0] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
367 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
368 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
369 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
370 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
371 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
372 |
While this other code, will not: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
373 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
374 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
375 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
376 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
377 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
378 |
; CHECK\-DAG: vmov.32 [[REG2:d[0\-9]+]][0] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
379 |
; CHECK\-DAG: vmov.32 [[REG2]][1] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
380 |
vmov.32 d1[1] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
381 |
vmov.32 d0[0] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
382 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
383 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
384 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
385 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
386 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
387 |
While this can be very useful, it\(aqs also dangerous, because in the case of |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
388 |
register sequence, you must have a strong order (read before write, copy before |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
389 |
use, etc). If the definition your test is looking for doesn\(aqt match (because |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
390 |
of a bug in the compiler), it may match further away from the use, and mask |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
391 |
real bugs away. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
392 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
393 |
In those cases, to enforce the order, use a non\-DAG directive between DAG\-blocks. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
394 |
.SS The "CHECK\-LABEL:" directive |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
395 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
396 |
Sometimes in a file containing multiple tests divided into logical blocks, one |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
397 |
or more \fBCHECK:\fP directives may inadvertently succeed by matching lines in a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
398 |
later block. While an error will usually eventually be generated, the check |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
399 |
flagged as causing the error may not actually bear any relationship to the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
400 |
actual source of the problem. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
401 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
402 |
In order to produce better error messages in these cases, the "\fBCHECK\-LABEL:\fP" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
403 |
directive can be used. It is treated identically to a normal \fBCHECK\fP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
404 |
directive except that FileCheck makes an additional assumption that a line |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
405 |
matched by the directive cannot also be matched by any other check present in |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
406 |
\fBmatch\-filename\fP; this is intended to be used for lines containing labels or |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
407 |
other unique identifiers. Conceptually, the presence of \fBCHECK\-LABEL\fP divides |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
408 |
the input stream into separate blocks, each of which is processed independently, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
409 |
preventing a \fBCHECK:\fP directive in one block matching a line in another block. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
410 |
For example, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
411 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
412 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
413 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
414 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
415 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
416 |
define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
417 |
entry: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
418 |
; CHECK\-LABEL: C_ctor_base: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
419 |
; CHECK: mov [[SAVETHIS:r[0\-9]+]], r0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
420 |
; CHECK: bl A_ctor_base |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
421 |
; CHECK: mov r0, [[SAVETHIS]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
422 |
%0 = bitcast %struct.C* %this to %struct.A* |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
423 |
%call = tail call %struct.A* @A_ctor_base(%struct.A* %0) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
424 |
%1 = bitcast %struct.C* %this to %struct.B* |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
425 |
%call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
426 |
ret %struct.C* %this |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
427 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
428 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
429 |
define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
430 |
entry: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
431 |
; CHECK\-LABEL: D_ctor_base: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
432 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
433 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
434 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
435 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
436 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
437 |
The use of \fBCHECK\-LABEL:\fP directives in this case ensures that the three |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
438 |
\fBCHECK:\fP directives only accept lines corresponding to the body of the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
439 |
\fB@C_ctor_base\fP function, even if the patterns match lines found later in |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
440 |
the file. Furthermore, if one of these three \fBCHECK:\fP directives fail, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
441 |
FileCheck will recover by continuing to the next block, allowing multiple test |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
442 |
failures to be detected in a single invocation. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
443 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
444 |
There is no requirement that \fBCHECK\-LABEL:\fP directives contain strings that |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
445 |
correspond to actual syntactic labels in a source or output language: they must |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
446 |
simply uniquely match a single line in the file being verified. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
447 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
448 |
\fBCHECK\-LABEL:\fP directives cannot contain variable definitions or uses. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
449 |
.SS FileCheck Pattern Matching Syntax |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
450 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
451 |
All FileCheck directives take a pattern to match. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
452 |
For most uses of FileCheck, fixed string matching is perfectly sufficient. For |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
453 |
some things, a more flexible form of matching is desired. To support this, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
454 |
FileCheck allows you to specify regular expressions in matching strings, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
455 |
surrounded by double braces: \fB{{yourregex}}\fP\&. Because we want to use fixed |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
456 |
string matching for a majority of what we do, FileCheck has been designed to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
457 |
support mixing and matching fixed string matching with regular expressions. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
458 |
This allows you to write things like this: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
459 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
460 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
461 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
462 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
463 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
464 |
; CHECK: movhpd {{[0\-9]+}}(%esp), {{%xmm[0\-7]}} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
465 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
466 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
467 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
468 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
469 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
470 |
In this case, any offset from the ESP register will be allowed, and any xmm |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
471 |
register will be allowed. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
472 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
473 |
Because regular expressions are enclosed with double braces, they are |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
474 |
visually distinct, and you don\(aqt need to use escape characters within the double |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
475 |
braces like you would in C. In the rare case that you want to match double |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
476 |
braces explicitly from the input, you can use something ugly like |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
477 |
\fB{{[{][{]}}\fP as your pattern. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
478 |
.SS FileCheck Variables |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
479 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
480 |
It is often useful to match a pattern and then verify that it occurs again |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
481 |
later in the file. For codegen tests, this can be useful to allow any register, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
482 |
but verify that that register is used consistently later. To do this, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
483 |
\fBFileCheck\fP allows named variables to be defined and substituted into |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
484 |
patterns. Here is a simple example: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
485 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
486 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
487 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
488 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
489 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
490 |
; CHECK: test5: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
491 |
; CHECK: notw [[REGISTER:%[a\-z]+]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
492 |
; CHECK: andw {{.*}}[[REGISTER]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
493 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
494 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
495 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
496 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
497 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
498 |
The first check line matches a regex \fB%[a\-z]+\fP and captures it into the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
499 |
variable \fBREGISTER\fP\&. The second line verifies that whatever is in |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
500 |
\fBREGISTER\fP occurs later in the file after an "\fBandw\fP". \fBFileCheck\fP |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
501 |
variable references are always contained in \fB[[ ]]\fP pairs, and their names can |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
502 |
be formed with the regex \fB[a\-zA\-Z][a\-zA\-Z0\-9]*\fP\&. If a colon follows the name, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
503 |
then it is a definition of the variable; otherwise, it is a use. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
504 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
505 |
\fBFileCheck\fP variables can be defined multiple times, and uses always |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
506 |
get the latest value. Variables can also be used later on the same line they |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
507 |
were defined on. For example: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
508 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
509 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
510 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
511 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
512 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
513 |
; CHECK: op [[REG:r[0\-9]+]], [[REG]] |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
514 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
515 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
516 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
517 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
518 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
519 |
Can be useful if you want the operands of \fBop\fP to be the same register, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
520 |
and don\(aqt care exactly which register it is. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
521 |
.SS FileCheck Expressions |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
522 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
523 |
Sometimes there\(aqs a need to verify output which refers line numbers of the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
524 |
match file, e.g. when testing compiler diagnostics. This introduces a certain |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
525 |
fragility of the match file structure, as "\fBCHECK:\fP" lines contain absolute |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
526 |
line numbers in the same file, which have to be updated whenever line numbers |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
527 |
change due to text addition or deletion. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
528 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
529 |
To support this case, FileCheck allows using \fB[[@LINE]]\fP, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
530 |
\fB[[@LINE+<offset>]]\fP, \fB[[@LINE\-<offset>]]\fP expressions in patterns. These |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
531 |
expressions expand to a number of the line where a pattern is located (with an |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
532 |
optional integer offset). |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
533 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
534 |
This way match patterns can be put near the relevant test lines and include |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
535 |
relative line number references, for example: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
536 |
.INDENT 0.0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
537 |
.INDENT 3.5 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
538 |
.sp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
539 |
.nf |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
540 |
.ft C |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
541 |
// CHECK: test.cpp:[[@LINE+4]]:6: error: expected \(aq;\(aq after top level declarator |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
542 |
// CHECK\-NEXT: {{^int a}} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
543 |
// CHECK\-NEXT: {{^ \e^}} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
544 |
// CHECK\-NEXT: {{^ ;}} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
545 |
int a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
546 |
.ft P |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
547 |
.fi |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
548 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
549 |
.UNINDENT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
550 |
.SH AUTHOR |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
551 |
Maintained by The LLVM Team (http://llvm.org/). |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
552 |
.SH COPYRIGHT |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
553 |
2003-2016, LLVM Project |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
554 |
.\" Generated by docutils manpage writer. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
555 |
. |