diff options
Diffstat (limited to 'mlir/lib/Transforms')
| -rw-r--r-- | mlir/lib/Transforms/CFGFunctionViewGraph.cpp | 8 | ||||
| -rw-r--r-- | mlir/lib/Transforms/Canonicalizer.cpp | 13 | ||||
| -rw-r--r-- | mlir/lib/Transforms/ComposeAffineMaps.cpp | 7 | ||||
| -rw-r--r-- | mlir/lib/Transforms/LoopUnroll.cpp | 5 | ||||
| -rw-r--r-- | mlir/lib/Transforms/LoopUnrollAndJam.cpp | 4 | ||||
| -rw-r--r-- | mlir/lib/Transforms/PipelineDataTransfer.cpp | 4 | ||||
| -rw-r--r-- | mlir/lib/Transforms/SimplifyAffineExpr.cpp | 4 | ||||
| -rw-r--r-- | mlir/lib/Transforms/Utils/Pass.cpp | 26 | ||||
| -rw-r--r-- | mlir/lib/Transforms/Vectorize.cpp | 4 |
9 files changed, 38 insertions, 37 deletions
diff --git a/mlir/lib/Transforms/CFGFunctionViewGraph.cpp b/mlir/lib/Transforms/CFGFunctionViewGraph.cpp index dea1fc90af2..a75d26c1fbc 100644 --- a/mlir/lib/Transforms/CFGFunctionViewGraph.cpp +++ b/mlir/lib/Transforms/CFGFunctionViewGraph.cpp @@ -73,7 +73,7 @@ void mlir::CFGFunction::viewGraph() const { } namespace { -struct PrintCFGPass : public CFGFunctionPass { +struct PrintCFGPass : public FunctionPass { PrintCFGPass(llvm::raw_ostream &os, bool shortNames, const llvm::Twine &title) : os(os), shortNames(shortNames), title(title) {} PassResult runOnCFGFunction(CFGFunction *function) override { @@ -88,8 +88,8 @@ private: }; } // namespace -CFGFunctionPass *mlir::createPrintCFGGraphPass(llvm::raw_ostream &os, - bool shortNames, - const llvm::Twine &title) { +FunctionPass *mlir::createPrintCFGGraphPass(llvm::raw_ostream &os, + bool shortNames, + const llvm::Twine &title) { return new PrintCFGPass(os, shortNames, title); } diff --git a/mlir/lib/Transforms/Canonicalizer.cpp b/mlir/lib/Transforms/Canonicalizer.cpp index b7bfd785101..4f308171467 100644 --- a/mlir/lib/Transforms/Canonicalizer.cpp +++ b/mlir/lib/Transforms/Canonicalizer.cpp @@ -34,21 +34,10 @@ namespace { /// Canonicalize operations in functions. struct Canonicalizer : public FunctionPass { - PassResult runOnCFGFunction(CFGFunction *f) override; - PassResult runOnMLFunction(MLFunction *f) override; - PassResult runOnFunction(Function *fn); + PassResult runOnFunction(Function *fn) override; }; } // end anonymous namespace - -PassResult Canonicalizer::runOnCFGFunction(CFGFunction *fn) { - return runOnFunction(fn); -} - -PassResult Canonicalizer::runOnMLFunction(MLFunction *fn) { - return runOnFunction(fn); -} - PassResult Canonicalizer::runOnFunction(Function *fn) { auto *context = fn->getContext(); OwningPatternList patterns; diff --git a/mlir/lib/Transforms/ComposeAffineMaps.cpp b/mlir/lib/Transforms/ComposeAffineMaps.cpp index 8f7919d0760..ced9cbcb86a 100644 --- a/mlir/lib/Transforms/ComposeAffineMaps.cpp +++ b/mlir/lib/Transforms/ComposeAffineMaps.cpp @@ -41,21 +41,20 @@ namespace { // also AffineApplyOps. After forward subtituting its results, AffineApplyOps // with no remaining uses are collected and erased after the walk. // TODO(andydavis) Remove this when Chris adds instruction combiner pass. -struct ComposeAffineMaps : public MLFunctionPass, - StmtWalker<ComposeAffineMaps> { +struct ComposeAffineMaps : public FunctionPass, StmtWalker<ComposeAffineMaps> { std::vector<OperationStmt *> affineApplyOpsToErase; explicit ComposeAffineMaps() {} using StmtListType = llvm::iplist<Statement>; void walk(StmtListType::iterator Start, StmtListType::iterator End); void visitOperationStmt(OperationStmt *stmt); - PassResult runOnMLFunction(MLFunction *f); + PassResult runOnMLFunction(MLFunction *f) override; using StmtWalker<ComposeAffineMaps>::walk; }; } // end anonymous namespace -MLFunctionPass *mlir::createComposeAffineMapsPass() { +FunctionPass *mlir::createComposeAffineMapsPass() { return new ComposeAffineMaps(); } diff --git a/mlir/lib/Transforms/LoopUnroll.cpp b/mlir/lib/Transforms/LoopUnroll.cpp index 3f4b673f273..b8a5cf9d0a1 100644 --- a/mlir/lib/Transforms/LoopUnroll.cpp +++ b/mlir/lib/Transforms/LoopUnroll.cpp @@ -52,7 +52,7 @@ namespace { /// full unroll threshold was specified, in which case, fully unrolls all loops /// with trip count less than the specified threshold. The latter is for testing /// purposes, especially for testing outer loop unrolling. -struct LoopUnroll : public MLFunctionPass { +struct LoopUnroll : public FunctionPass { Optional<unsigned> unrollFactor; Optional<bool> unrollFull; @@ -61,12 +61,13 @@ struct LoopUnroll : public MLFunctionPass { : unrollFactor(unrollFactor), unrollFull(unrollFull) {} PassResult runOnMLFunction(MLFunction *f) override; + /// Unroll this for stmt. Returns false if nothing was done. bool runOnForStmt(ForStmt *forStmt); }; } // end anonymous namespace -MLFunctionPass *mlir::createLoopUnrollPass(int unrollFactor, int unrollFull) { +FunctionPass *mlir::createLoopUnrollPass(int unrollFactor, int unrollFull) { return new LoopUnroll(unrollFactor == -1 ? None : Optional<unsigned>(unrollFactor), unrollFull == -1 ? None : Optional<bool>(unrollFull)); diff --git a/mlir/lib/Transforms/LoopUnrollAndJam.cpp b/mlir/lib/Transforms/LoopUnrollAndJam.cpp index a4a69ecdc5c..b05063232ed 100644 --- a/mlir/lib/Transforms/LoopUnrollAndJam.cpp +++ b/mlir/lib/Transforms/LoopUnrollAndJam.cpp @@ -66,7 +66,7 @@ static llvm::cl::opt<unsigned> namespace { /// Loop unroll jam pass. Currently, this just unroll jams the first /// outer loop in an MLFunction. -struct LoopUnrollAndJam : public MLFunctionPass { +struct LoopUnrollAndJam : public FunctionPass { Optional<unsigned> unrollJamFactor; static const unsigned kDefaultUnrollJamFactor = 4; @@ -78,7 +78,7 @@ struct LoopUnrollAndJam : public MLFunctionPass { }; } // end anonymous namespace -MLFunctionPass *mlir::createLoopUnrollAndJamPass(int unrollJamFactor) { +FunctionPass *mlir::createLoopUnrollAndJamPass(int unrollJamFactor) { return new LoopUnrollAndJam( unrollJamFactor == -1 ? None : Optional<unsigned>(unrollJamFactor)); } diff --git a/mlir/lib/Transforms/PipelineDataTransfer.cpp b/mlir/lib/Transforms/PipelineDataTransfer.cpp index 91f3b845a98..d96d65b5fb7 100644 --- a/mlir/lib/Transforms/PipelineDataTransfer.cpp +++ b/mlir/lib/Transforms/PipelineDataTransfer.cpp @@ -39,7 +39,7 @@ using namespace mlir; namespace { -struct PipelineDataTransfer : public MLFunctionPass, +struct PipelineDataTransfer : public FunctionPass, StmtWalker<PipelineDataTransfer> { PassResult runOnMLFunction(MLFunction *f) override; PassResult runOnForStmt(ForStmt *forStmt); @@ -53,7 +53,7 @@ struct PipelineDataTransfer : public MLFunctionPass, /// Creates a pass to pipeline explicit movement of data across levels of the /// memory hierarchy. -MLFunctionPass *mlir::createPipelineDataTransferPass() { +FunctionPass *mlir::createPipelineDataTransferPass() { return new PipelineDataTransfer(); } diff --git a/mlir/lib/Transforms/SimplifyAffineExpr.cpp b/mlir/lib/Transforms/SimplifyAffineExpr.cpp index 0a36387caaa..f4a23e6b153 100644 --- a/mlir/lib/Transforms/SimplifyAffineExpr.cpp +++ b/mlir/lib/Transforms/SimplifyAffineExpr.cpp @@ -41,10 +41,10 @@ struct SimplifyAffineStructures : public FunctionPass, StmtWalker<SimplifyAffineStructures> { explicit SimplifyAffineStructures() {} - PassResult runOnMLFunction(MLFunction *f); + PassResult runOnMLFunction(MLFunction *f) override; // Does nothing on CFG functions for now. No reusable walkers/visitors exist // for this yet? TODO(someone). - PassResult runOnCFGFunction(CFGFunction *f) { return success(); } + PassResult runOnCFGFunction(CFGFunction *f) override { return success(); } void visitIfStmt(IfStmt *ifStmt); void visitOperationStmt(OperationStmt *opStmt); diff --git a/mlir/lib/Transforms/Utils/Pass.cpp b/mlir/lib/Transforms/Utils/Pass.cpp index 8b1110798bd..e4edee31900 100644 --- a/mlir/lib/Transforms/Utils/Pass.cpp +++ b/mlir/lib/Transforms/Utils/Pass.cpp @@ -23,19 +23,31 @@ #include "mlir/IR/CFGFunction.h" #include "mlir/IR/MLFunction.h" #include "mlir/IR/Module.h" - using namespace mlir; +/// Out of line virtual method to ensure vtables and metadata are emitted to a +/// single .o file. +void Pass::anchor() {} + +/// Out of line virtual method to ensure vtables and metadata are emitted to a +/// single .o file. +void ModulePass::anchor() {} + /// Function passes walk a module and look at each function with their /// corresponding hooks and terminates upon error encountered. PassResult FunctionPass::runOnModule(Module *m) { for (auto &fn : *m) { - if (auto *mlFunc = dyn_cast<MLFunction>(&fn)) - if (runOnMLFunction(mlFunc)) - return failure(); - if (auto *cfgFunc = dyn_cast<CFGFunction>(&fn)) - if (runOnCFGFunction(cfgFunc)) - return failure(); + if (runOnFunction(&fn)) + return failure(); } return success(); } + +PassResult FunctionPass::runOnFunction(Function *fn) { + if (auto *mlFunc = dyn_cast<MLFunction>(fn)) + return runOnMLFunction(mlFunc); + if (auto *cfgFunc = dyn_cast<CFGFunction>(fn)) + return runOnCFGFunction(cfgFunc); + + return success(); +} diff --git a/mlir/lib/Transforms/Vectorize.cpp b/mlir/lib/Transforms/Vectorize.cpp index 37c4f3abb59..f38fb8a117b 100644 --- a/mlir/lib/Transforms/Vectorize.cpp +++ b/mlir/lib/Transforms/Vectorize.cpp @@ -39,7 +39,7 @@ static cl::list<unsigned> clVirtualVectorSize( namespace { -struct Vectorize : public MLFunctionPass { +struct Vectorize : public FunctionPass { PassResult runOnMLFunction(MLFunction *f) override; // Thread-safe RAII contexts local to pass, BumpPtrAllocator freed on exit. @@ -73,4 +73,4 @@ PassResult Vectorize::runOnMLFunction(MLFunction *f) { return PassResult::Success; } -MLFunctionPass *mlir::createVectorizePass() { return new Vectorize(); } +FunctionPass *mlir::createVectorizePass() { return new Vectorize(); } |

