From: River Riddle Date: Sat, 18 May 2019 20:23:38 +0000 (-0700) Subject: Move the ConversionListBuilder utility to PatternMatch.h and rename it to Rewrite... X-Git-Tag: llvmorg-11-init~1466^2~1679 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1966d34da45eac3f3edc1bf56ba39c6eef2749cb;p=platform%2Fupstream%2Fllvm.git Move the ConversionListBuilder utility to PatternMatch.h and rename it to RewriteListBuilder. It has no specific functionality for DialectOpConversion patterns and can be useful for RewritePatterns in general. -- PiperOrigin-RevId: 248884466 --- diff --git a/mlir/examples/Linalg/Linalg1/lib/ConvertToLLVMDialect.cpp b/mlir/examples/Linalg/Linalg1/lib/ConvertToLLVMDialect.cpp index 3027d92..0b64029 100644 --- a/mlir/examples/Linalg/Linalg1/lib/ConvertToLLVMDialect.cpp +++ b/mlir/examples/Linalg/Linalg1/lib/ConvertToLLVMDialect.cpp @@ -397,8 +397,8 @@ public: void linalg::getDescriptorConverters(mlir::OwningRewritePatternList &patterns, mlir::MLIRContext *context) { - ConversionListBuilder::build(patterns, context); + RewriteListBuilder::build(patterns, context); } namespace { diff --git a/mlir/examples/Linalg/Linalg3/lib/ConvertToLLVMDialect.cpp b/mlir/examples/Linalg/Linalg3/lib/ConvertToLLVMDialect.cpp index 059ef32..8d945f3 100644 --- a/mlir/examples/Linalg/Linalg3/lib/ConvertToLLVMDialect.cpp +++ b/mlir/examples/Linalg/Linalg3/lib/ConvertToLLVMDialect.cpp @@ -138,8 +138,8 @@ class StoreOpConversion : public LoadStoreOpConversion { static void getConversions(mlir::OwningRewritePatternList &patterns, mlir::MLIRContext *context) { linalg::getDescriptorConverters(patterns, context); - ConversionListBuilder::build(patterns, - context); + RewriteListBuilder::build(patterns, + context); } void linalg::convertLinalg3ToLLVM(Module &module) { diff --git a/mlir/examples/toy/Ch4/mlir/ToyCombine.cpp b/mlir/examples/toy/Ch4/mlir/ToyCombine.cpp index 4175fc2..37aa47f 100644 --- a/mlir/examples/toy/Ch4/mlir/ToyCombine.cpp +++ b/mlir/examples/toy/Ch4/mlir/ToyCombine.cpp @@ -161,9 +161,8 @@ void TransposeOp::getCanonicalizationPatterns( // Register our patterns for rewrite by the Canonicalization framework. void ReshapeOp::getCanonicalizationPatterns( mlir::OwningRewritePatternList &results, mlir::MLIRContext *context) { - results.push_back(llvm::make_unique(context)); - results.push_back(llvm::make_unique(context)); - results.push_back(llvm::make_unique(context)); + mlir::RewriteListBuilder::build(results, context); } } // namespace toy diff --git a/mlir/examples/toy/Ch5/mlir/EarlyLowering.cpp b/mlir/examples/toy/Ch5/mlir/EarlyLowering.cpp index 3509f8b..093a595 100644 --- a/mlir/examples/toy/Ch5/mlir/EarlyLowering.cpp +++ b/mlir/examples/toy/Ch5/mlir/EarlyLowering.cpp @@ -125,7 +125,7 @@ protected: // Initialize the list of converters. void initConverters(OwningRewritePatternList &patterns, MLIRContext *context) override { - ConversionListBuilder::build(patterns, context); + RewriteListBuilder::build(patterns, context); } }; diff --git a/mlir/examples/toy/Ch5/mlir/LateLowering.cpp b/mlir/examples/toy/Ch5/mlir/LateLowering.cpp index b54c8dd..4cb34d1 100644 --- a/mlir/examples/toy/Ch5/mlir/LateLowering.cpp +++ b/mlir/examples/toy/Ch5/mlir/LateLowering.cpp @@ -326,9 +326,9 @@ protected: /// Initialize the list of converters. void initConverters(OwningRewritePatternList &patterns, MLIRContext *context) override { - ConversionListBuilder::build(patterns, context); + RewriteListBuilder::build(patterns, context); } /// Convert a Toy type, this gets called for block and region arguments, and diff --git a/mlir/examples/toy/Ch5/mlir/ToyCombine.cpp b/mlir/examples/toy/Ch5/mlir/ToyCombine.cpp index 2330447..6e05eaf 100644 --- a/mlir/examples/toy/Ch5/mlir/ToyCombine.cpp +++ b/mlir/examples/toy/Ch5/mlir/ToyCombine.cpp @@ -169,9 +169,8 @@ void TransposeOp::getCanonicalizationPatterns( // Register our patterns for rewrite by the Canonicalization framework. void ReshapeOp::getCanonicalizationPatterns( mlir::OwningRewritePatternList &results, mlir::MLIRContext *context) { - results.push_back(llvm::make_unique(context)); - results.push_back(llvm::make_unique(context)); - results.push_back(llvm::make_unique(context)); + mlir::RewriteListBuilder::build(results, context); } namespace { diff --git a/mlir/g3doc/Tutorials/Linalg/LLVMConversion.md b/mlir/g3doc/Tutorials/Linalg/LLVMConversion.md index 22797e4..72ca5a7 100644 --- a/mlir/g3doc/Tutorials/Linalg/LLVMConversion.md +++ b/mlir/g3doc/Tutorials/Linalg/LLVMConversion.md @@ -628,7 +628,7 @@ protected: // conversion instances given a list of classes as template parameters. // These instances will be allocated within `allocator` and their lifetime // is managed by the Lowering class. - return ConversionListBuilder< + return RewriteListBuilder< LoadOpConversion, SliceOpConversion, StoreOpConversion, ViewOpConversion>::build(allocator, context); } diff --git a/mlir/g3doc/Tutorials/Toy/Ch-5.md b/mlir/g3doc/Tutorials/Toy/Ch-5.md index 5b69bdd..8124c79 100644 --- a/mlir/g3doc/Tutorials/Toy/Ch-5.md +++ b/mlir/g3doc/Tutorials/Toy/Ch-5.md @@ -51,9 +51,8 @@ public: // This gets called once to set up operation converters. llvm::DenseSet initConverters(MLIRContext *context) override { - return ConversionListBuilder::build(allocator, context); + RewriteListBuilder::build(allocator, context); } private: diff --git a/mlir/include/mlir/IR/PatternMatch.h b/mlir/include/mlir/IR/PatternMatch.h index 4ce0eb0..784674b 100644 --- a/mlir/include/mlir/IR/PatternMatch.h +++ b/mlir/include/mlir/IR/PatternMatch.h @@ -348,6 +348,29 @@ private: /// bool applyPatternsGreedily(Function &fn, OwningRewritePatternList &&patterns); +/// Helper class to create a list of rewrite patterns given a list of their +/// types and a list of attributes perfect-forwarded to each of the conversion +/// constructors. +template struct RewriteListBuilder { + template + static void build(OwningRewritePatternList &patterns, + ConstructorArgs &&... constructorArgs) { + RewriteListBuilder::build( + patterns, std::forward(constructorArgs)...); + RewriteListBuilder::build( + patterns, std::forward(constructorArgs)...); + } +}; + +// Template specialization to stop recursion. +template struct RewriteListBuilder { + template + static void build(OwningRewritePatternList &patterns, + ConstructorArgs &&... constructorArgs) { + patterns.emplace_back(llvm::make_unique( + std::forward(constructorArgs)...)); + } +}; } // end namespace mlir #endif // MLIR_PATTERN_MATCH_H diff --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h index 107db47..0790e45 100644 --- a/mlir/include/mlir/Transforms/DialectConversion.h +++ b/mlir/include/mlir/Transforms/DialectConversion.h @@ -103,30 +103,6 @@ private: using RewritePattern::rewrite; }; -// Helper class to create a list of dialect conversion patterns given a list of -// their types and a list of attributes perfect-forwarded to each of the -// conversion constructors. -template struct ConversionListBuilder { - template - static void build(OwningRewritePatternList &patterns, - ConstructorArgs &&... constructorArgs) { - ConversionListBuilder::build( - patterns, std::forward(constructorArgs)...); - ConversionListBuilder::build( - patterns, std::forward(constructorArgs)...); - } -}; - -// Template specialization to stop recursion. -template struct ConversionListBuilder { - template - static void build(OwningRewritePatternList &patterns, - ConstructorArgs &&... constructorArgs) { - patterns.emplace_back(llvm::make_unique( - std::forward(constructorArgs)...)); - } -}; - /// Base class for dialect conversion interface. Specific converters must /// derive this class and implement the pure virtual functions. /// diff --git a/mlir/lib/LLVMIR/Transforms/ConvertToLLVMDialect.cpp b/mlir/lib/LLVMIR/Transforms/ConvertToLLVMDialect.cpp index 9758f98..6de9a15 100644 --- a/mlir/lib/LLVMIR/Transforms/ConvertToLLVMDialect.cpp +++ b/mlir/lib/LLVMIR/Transforms/ConvertToLLVMDialect.cpp @@ -941,7 +941,7 @@ void LLVMLowering::initConverters(OwningRewritePatternList &patterns, module = &llvmDialect->getLLVMModule(); // FIXME: this should be tablegen'ed - ConversionListBuilder< + RewriteListBuilder< AddFOpLowering, AddIOpLowering, AndOpLowering, AllocOpLowering, BranchOpLowering, CallIndirectOpLowering, CallOpLowering, CmpIOpLowering, CondBranchOpLowering, ConstLLVMOpLowering, DeallocOpLowering, diff --git a/mlir/lib/Linalg/Transforms/LowerToLLVMDialect.cpp b/mlir/lib/Linalg/Transforms/LowerToLLVMDialect.cpp index 4a07b29..2ecea9c 100644 --- a/mlir/lib/Linalg/Transforms/LowerToLLVMDialect.cpp +++ b/mlir/lib/Linalg/Transforms/LowerToLLVMDialect.cpp @@ -588,12 +588,14 @@ namespace { class Lowering : public LLVMLowering { protected: void initAdditionalConverters(OwningRewritePatternList &patterns) override { - return ConversionListBuilder< - BufferAllocOpConversion, BufferDeallocOpConversion, - BufferSizeOpConversion, DimOpConversion, DotOpConversion, - LoadOpConversion, RangeOpConversion, RangeIntersectOpConversion, - SliceOpConversion, StoreOpConversion, - ViewOpConversion>::build(patterns, llvmDialect->getContext(), *this); + RewriteListBuilder::build(patterns, + llvmDialect->getContext(), + *this); } Type convertAdditionalType(Type t) override { diff --git a/mlir/lib/StandardOps/Ops.cpp b/mlir/lib/StandardOps/Ops.cpp index aabaed5..e2989d1 100644 --- a/mlir/lib/StandardOps/Ops.cpp +++ b/mlir/lib/StandardOps/Ops.cpp @@ -378,8 +378,8 @@ struct SimplifyDeadAlloc : public RewritePattern { void AllocOp::getCanonicalizationPatterns(OwningRewritePatternList &results, MLIRContext *context) { - results.push_back(llvm::make_unique(context)); - results.push_back(llvm::make_unique(context)); + RewriteListBuilder::build(results, + context); } //===----------------------------------------------------------------------===//