aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/FileCheck/FileCheck.cpp
diff options
context:
space:
mode:
authorJoel E. Denny <jdenny.ornl@gmail.com>2020-05-04 18:05:55 -0400
committerJoel E. Denny <jdenny.ornl@gmail.com>2020-05-11 14:53:48 -0400
commit9a9a5f9893c8db05cebc8818eb8485bff61f7c74 (patch)
tree1f54cdee60d0bb5ae801679e0463decdaab041f0 /llvm/utils/FileCheck/FileCheck.cpp
parenta78e13745d4ee4a42e41ebbe698159f651515fc5 (diff)
downloadllvm-9a9a5f9893c8db05cebc8818eb8485bff61f7c74.zip
llvm-9a9a5f9893c8db05cebc8818eb8485bff61f7c74.tar.gz
llvm-9a9a5f9893c8db05cebc8818eb8485bff61f7c74.tar.bz2
[FileCheck] Support comment directives
Sometimes you want to disable a FileCheck directive without removing it entirely, or you want to write comments that mention a directive by name. The `COM:` directive makes it easy to do this. For example, you might have: ``` ; X32: pinsrd_1: ; X32: pinsrd $1, 4(%esp), %xmm0 ; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but ; COM: X64 will have something similar to X32: ; COM: ; COM: X64: pinsrd_1: ; COM: X64: pinsrd $1, %edi, %xmm0 ``` Without this patch, you need to use some combination of rewording and directive syntax mangling to prevent FileCheck from recognizing the commented occurrences of `X32:` and `X64:` above as directives. Moreover, FileCheck diagnostics have been proposed that might complain about the occurrences of `X64` that don't have the trailing `:` because they look like directive typos: <http://lists.llvm.org/pipermail/llvm-dev/2020-April/140610.html> I think dodging all these problems can prove tedious for test authors, and directive syntax mangling already makes the purpose of existing test code unclear. `COM:` can avoid all these problems. This patch also updates the small set of existing tests that define `COM` as a check prefix: - clang/test/CodeGen/default-address-space.c - clang/test/CodeGenOpenCL/addr-space-struct-arg.cl - clang/test/Driver/hip-device-libs.hip - llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll I think lit should support `COM:` as well. Perhaps `clang -verify` should too. Reviewed By: jhenderson, thopre Differential Revision: https://reviews.llvm.org/D79276
Diffstat (limited to 'llvm/utils/FileCheck/FileCheck.cpp')
-rw-r--r--llvm/utils/FileCheck/FileCheck.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/utils/FileCheck/FileCheck.cpp b/llvm/utils/FileCheck/FileCheck.cpp
index 46821ec..3ee7c5a 100644
--- a/llvm/utils/FileCheck/FileCheck.cpp
+++ b/llvm/utils/FileCheck/FileCheck.cpp
@@ -44,6 +44,14 @@ static cl::alias CheckPrefixesAlias(
cl::desc(
"Alias for -check-prefix permitting multiple comma separated values"));
+static cl::list<std::string> CommentPrefixes(
+ "comment-prefixes", cl::CommaSeparated, cl::Hidden,
+ cl::desc("Comma-separated list of comment prefixes to use from check file\n"
+ "(defaults to 'COM,RUN'). Please avoid using this feature in\n"
+ "LLVM's LIT-based test suites, which should be easier to\n"
+ "maintain if they all follow a consistent comment style. This\n"
+ "feature is meant for non-LIT test suites using FileCheck."));
+
static cl::opt<bool> NoCanonicalizeWhiteSpace(
"strict-whitespace",
cl::desc("Do not treat all horizontal whitespace as equivalent"));
@@ -279,6 +287,8 @@ std::string GetCheckTypeAbbreviation(Check::FileCheckType Ty) {
return "label";
case Check::CheckEmpty:
return "empty";
+ case Check::CheckComment:
+ return "com";
case Check::CheckEOF:
return "eof";
case Check::CheckBadNot:
@@ -565,6 +575,9 @@ int main(int argc, char **argv) {
for (StringRef Prefix : CheckPrefixes)
Req.CheckPrefixes.push_back(Prefix);
+ for (StringRef Prefix : CommentPrefixes)
+ Req.CommentPrefixes.push_back(Prefix);
+
for (StringRef CheckNot : ImplicitCheckNot)
Req.ImplicitCheckNot.push_back(CheckNot);