diff options
Diffstat (limited to 'mlir/lib/Analysis')
| -rw-r--r-- | mlir/lib/Analysis/MemRefBoundCheck.cpp | 8 | ||||
| -rw-r--r-- | mlir/lib/Analysis/MemRefDependenceCheck.cpp | 7 | ||||
| -rw-r--r-- | mlir/lib/Analysis/Pass.cpp | 37 |
3 files changed, 52 insertions, 0 deletions
diff --git a/mlir/lib/Analysis/MemRefBoundCheck.cpp b/mlir/lib/Analysis/MemRefBoundCheck.cpp index 0725cea7086..a7f0ebf4936 100644 --- a/mlir/lib/Analysis/MemRefBoundCheck.cpp +++ b/mlir/lib/Analysis/MemRefBoundCheck.cpp @@ -45,10 +45,14 @@ struct MemRefBoundCheck : public FunctionPass, StmtWalker<MemRefBoundCheck> { PassResult runOnCFGFunction(CFGFunction *f) override { return success(); } void visitOperationStmt(OperationStmt *opStmt); + + static char passID; }; } // end anonymous namespace +char MemRefBoundCheck::passID = 0; + FunctionPass *mlir::createMemRefBoundCheckPass() { return new MemRefBoundCheck(); } @@ -164,3 +168,7 @@ void MemRefBoundCheck::visitOperationStmt(OperationStmt *opStmt) { PassResult MemRefBoundCheck::runOnMLFunction(MLFunction *f) { return walk(f), success(); } + +static PassRegistration<MemRefBoundCheck> + memRefBoundCheck("memref-bound-check", + "Check memref accesses in an MLFunction"); diff --git a/mlir/lib/Analysis/MemRefDependenceCheck.cpp b/mlir/lib/Analysis/MemRefDependenceCheck.cpp index 3ca669c5c85..7a620c1a3a8 100644 --- a/mlir/lib/Analysis/MemRefDependenceCheck.cpp +++ b/mlir/lib/Analysis/MemRefDependenceCheck.cpp @@ -51,10 +51,13 @@ struct MemRefDependenceCheck : public FunctionPass, loadsAndStores.push_back(opStmt); } } + static char passID; }; } // end anonymous namespace +char MemRefDependenceCheck::passID = 0; + FunctionPass *mlir::createMemRefDependenceCheckPass() { return new MemRefDependenceCheck(); } @@ -132,3 +135,7 @@ PassResult MemRefDependenceCheck::runOnMLFunction(MLFunction *f) { checkDependences(loadsAndStores); return success(); } + +static PassRegistration<MemRefDependenceCheck> + pass("memref-dependence-check", + "Checks dependences between all pairs of memref accesses."); diff --git a/mlir/lib/Analysis/Pass.cpp b/mlir/lib/Analysis/Pass.cpp index 1249c18c07e..ea9da5b0e80 100644 --- a/mlir/lib/Analysis/Pass.cpp +++ b/mlir/lib/Analysis/Pass.cpp @@ -23,6 +23,9 @@ #include "mlir/IR/CFGFunction.h" #include "mlir/IR/MLFunction.h" #include "mlir/IR/Module.h" +#include "mlir/Support/PassNameParser.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/Support/ManagedStatic.h" using namespace mlir; /// Out of line virtual method to ensure vtables and metadata are emitted to a @@ -51,3 +54,37 @@ PassResult FunctionPass::runOnFunction(Function *fn) { return success(); } + +// TODO: The pass registry and pass name parsing should be moved out. +static llvm::ManagedStatic<llvm::DenseMap<const void *, PassInfo>> passRegistry; + +void mlir::registerPass(StringRef arg, StringRef description, + const void *passID, + const PassAllocatorFunction &function) { + bool inserted = passRegistry + ->insert(std::make_pair( + passID, PassInfo(arg, description, passID, function))) + .second; + assert(inserted && "Pass registered multiple times"); + (void)inserted; +} + +PassNameParser::PassNameParser(llvm::cl::Option &opt) + : llvm::cl::parser<const PassInfo *>(opt) { + for (const auto &kv : *passRegistry) { + addLiteralOption(kv.second.getPassArgument(), &kv.second, + kv.second.getPassDescription()); + } +} + +void PassNameParser::printOptionInfo(const llvm::cl::Option &O, + size_t GlobalWidth) const { + PassNameParser *TP = const_cast<PassNameParser *>(this); + llvm::array_pod_sort(TP->Values.begin(), TP->Values.end(), + [](const PassNameParser::OptionInfo *VT1, + const PassNameParser::OptionInfo *VT2) { + return VT1->Name.compare(VT2->Name); + }); + using llvm::cl::parser; + parser<const PassInfo *>::printOptionInfo(O, GlobalWidth); +} |

