[Polly] [NFC] [ScopDetection] Make `polly-only-func` perform regex scop name match.
Summary:
- We were using `.count` in `StringRef`, which matches substrings.
- We may want to use this for equality as well.
- Generalise this, so allow regexes as a parameter to `polly-only-func`.
Differential Revision: https://reviews.llvm.org/D35728
llvm-svn: 308875
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp
index 199306a..cb223d9 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -64,6 +64,7 @@
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/Support/Debug.h"
+#include "llvm/Support/Regex.h"
#include <set>
#include <stack>
@@ -92,10 +93,10 @@
static cl::list<std::string> OnlyFunctions(
"polly-only-func",
- cl::desc("Only run on functions that contain a certain string. "
- "Multiple strings can be comma separated. "
- "Scop detection will run on all functions that contain "
- "any of the strings provided."),
+ cl::desc("Only run on functions that match a regex. "
+ "Multiple regexes can be comma separated. "
+ "Scop detection will run on all functions that match "
+ "ANY of the regexes provided."),
cl::ZeroOrMore, cl::CommaSeparated, cl::cat(PollyCategory));
static cl::opt<bool>
@@ -274,9 +275,17 @@
}
static bool IsFnNameListedInOnlyFunctions(StringRef FnName) {
- for (auto Name : OnlyFunctions)
- if (FnName.count(Name) > 0)
+ for (auto RegexStr : OnlyFunctions) {
+ Regex R(RegexStr);
+
+ std::string Err;
+ if (!R.isValid(Err))
+ report_fatal_error(
+ "invalid regex given as input to -polly-only-func. " + Err, true);
+
+ if (R.match(FnName))
return true;
+ }
return false;
}
//===----------------------------------------------------------------------===//