diff options
| author | Siddharth Bhat <siddu.druid@gmail.com> | 2017-07-24 12:40:52 +0000 |
|---|---|---|
| committer | Siddharth Bhat <siddu.druid@gmail.com> | 2017-07-24 12:40:52 +0000 |
| commit | e2699b572e99110dc647a9f9dd1147b70db40412 (patch) | |
| tree | 5ac63631630a7a7406b6c51fc5af0498a41c6b4d /polly/lib/Analysis/ScopDetection.cpp | |
| parent | 5b8a9095e84c3be3a1bb46dfd3e09e9e4d8013f0 (diff) | |
| download | bcm5719-llvm-e2699b572e99110dc647a9f9dd1147b70db40412.tar.gz bcm5719-llvm-e2699b572e99110dc647a9f9dd1147b70db40412.zip | |
[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
Diffstat (limited to 'polly/lib/Analysis/ScopDetection.cpp')
| -rw-r--r-- | polly/lib/Analysis/ScopDetection.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp index 199306abc53..cb223d9cc17 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::opt<bool, true> XPollyProcessUnprofitable( 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 @@ void DiagnosticScopFound::print(DiagnosticPrinter &DP) const { } 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; } //===----------------------------------------------------------------------===// |

