diff options
author | River Riddle <riddleriver@gmail.com> | 2020-04-07 13:58:12 -0700 |
---|---|---|
committer | River Riddle <riddleriver@gmail.com> | 2020-04-07 14:08:52 -0700 |
commit | 1834ad4a69701d338da1c5e2272e5523e0bbcb49 (patch) | |
tree | c05a2c19fa96e3e6bb463fd37647682fb37fead1 /mlir/lib | |
parent | 80aca1eaf778a58458833591e82b74647b5b7280 (diff) | |
download | llvm-1834ad4a69701d338da1c5e2272e5523e0bbcb49.zip llvm-1834ad4a69701d338da1c5e2272e5523e0bbcb49.tar.gz llvm-1834ad4a69701d338da1c5e2272e5523e0bbcb49.tar.bz2 |
[mlir][Pass] Update the PassGen to generate base classes instead of utilities
Summary:
This is much cleaner, and fits the same structure as many other tablegen backends. This was not done originally as the CRTP in the pass classes made it overly verbose/complex.
Differential Revision: https://reviews.llvm.org/D77367
Diffstat (limited to 'mlir/lib')
62 files changed, 320 insertions, 369 deletions
diff --git a/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp b/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp index 6117100..33fd169 100644 --- a/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp +++ b/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp @@ -8,6 +8,7 @@ #include "mlir/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.h" +#include "../PassDetail.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" #include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h" @@ -164,11 +165,7 @@ void mlir::populateAVX512ToLLVMConversionPatterns( namespace { struct ConvertAVX512ToLLVMPass - : public PassWrapper<ConvertAVX512ToLLVMPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertAVX512ToLLVM -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertAVX512ToLLVMBase<ConvertAVX512ToLLVMPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp index c454449..54520b2 100644 --- a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp +++ b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp @@ -13,6 +13,7 @@ #include "mlir/Conversion/AffineToStandard/AffineToStandard.h" +#include "../PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" @@ -577,11 +578,7 @@ void mlir::populateAffineToStdConversionPatterns( } namespace { -class LowerAffinePass : public PassWrapper<LowerAffinePass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertAffineToStandard -#include "mlir/Conversion/Passes.h.inc" - +class LowerAffinePass : public ConvertAffineToStandardBase<LowerAffinePass> { void runOnFunction() override { OwningRewritePatternList patterns; populateAffineToStdConversionPatterns(patterns, &getContext()); diff --git a/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp b/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp index 9a71ef5..134ca5d 100644 --- a/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp +++ b/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp @@ -15,6 +15,7 @@ #include "mlir/Conversion/GPUToCUDA/GPUToCUDAPass.h" +#include "../PassDetail.h" #include "mlir/Dialect/GPU/GPUDialect.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/Attributes.h" @@ -22,7 +23,6 @@ #include "mlir/IR/Function.h" #include "mlir/IR/Module.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" #include "llvm/ADT/STLExtras.h" #include "llvm/IR/DataLayout.h" @@ -61,13 +61,8 @@ namespace { /// /// Intermediate data structures are allocated on the stack. class GpuLaunchFuncToCudaCallsPass - : public PassWrapper<GpuLaunchFuncToCudaCallsPass, - OperationPass<ModuleOp>> { + : public ConvertGpuLaunchFuncToCudaCallsBase<GpuLaunchFuncToCudaCallsPass> { private: -/// Include the generated pass utilities. -#define GEN_PASS_ConvertGpuLaunchFuncToCudaCalls -#include "mlir/Conversion/Passes.h.inc" - LLVM::LLVMDialect *getLLVMDialect() { return llvmDialect; } llvm::LLVMContext &getLLVMContext() { diff --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp index f4161a7..c3f3c04 100644 --- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp +++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp @@ -18,12 +18,12 @@ #include "mlir/Dialect/GPU/Passes.h" #include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "mlir/IR/BlockAndValueMapping.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/Support/FormatVariadic.h" #include "../GPUCommon/IndexIntrinsicsOpLowering.h" #include "../GPUCommon/OpToFuncCallLowering.h" +#include "../PassDetail.h" using namespace mlir; @@ -246,13 +246,8 @@ struct GPUReturnOpLowering : public ConvertToLLVMPattern { /// This pass only handles device code and is not meant to be run on GPU host /// code. class LowerGpuOpsToNVVMOpsPass - : public PassWrapper<LowerGpuOpsToNVVMOpsPass, - OperationPass<gpu::GPUModuleOp>> { + : public ConvertGpuOpsToNVVMOpsBase<LowerGpuOpsToNVVMOpsPass> { public: -/// Include the generated pass utilities. -#define GEN_PASS_ConvertGpuOpsToNVVMOps -#include "mlir/Conversion/Passes.h.inc" - void runOnOperation() override { gpu::GPUModuleOp m = getOperation(); diff --git a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp index 36e1b85..ed78bcf 100644 --- a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp +++ b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp @@ -21,6 +21,7 @@ #include "../GPUCommon/IndexIntrinsicsOpLowering.h" #include "../GPUCommon/OpToFuncCallLowering.h" +#include "../PassDetail.h" using namespace mlir; @@ -32,13 +33,8 @@ namespace { // This pass only handles device code and is not meant to be run on GPU host // code. class LowerGpuOpsToROCDLOpsPass - : public PassWrapper<LowerGpuOpsToROCDLOpsPass, - OperationPass<gpu::GPUModuleOp>> { + : public ConvertGpuOpsToROCDLOpsBase<LowerGpuOpsToROCDLOpsPass> { public: -/// Include the generated pass utilities. -#define GEN_PASS_ConvertGpuOpsToROCDLOps -#include "mlir/Conversion/Passes.h.inc" - void runOnOperation() override { gpu::GPUModuleOp m = getOperation(); diff --git a/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp b/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp index 173c6d0..687a32a 100644 --- a/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp +++ b/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.h" +#include "../PassDetail.h" #include "mlir/Conversion/GPUToSPIRV/ConvertGPUToSPIRV.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.h" #include "mlir/Dialect/GPU/GPUDialect.h" @@ -19,7 +20,6 @@ #include "mlir/Dialect/SPIRV/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/SPIRVLowering.h" #include "mlir/Dialect/SPIRV/SPIRVOps.h" -#include "mlir/Pass/Pass.h" using namespace mlir; @@ -33,12 +33,7 @@ namespace { /// replace it). /// /// 2) Lower the body of the spirv::ModuleOp. -struct GPUToSPIRVPass - : public PassWrapper<GPUToSPIRVPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertGpuToSPIRV -#include "mlir/Conversion/Passes.h.inc" - +struct GPUToSPIRVPass : public ConvertGPUToSPIRVBase<GPUToSPIRVPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp b/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp index bf2c15f..95133ac 100644 --- a/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp +++ b/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp @@ -13,6 +13,7 @@ // //===----------------------------------------------------------------------===// +#include "../PassDetail.h" #include "mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h" #include "mlir/Dialect/GPU/GPUDialect.h" #include "mlir/Dialect/SPIRV/SPIRVOps.h" @@ -23,7 +24,6 @@ #include "mlir/IR/Function.h" #include "mlir/IR/Module.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" using namespace mlir; @@ -38,13 +38,9 @@ namespace { /// function and attaching binary data and entry point name as an attributes to /// created vulkan launch call op. class ConvertGpuLaunchFuncToVulkanLaunchFunc - : public PassWrapper<ConvertGpuLaunchFuncToVulkanLaunchFunc, - OperationPass<ModuleOp>> { + : public ConvertGpuLaunchFuncToVulkanLaunchFuncBase< + ConvertGpuLaunchFuncToVulkanLaunchFunc> { public: -/// Include the generated pass utilities. -#define GEN_PASS_ConvertGpuLaunchFuncToVulkanLaunchFunc -#include "mlir/Conversion/Passes.h.inc" - void runOnOperation() override; private: diff --git a/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp b/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp index 03d924d..3182a5d 100644 --- a/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp +++ b/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp @@ -14,6 +14,7 @@ // //===----------------------------------------------------------------------===// +#include "../PassDetail.h" #include "mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h" #include "mlir/Dialect/GPU/GPUDialect.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -21,7 +22,6 @@ #include "mlir/IR/Builders.h" #include "mlir/IR/Function.h" #include "mlir/IR/Module.h" -#include "mlir/Pass/Pass.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/FormatVariadic.h" @@ -58,13 +58,9 @@ namespace { /// * deinitVulkan -- deinitializes vulkan runtime /// class VulkanLaunchFuncToVulkanCallsPass - : public PassWrapper<VulkanLaunchFuncToVulkanCallsPass, - OperationPass<ModuleOp>> { + : public ConvertVulkanLaunchFuncToVulkanCallsBase< + VulkanLaunchFuncToVulkanCallsPass> { private: -/// Include the generated pass utilities. -#define GEN_PASS_ConvertVulkanLaunchFuncToVulkanCalls -#include "mlir/Conversion/Passes.h.inc" - LLVM::LLVMDialect *getLLVMDialect() { return llvmDialect; } llvm::LLVMContext &getLLVMContext() { diff --git a/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp b/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp index 05aab300..1ffe548 100644 --- a/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp +++ b/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp @@ -8,6 +8,7 @@ #include "mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h" +#include "../PassDetail.h" #include "mlir/Conversion/AffineToStandard/AffineToStandard.h" #include "mlir/Conversion/LoopToStandard/ConvertLoopToStandard.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" @@ -28,8 +29,6 @@ #include "mlir/IR/PatternMatch.h" #include "mlir/IR/StandardTypes.h" #include "mlir/IR/Types.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Pass/PassManager.h" #include "mlir/Support/LogicalResult.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" @@ -562,11 +561,7 @@ void mlir::populateLinalgToLLVMConversionPatterns( namespace { struct ConvertLinalgToLLVMPass - : public PassWrapper<ConvertLinalgToLLVMPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertLinalgToLLVM -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertLinalgToLLVMBase<ConvertLinalgToLLVMPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp b/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp index acb87b7..d81e269 100644 --- a/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp +++ b/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp @@ -7,21 +7,16 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h" +#include "../PassDetail.h" #include "mlir/Conversion/LinalgToSPIRV/LinalgToSPIRV.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/SPIRVLowering.h" -#include "mlir/Pass/Pass.h" using namespace mlir; namespace { /// A pass converting MLIR Linalg ops into SPIR-V ops. -class LinalgToSPIRVPass - : public PassWrapper<LinalgToSPIRVPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertLinalgToSPIRV -#include "mlir/Conversion/Passes.h.inc" - +class LinalgToSPIRVPass : public ConvertLinalgToSPIRVBase<LinalgToSPIRVPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp b/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp index 9929b8e..bb00639 100644 --- a/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp +++ b/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "../PassDetail.h" #include "mlir/Conversion/LoopToStandard/ConvertLoopToStandard.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" @@ -19,7 +20,6 @@ #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Module.h" #include "mlir/IR/PatternMatch.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/Functional.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" @@ -31,11 +31,7 @@ using namespace mlir::loop; namespace { struct LoopToStandardPass - : public PassWrapper<LoopToStandardPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertLoopToStandard -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertLoopToStandardBase<LoopToStandardPass> { void runOnOperation() override; }; diff --git a/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp b/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp index 679d0b3..9ea64d9 100644 --- a/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp +++ b/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp @@ -7,12 +7,12 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h" +#include "../PassDetail.h" #include "mlir/Conversion/LoopsToGPU/LoopsToGPU.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/GPU/GPUDialect.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/ArrayRef.h" @@ -28,13 +28,8 @@ namespace { // A pass that traverses top-level loops in the function and converts them to // GPU launch operations. Nested launches are not allowed, so this does not // walk the function recursively to avoid considering nested loops. -struct ForLoopMapper : public PassWrapper<ForLoopMapper, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertSimpleLoopsToGPU -#include "mlir/Conversion/Passes.h.inc" - +struct ForLoopMapper : public ConvertSimpleLoopsToGPUBase<ForLoopMapper> { ForLoopMapper() = default; - ForLoopMapper(const ForLoopMapper &) {} ForLoopMapper(unsigned numBlockDims, unsigned numThreadDims) { this->numBlockDims = numBlockDims; this->numThreadDims = numThreadDims; @@ -62,13 +57,8 @@ struct ForLoopMapper : public PassWrapper<ForLoopMapper, FunctionPass> { // nested loops as the size of `numWorkGroups`. Within these any loop nest has // to be perfectly nested upto depth equal to size of `workGroupSize`. struct ImperfectlyNestedForLoopMapper - : public PassWrapper<ImperfectlyNestedForLoopMapper, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertLoopsToGPU -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertLoopsToGPUBase<ImperfectlyNestedForLoopMapper> { ImperfectlyNestedForLoopMapper() = default; - ImperfectlyNestedForLoopMapper(const ImperfectlyNestedForLoopMapper &) {} ImperfectlyNestedForLoopMapper(ArrayRef<int64_t> numWorkGroups, ArrayRef<int64_t> workGroupSize) { this->numWorkGroups->assign(numWorkGroups.begin(), numWorkGroups.end()); @@ -105,11 +95,7 @@ struct ImperfectlyNestedForLoopMapper }; struct ParallelLoopToGpuPass - : public PassWrapper<ParallelLoopToGpuPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertParallelLoopToGpu -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertParallelLoopToGpuBase<ParallelLoopToGpuPass> { void runOnOperation() override { OwningRewritePatternList patterns; populateParallelLoopToGPUPatterns(patterns, &getContext()); diff --git a/mlir/lib/Conversion/PassDetail.h b/mlir/lib/Conversion/PassDetail.h new file mode 100644 index 0000000..6da0bc8 --- /dev/null +++ b/mlir/lib/Conversion/PassDetail.h @@ -0,0 +1,25 @@ +//===- PassDetail.h - Conversion Pass class details -------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef CONVERSION_PASSDETAIL_H_ +#define CONVERSION_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +namespace gpu { +class GPUModuleOp; +} // end namespace gpu + +#define GEN_PASS_CLASSES +#include "mlir/Conversion/Passes.h.inc" + +} // end namespace mlir + +#endif // CONVERSION_PASSDETAIL_H_ diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp index d23883f..92b0270 100644 --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "../PassDetail.h" #include "mlir/ADT/TypeSwitch.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" @@ -22,7 +23,6 @@ #include "mlir/IR/Module.h" #include "mlir/IR/PatternMatch.h" #include "mlir/IR/TypeUtilities.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/Functional.h" #include "mlir/Support/LogicalResult.h" #include "mlir/Transforms/DialectConversion.h" @@ -2847,21 +2847,14 @@ LLVMTypeConverter::promoteMemRefDescriptors(Location loc, ValueRange opOperands, namespace { /// A pass converting MLIR operations into the LLVM IR dialect. -struct LLVMLoweringPass - : public PassWrapper<LLVMLoweringPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertStandardToLLVM -#include "mlir/Conversion/Passes.h.inc" - - /// Creates an LLVM lowering pass. +struct LLVMLoweringPass : public ConvertStandardToLLVMBase<LLVMLoweringPass> { + LLVMLoweringPass() = default; LLVMLoweringPass(bool useBarePtrCallConv, bool emitCWrappers, unsigned indexBitwidth) { this->useBarePtrCallConv = useBarePtrCallConv; this->emitCWrappers = emitCWrappers; this->indexBitwidth = indexBitwidth; } - explicit LLVMLoweringPass() {} - LLVMLoweringPass(const LLVMLoweringPass &pass) {} /// Run the dialect converter on the module. void runOnOperation() override { diff --git a/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp b/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp index b0ce99f..71208c7 100644 --- a/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp +++ b/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp @@ -12,21 +12,17 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.h" +#include "../PassDetail.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/SPIRVLowering.h" -#include "mlir/Pass/Pass.h" using namespace mlir; namespace { /// A pass converting MLIR Standard operations into the SPIR-V dialect. class ConvertStandardToSPIRVPass - : public PassWrapper<ConvertStandardToSPIRVPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertStandardToSPIRV -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertStandardToSPIRVBase<ConvertStandardToSPIRVPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp b/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp index 9dbb761..1312e0c 100644 --- a/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp +++ b/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp @@ -11,12 +11,12 @@ // //===----------------------------------------------------------------------===// +#include "../PassDetail.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/IR/PatternMatch.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" using namespace mlir; @@ -161,11 +161,7 @@ void mlir::populateStdLegalizationPatternsForSPIRVLowering( namespace { struct SPIRVLegalization final - : public PassWrapper<SPIRVLegalization, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LegalizeStandardForSPIRV -#include "mlir/Conversion/Passes.h.inc" - + : public LegalizeStandardForSPIRVBase<SPIRVLegalization> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp index 03cbb67..2fc9b22 100644 --- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp +++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp @@ -8,6 +8,7 @@ #include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h" +#include "../PassDetail.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -21,8 +22,6 @@ #include "mlir/IR/PatternMatch.h" #include "mlir/IR/StandardTypes.h" #include "mlir/IR/Types.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Pass/PassManager.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" #include "llvm/IR/DerivedTypes.h" @@ -1119,11 +1118,7 @@ void mlir::populateVectorToLLVMMatrixConversionPatterns( namespace { struct LowerVectorToLLVMPass - : public PassWrapper<LowerVectorToLLVMPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_ConvertVectorToLLVM -#include "mlir/Conversion/Passes.h.inc" - + : public ConvertVectorToLLVMBase<LowerVectorToLLVMPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp index 1f7d670..a052547 100644 --- a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp @@ -19,12 +19,12 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/IR/PatternMatch.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "llvm/ADT/MapVector.h" #include "llvm/Support/CommandLine.h" @@ -75,11 +75,7 @@ namespace { // TODO(bondhugula): We currently can't generate copies correctly when stores // are strided. Check for strided stores. struct AffineDataCopyGeneration - : public PassWrapper<AffineDataCopyGeneration, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineDataCopyGeneration -#include "mlir/Dialect/Affine/Passes.h.inc" - + : public AffineDataCopyGenerationBase<AffineDataCopyGeneration> { explicit AffineDataCopyGeneration( unsigned slowMemorySpace = 0, unsigned fastMemorySpace = clFastMemorySpace, unsigned tagMemorySpace = 0, @@ -96,7 +92,8 @@ struct AffineDataCopyGeneration skipNonUnitStrideLoops(skipNonUnitStrideLoops) {} explicit AffineDataCopyGeneration(const AffineDataCopyGeneration &other) - : slowMemorySpace(other.slowMemorySpace), + : AffineDataCopyGenerationBase<AffineDataCopyGeneration>(other), + slowMemorySpace(other.slowMemorySpace), fastMemorySpace(other.fastMemorySpace), tagMemorySpace(other.tagMemorySpace), minDmaTransferSize(other.minDmaTransferSize), diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp index 066a53d..72e99cc 100644 --- a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/LoopAnalysis.h" @@ -20,7 +21,6 @@ #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Utils.h" #include "llvm/ADT/DenseMap.h" @@ -42,11 +42,7 @@ namespace { /// TODO: This code should be removed once the new LICM pass can handle its /// uses. struct LoopInvariantCodeMotion - : public PassWrapper<LoopInvariantCodeMotion, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineLoopInvariantCodeMotion -#include "mlir/Dialect/Affine/Passes.h.inc" - + : public AffineLoopInvariantCodeMotionBase<LoopInvariantCodeMotion> { void runOnFunction() override; void runOnAffineForOp(AffineForOp forOp); }; diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp index 1cfb310..0e8e1098 100644 --- a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/LoopAnalysis.h" @@ -19,7 +20,6 @@ #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Utils.h" #include "llvm/Support/CommandLine.h" @@ -58,11 +58,7 @@ static llvm::cl::list<unsigned> clTileSizes( namespace { /// A pass to perform loop tiling on all suitable loop nests of a Function. -struct LoopTiling : public PassWrapper<LoopTiling, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineLoopTiling -#include "mlir/Dialect/Affine/Passes.h.inc" - +struct LoopTiling : public AffineLoopTilingBase<LoopTiling> { explicit LoopTiling(uint64_t cacheSizeBytes = kDefaultCacheMemCapacity, bool avoidMaxMinBounds = true) : cacheSizeBytes(cacheSizeBytes), avoidMaxMinBounds(avoidMaxMinBounds) {} diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp index d9a6b1c..f02cf36e 100644 --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp @@ -10,13 +10,13 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/CommandLine.h" @@ -58,11 +58,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 PassWrapper<LoopUnroll, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineUnroll -#include "mlir/Dialect/Affine/Passes.h.inc" - +struct LoopUnroll : public AffineLoopUnrollBase<LoopUnroll> { const Optional<unsigned> unrollFactor; const Optional<bool> unrollFull; // Callback to obtain unroll factors; if this has a callable target, takes diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp index 1a25677..dffc7c0 100644 --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp @@ -32,6 +32,8 @@ // Note: 'if/else' blocks are not jammed. So, if there are loops inside if // op's, bodies of those loops will not be jammed. //===----------------------------------------------------------------------===// + +#include "PassDetail.h" #include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" @@ -39,7 +41,6 @@ #include "mlir/IR/AffineMap.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/CommandLine.h" @@ -60,11 +61,7 @@ static llvm::cl::opt<unsigned> namespace { /// Loop unroll jam pass. Currently, this just unroll jams the first /// outer loop in a Function. -struct LoopUnrollAndJam : public PassWrapper<LoopUnrollAndJam, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineLoopUnrollAndJam -#include "mlir/Dialect/Affine/Passes.h.inc" - +struct LoopUnrollAndJam : public AffineLoopUnrollAndJamBase<LoopUnrollAndJam> { Optional<unsigned> unrollJamFactor; static const unsigned kDefaultUnrollJamFactor = 4; diff --git a/mlir/lib/Dialect/Affine/Transforms/PassDetail.h b/mlir/lib/Dialect/Affine/Transforms/PassDetail.h new file mode 100644 index 0000000..3bae059 --- /dev/null +++ b/mlir/lib/Dialect/Affine/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - Affine Pass class details -----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_AFFINE_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_AFFINE_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/Affine/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_AFFINE_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp index af11d4e..0df4ea0 100644 --- a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp @@ -10,10 +10,10 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/Utils.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/IntegerSet.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/Utils.h" #define DEBUG_TYPE "simplify-affine-structure" @@ -27,11 +27,7 @@ namespace { /// all memrefs with non-trivial layout maps are converted to ones with trivial /// identity layout ones. struct SimplifyAffineStructures - : public PassWrapper<SimplifyAffineStructures, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_SimplifyAffineStructures -#include "mlir/Dialect/Affine/Passes.h.inc" - + : public SimplifyAffineStructuresBase<SimplifyAffineStructures> { void runOnFunction() override; /// Utility to simplify an affine attribute and update its entry in the parent diff --git a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp index 06de9a2..d6b2bd1 100644 --- a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Analysis/NestedMatcher.h" #include "mlir/Analysis/SliceAnalysis.h" @@ -24,7 +25,6 @@ #include "mlir/IR/Builders.h" #include "mlir/IR/Location.h" #include "mlir/IR/Types.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/Functional.h" #include "mlir/Support/LLVM.h" #include "mlir/Transforms/FoldUtils.h" @@ -573,13 +573,8 @@ namespace { /// Base state for the vectorize pass. /// Command line arguments are preempted by non-empty pass arguments. -struct Vectorize : public PassWrapper<Vectorize, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineVectorize -#include "mlir/Dialect/Affine/Passes.h.inc" - +struct Vectorize : public AffineVectorizeBase<Vectorize> { Vectorize() = default; - Vectorize(const Vectorize &) {} Vectorize(ArrayRef<int64_t> virtualVectorSize); void runOnFunction() override; }; diff --git a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp index 70ace0f1..0f4c410 100644 --- a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/GPU/GPUDialect.h" #include "mlir/Dialect/GPU/Passes.h" #include "mlir/Dialect/GPU/Utils.h" @@ -17,7 +18,6 @@ #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" #include "mlir/IR/SymbolTable.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/RegionUtils.h" using namespace mlir; @@ -215,12 +215,8 @@ namespace { /// a separate pass. The external functions can then be annotated with the /// symbol of the cubin accessor function. class GpuKernelOutliningPass - : public PassWrapper<GpuKernelOutliningPass, OperationPass<ModuleOp>> { + : public GpuKernelOutliningBase<GpuKernelOutliningPass> { public: -/// Include the generated pass utilities. -#define GEN_PASS_GpuKernelOutlining -#include "mlir/Dialect/GPU/Passes.h.inc" - void runOnOperation() override { SymbolTable symbolTable(getOperation()); bool modified = false; diff --git a/mlir/lib/Dialect/GPU/Transforms/PassDetail.h b/mlir/lib/Dialect/GPU/Transforms/PassDetail.h new file mode 100644 index 0000000..2e6fb92 --- /dev/null +++ b/mlir/lib/Dialect/GPU/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - GPU Pass class details --------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_GPU_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_GPU_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/GPU/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_GPU_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp index 88f06d7..ad40017 100644 --- a/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp @@ -7,11 +7,11 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h" +#include "PassDetail.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/Block.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Module.h" -#include "mlir/Pass/Pass.h" using namespace mlir; @@ -58,11 +58,7 @@ void mlir::LLVM::ensureDistinctSuccessors(Operation *op) { namespace { struct LegalizeForExportPass - : public PassWrapper<LegalizeForExportPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LLVMLegalizeForExport -#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" - + : public LLVMLegalizeForExportBase<LegalizeForExportPass> { void runOnOperation() override { LLVM::ensureDistinctSuccessors(getOperation()); } diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h b/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h new file mode 100644 index 0000000..2a46e12 --- /dev/null +++ b/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - LLVM Pass class details -------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_LLVMIR_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_LLVMIR_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_LLVMIR_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp index 07b4d97..ee9996b 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/Dominance.h" #include "mlir/Dialect/Linalg/Analysis/DependenceAnalysis.h" #include "mlir/Dialect/Linalg/EDSC/Intrinsics.h" @@ -20,9 +21,7 @@ #include "mlir/Dialect/StandardOps/EDSC/Intrinsics.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" -#include "mlir/IR/OpImplementation.h" #include "mlir/IR/PatternMatch.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/LLVM.h" #include "mlir/Support/STLExtras.h" #include "mlir/Transforms/FoldUtils.h" @@ -568,11 +567,7 @@ struct FuseGenericTensorOps : public OpRewritePattern<GenericOp> { /// Pass that fuses generic ops on tensors. Used only for testing. struct FusionOfTensorOpsPass - : public PassWrapper<FusionOfTensorOpsPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgFusionOfTensorOps -#include "mlir/Dialect/Linalg/Passes.h.inc" - + : public LinalgFusionOfTensorOpsBase<FusionOfTensorOpsPass> { void runOnOperation() override { OwningRewritePatternList patterns; Operation *op = getOperation(); @@ -581,11 +576,7 @@ struct FusionOfTensorOpsPass }; }; -struct LinalgFusionPass : public PassWrapper<LinalgFusionPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgFusion -#include "mlir/Dialect/Linalg/Passes.h.inc" - +struct LinalgFusionPass : public LinalgFusionBase<LinalgFusionPass> { void runOnFunction() override { fuseLinalgOpsGreedily(getFunction()); } }; } // namespace diff --git a/mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp b/mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp index 8a4df64..e85a67a 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Affine/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/IR/LinalgOps.h" @@ -18,8 +19,6 @@ #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/BlockAndValueMapping.h" -#include "mlir/IR/OpImplementation.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/Functional.h" #include "mlir/Support/LLVM.h" #include "mlir/Support/STLExtras.h" @@ -694,32 +693,20 @@ static void lowerLinalgToLoopsImpl(Operation *op, MLIRContext *context) { namespace { struct LowerToAffineLoops - : public PassWrapper<LowerToAffineLoops, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgLowerToAffineLoops -#include "mlir/Dialect/Linalg/Passes.h.inc" - + : public LinalgLowerToAffineLoopsBase<LowerToAffineLoops> { void runOnFunction() override { lowerLinalgToLoopsImpl<AffineForOp, AffineIndexedValue>(getFunction(), &getContext()); } }; -struct LowerToLoops : public PassWrapper<LowerToLoops, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgLowerToLoops -#include "mlir/Dialect/Linalg/Passes.h.inc" - +struct LowerToLoops : public LinalgLowerToLoopsBase<LowerToLoops> { void runOnFunction() override { lowerLinalgToLoopsImpl<loop::ForOp, StdIndexedValue>(getFunction(), &getContext()); } }; struct LowerToParallelLoops - : public PassWrapper<LowerToParallelLoops, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgLowerToParallelLoops -#include "mlir/Dialect/Linalg/Passes.h.inc" - + : public LinalgLowerToParallelLoopsBase<LowerToParallelLoops> { void runOnFunction() override { lowerLinalgToLoopsImpl<loop::ParallelOp, StdIndexedValue>(getFunction(), &getContext()); diff --git a/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h b/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h new file mode 100644 index 0000000..7fa05ff --- /dev/null +++ b/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - Linalg Pass class details -----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_LINALG_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_LINALG_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/Linalg/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_LINALG_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp index 6eea97f..f393ca2 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Affine/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/IR/LinalgOps.h" @@ -21,8 +22,6 @@ #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineExprVisitor.h" #include "mlir/IR/AffineMap.h" -#include "mlir/IR/OpImplementation.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/LLVM.h" #include "mlir/Support/STLExtras.h" #include "mlir/Transforms/FoldUtils.h" @@ -230,14 +229,8 @@ static void promoteSubViews(FuncOp f, bool dynamicBuffers) { } namespace { -struct LinalgPromotionPass - : public PassWrapper<LinalgPromotionPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgPromotion -#include "mlir/Dialect/Linalg/Passes.h.inc" - +struct LinalgPromotionPass : public LinalgPromotionBase<LinalgPromotionPass> { LinalgPromotionPass() = default; - LinalgPromotionPass(const LinalgPromotionPass &) {} LinalgPromotionPass(bool dynamicBuffers) { this->dynamicBuffers = dynamicBuffers; } diff --git a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp index 1e528aa..cda2d08 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Affine/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/EDSC/Intrinsics.h" #include "mlir/Dialect/Linalg/IR/LinalgTypes.h" @@ -20,8 +21,6 @@ #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineExprVisitor.h" #include "mlir/IR/AffineMap.h" -#include "mlir/IR/OpImplementation.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/Functional.h" #include "mlir/Support/LLVM.h" #include "mlir/Support/STLExtras.h" @@ -507,13 +506,8 @@ static void tileLinalgOps(FuncOp f, ArrayRef<int64_t> tileSizes) { } namespace { -struct LinalgTilingPass : public PassWrapper<LinalgTilingPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgTiling -#include "mlir/Dialect/Linalg/Passes.h.inc" - +struct LinalgTilingPass : public LinalgTilingBase<LinalgTilingPass> { LinalgTilingPass() = default; - LinalgTilingPass(const LinalgTilingPass &) {} LinalgTilingPass(ArrayRef<int64_t> sizes) { tileSizes->assign(sizes.begin(), sizes.end()); } @@ -524,13 +518,8 @@ struct LinalgTilingPass : public PassWrapper<LinalgTilingPass, FunctionPass> { }; struct LinalgTilingToParallelLoopsPass - : public PassWrapper<LinalgTilingToParallelLoopsPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LinalgTilingToParallelLoops -#include "mlir/Dialect/Linalg/Passes.h.inc" - + : public LinalgTilingToParallelLoopsBase<LinalgTilingToParallelLoopsPass> { LinalgTilingToParallelLoopsPass() = default; - LinalgTilingToParallelLoopsPass(const LinalgTilingToParallelLoopsPass &) {} LinalgTilingToParallelLoopsPass(ArrayRef<int64_t> sizes) { tileSizes->assign(sizes.begin(), sizes.end()); } diff --git a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopFusion.cpp b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopFusion.cpp index b031f81..afd32b2 100644 --- a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopFusion.cpp +++ b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopFusion.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/LoopOps/Passes.h" #include "mlir/Dialect/LoopOps/Transforms.h" @@ -17,8 +18,6 @@ #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" #include "mlir/IR/OpDefinition.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Transforms/Passes.h" using namespace mlir; using namespace mlir::loop; @@ -161,11 +160,7 @@ void mlir::loop::naivelyFuseParallelOps(Region ®ion) { namespace { struct ParallelLoopFusion - : public PassWrapper<ParallelLoopFusion, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LoopParallelLoopFusion -#include "mlir/Dialect/LoopOps/Passes.h.inc" - + : public LoopParallelLoopFusionBase<ParallelLoopFusion> { void runOnOperation() override { for (Region ®ion : getOperation()->getRegions()) naivelyFuseParallelOps(region); diff --git a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopSpecialization.cpp b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopSpecialization.cpp index 98776ab..76c0be2 100644 --- a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopSpecialization.cpp +++ b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopSpecialization.cpp @@ -10,13 +10,13 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/LoopOps/Passes.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/BlockAndValueMapping.h" -#include "mlir/Pass/Pass.h" using namespace mlir; using loop::ParallelOp; @@ -60,11 +60,7 @@ static void specializeLoopForUnrolling(ParallelOp op) { namespace { struct ParallelLoopSpecialization - : public PassWrapper<ParallelLoopSpecialization, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LoopParallelLoopSpecialization -#include "mlir/Dialect/LoopOps/Passes.h.inc" - + : public LoopParallelLoopSpecializationBase<ParallelLoopSpecialization> { void runOnFunction() override { getFunction().walk([](ParallelOp op) { specializeLoopForUnrolling(op); }); } diff --git a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopTiling.cpp b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopTiling.cpp index c10872e..16b9b22 100644 --- a/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopTiling.cpp +++ b/mlir/lib/Dialect/LoopOps/Transforms/ParallelLoopTiling.cpp @@ -10,12 +10,12 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/LoopOps/LoopOps.h" #include "mlir/Dialect/LoopOps/Passes.h" #include "mlir/Dialect/LoopOps/Transforms.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/RegionUtils.h" #include "llvm/Support/CommandLine.h" @@ -102,13 +102,8 @@ static bool getInnermostNestedLoops(Block *block, namespace { struct ParallelLoopTiling - : public PassWrapper<ParallelLoopTiling, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LoopParallelLoopTiling -#include "mlir/Dialect/LoopOps/Passes.h.inc" - + : public LoopParallelLoopTilingBase<ParallelLoopTiling> { ParallelLoopTiling() = default; - ParallelLoopTiling(const ParallelLoopTiling &) {} explicit ParallelLoopTiling(ArrayRef<int64_t> tileSizes) { this->tileSizes = tileSizes; } diff --git a/mlir/lib/Dialect/LoopOps/Transforms/PassDetail.h b/mlir/lib/Dialect/LoopOps/Transforms/PassDetail.h new file mode 100644 index 0000000..9fa8a35 --- /dev/null +++ b/mlir/lib/Dialect/LoopOps/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - Loop Pass class details -------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_LOOPOPS_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_LOOPOPS_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/LoopOps/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_LOOPOPS_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Quant/Transforms/ConvertConst.cpp b/mlir/lib/Dialect/Quant/Transforms/ConvertConst.cpp index d892f67..8f9f55d 100644 --- a/mlir/lib/Dialect/Quant/Transforms/ConvertConst.cpp +++ b/mlir/lib/Dialect/Quant/Transforms/ConvertConst.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Quant/Passes.h" #include "mlir/Dialect/Quant/QuantOps.h" #include "mlir/Dialect/Quant/QuantizeUtils.h" @@ -15,17 +16,12 @@ #include "mlir/IR/Matchers.h" #include "mlir/IR/PatternMatch.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" using namespace mlir; using namespace mlir::quant; namespace { -struct ConvertConstPass : public PassWrapper<ConvertConstPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_QuantConvertConst -#include "mlir/Dialect/Quant/Passes.h.inc" - +struct ConvertConstPass : public QuantConvertConstBase<ConvertConstPass> { void runOnFunction() override; }; diff --git a/mlir/lib/Dialect/Quant/Transforms/ConvertSimQuant.cpp b/mlir/lib/Dialect/Quant/Transforms/ConvertSimQuant.cpp index 079c3ff..2cb077a 100644 --- a/mlir/lib/Dialect/Quant/Transforms/ConvertSimQuant.cpp +++ b/mlir/lib/Dialect/Quant/Transforms/ConvertSimQuant.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/Quant/FakeQuantSupport.h" #include "mlir/Dialect/Quant/Passes.h" #include "mlir/Dialect/Quant/QuantOps.h" @@ -13,18 +14,13 @@ #include "mlir/IR/Attributes.h" #include "mlir/IR/PatternMatch.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" using namespace mlir; using namespace mlir::quant; namespace { struct ConvertSimulatedQuantPass - : public PassWrapper<ConvertSimulatedQuantPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_QuantConvertSimulatedQuant -#include "mlir/Dialect/Quant/Passes.h.inc" - + : public QuantConvertSimulatedQuantBase<ConvertSimulatedQuantPass> { void runOnFunction() override; }; diff --git a/mlir/lib/Dialect/Quant/Transforms/PassDetail.h b/mlir/lib/Dialect/Quant/Transforms/PassDetail.h new file mode 100644 index 0000000..8727bfc --- /dev/null +++ b/mlir/lib/Dialect/Quant/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - Quant Pass class details ------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_QUANT_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_QUANT_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/Quant/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_QUANT_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/SPIRV/Transforms/DecorateSPIRVCompositeTypeLayoutPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/DecorateSPIRVCompositeTypeLayoutPass.cpp index a0b2c16..b4674af 100644 --- a/mlir/lib/Dialect/SPIRV/Transforms/DecorateSPIRVCompositeTypeLayoutPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/DecorateSPIRVCompositeTypeLayoutPass.cpp @@ -13,6 +13,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/SPIRV/LayoutUtils.h" #include "mlir/Dialect/SPIRV/Passes.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" @@ -80,9 +81,8 @@ static void populateSPIRVLayoutInfoPatterns(OwningRewritePatternList &patterns, namespace { class DecorateSPIRVCompositeTypeLayoutPass - : public PassWrapper<DecorateSPIRVCompositeTypeLayoutPass, - OperationPass<ModuleOp>> { -private: + : public SPIRVCompositeTypeLayoutBase< + DecorateSPIRVCompositeTypeLayoutPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp index d666f96..101536d 100644 --- a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/SPIRV/LayoutUtils.h" #include "mlir/Dialect/SPIRV/Passes.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" @@ -148,9 +149,7 @@ public: /// Pass to implement the ABI information specified as attributes. class LowerABIAttributesPass final - : public PassWrapper<LowerABIAttributesPass, - OperationPass<spirv::ModuleOp>> { -private: + : public SPIRVLowerABIAttributesBase<LowerABIAttributesPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h b/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h new file mode 100644 index 0000000..3c56f21 --- /dev/null +++ b/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h @@ -0,0 +1,25 @@ +//===- PassDetail.h - SPIRV Pass class details ------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef DIALECT_SPIRV_TRANSFORMS_PASSDETAIL_H_ +#define DIALECT_SPIRV_TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +namespace spirv { +class ModuleOp; +} // end namespace spirv + +#define GEN_PASS_CLASSES +#include "mlir/Dialect/SPIRV/Passes.h.inc" + +} // end namespace mlir + +#endif // DIALECT_SPIRV_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp index 415535b..8adbc76 100644 --- a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/SPIRV/Passes.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/SPIRVOps.h" @@ -26,9 +27,7 @@ using namespace mlir; namespace { /// Pass to deduce minimal version/extension/capability requirements for a /// spirv::ModuleOp. -class UpdateVCEPass final - : public PassWrapper<UpdateVCEPass, OperationPass<spirv::ModuleOp>> { -private: +class UpdateVCEPass final : public SPIRVUpdateVCEBase<UpdateVCEPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/TableGen/Pass.cpp b/mlir/lib/TableGen/Pass.cpp index 63f31c9..4bc46b6 100644 --- a/mlir/lib/TableGen/Pass.cpp +++ b/mlir/lib/TableGen/Pass.cpp @@ -75,6 +75,10 @@ StringRef Pass::getArgument() const { return def->getValueAsString("argument"); } +StringRef Pass::getBaseClass() const { + return def->getValueAsString("baseClass"); +} + StringRef Pass::getSummary() const { return def->getValueAsString("summary"); } StringRef Pass::getDescription() const { diff --git a/mlir/lib/Transforms/CSE.cpp b/mlir/lib/Transforms/CSE.cpp index 919c957..8309099 100644 --- a/mlir/lib/Transforms/CSE.cpp +++ b/mlir/lib/Transforms/CSE.cpp @@ -7,16 +7,13 @@ //===----------------------------------------------------------------------===// // // This transformation pass performs a simple common sub-expression elimination -// algorithm on operations within a function. +// algorithm on operations within a region. // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/Dominance.h" -#include "mlir/IR/Attributes.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/Function.h" #include "mlir/Pass/Pass.h" -#include "mlir/Support/Functional.h" #include "mlir/Transforms/Passes.h" #include "mlir/Transforms/Utils.h" #include "llvm/ADT/DenseMapInfo.h" @@ -25,6 +22,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/RecyclingAllocator.h" #include <deque> + using namespace mlir; namespace { @@ -73,14 +71,7 @@ struct SimpleOperationInfo : public llvm::DenseMapInfo<Operation *> { namespace { /// Simple common sub-expression elimination. -struct CSE : public PassWrapper<CSE, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_CSE -#include "mlir/Transforms/Passes.h.inc" - - CSE() = default; - CSE(const CSE &) {} - +struct CSE : public CSEBase<CSE> { /// Shared implementation of operation elimination and scoped map definitions. using AllocatorTy = llvm::RecyclingAllocator< llvm::BumpPtrAllocator, diff --git a/mlir/lib/Transforms/Canonicalizer.cpp b/mlir/lib/Transforms/Canonicalizer.cpp index 3f3d302..c46a8b9 100644 --- a/mlir/lib/Transforms/Canonicalizer.cpp +++ b/mlir/lib/Transforms/Canonicalizer.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/Passes.h" @@ -19,11 +20,7 @@ using namespace mlir; namespace { /// Canonicalize operations in nested regions. -struct Canonicalizer : public PassWrapper<Canonicalizer, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_Canonicalizer -#include "mlir/Transforms/Passes.h.inc" - +struct Canonicalizer : public CanonicalizerBase<Canonicalizer> { void runOnOperation() override { OwningRewritePatternList patterns; diff --git a/mlir/lib/Transforms/Inliner.cpp b/mlir/lib/Transforms/Inliner.cpp index 60382ea..582f720 100644 --- a/mlir/lib/Transforms/Inliner.cpp +++ b/mlir/lib/Transforms/Inliner.cpp @@ -13,10 +13,10 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/CallGraph.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Interfaces/SideEffects.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/InliningUtils.h" #include "mlir/Transforms/Passes.h" #include "llvm/ADT/SCCIterator.h" @@ -589,11 +589,7 @@ static void inlineSCC(Inliner &inliner, CGUseList &useList, //===----------------------------------------------------------------------===// namespace { -struct InlinerPass : public PassWrapper<InlinerPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_Inliner -#include "mlir/Transforms/Passes.h.inc" - +struct InlinerPass : public InlinerBase<InlinerPass> { void runOnOperation() override { CallGraph &cg = getAnalysis<CallGraph>(); auto *context = &getContext(); diff --git a/mlir/lib/Transforms/LocationSnapshot.cpp b/mlir/lib/Transforms/LocationSnapshot.cpp index e9858bc..0b1d929 100644 --- a/mlir/lib/Transforms/LocationSnapshot.cpp +++ b/mlir/lib/Transforms/LocationSnapshot.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "mlir/Transforms/LocationSnapshot.h" +#include "PassDetail.h" #include "mlir/IR/AsmState.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/FileUtilities.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/ToolOutputFile.h" @@ -124,13 +124,8 @@ LogicalResult mlir::generateLocationsFromIR(StringRef fileName, StringRef tag, namespace { struct LocationSnapshotPass - : public PassWrapper<LocationSnapshotPass, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LocationSnapshot -#include "mlir/Transforms/Passes.h.inc" - + : public LocationSnapshotBase<LocationSnapshotPass> { LocationSnapshotPass() = default; - LocationSnapshotPass(const LocationSnapshotPass &) {} LocationSnapshotPass(OpPrintingFlags flags, StringRef fileName, StringRef tag) : flags(flags) { this->fileName = fileName.str(); diff --git a/mlir/lib/Transforms/LoopCoalescing.cpp b/mlir/lib/Transforms/LoopCoalescing.cpp index 57d8e2a..d47b377 100644 --- a/mlir/lib/Transforms/LoopCoalescing.cpp +++ b/mlir/lib/Transforms/LoopCoalescing.cpp @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/LoopOps/LoopOps.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Passes.h" #include "mlir/Transforms/RegionUtils.h" @@ -19,12 +19,7 @@ using namespace mlir; namespace { -struct LoopCoalescingPass - : public PassWrapper<LoopCoalescingPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_LoopCoalescing -#include "mlir/Transforms/Passes.h.inc" - +struct LoopCoalescingPass : public LoopCoalescingBase<LoopCoalescingPass> { void runOnFunction() override { FuncOp func = getFunction(); diff --git a/mlir/lib/Transforms/LoopFusion.cpp b/mlir/lib/Transforms/LoopFusion.cpp index f802ba5..47ee502 100644 --- a/mlir/lib/Transforms/LoopFusion.cpp +++ b/mlir/lib/Transforms/LoopFusion.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/LoopAnalysis.h" @@ -18,7 +19,6 @@ #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopFusionUtils.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Passes.h" @@ -77,11 +77,7 @@ namespace { // TODO(andydavis) Extend this pass to check for fusion preventing dependences, // and add support for more general loop fusion algorithms. -struct LoopFusion : public PassWrapper<LoopFusion, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffineLoopFusion -#include "mlir/Transforms/Passes.h.inc" - +struct LoopFusion : public AffineLoopFusionBase<LoopFusion> { LoopFusion(unsigned fastMemorySpace = 0, uint64_t localBufSizeThreshold = 0, bool maximalFusion = false) : localBufSizeThreshold(localBufSizeThreshold), diff --git a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp index e7e48ac..dacd688 100644 --- a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp +++ b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp @@ -10,13 +10,13 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Transforms/Passes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Function.h" #include "mlir/Interfaces/LoopLikeInterface.h" #include "mlir/Interfaces/SideEffects.h" -#include "mlir/Pass/Pass.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" @@ -28,11 +28,7 @@ using namespace mlir; namespace { /// Loop invariant code motion (LICM) pass. struct LoopInvariantCodeMotion - : public PassWrapper<LoopInvariantCodeMotion, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_LoopInvariantCodeMotion -#include "mlir/Transforms/Passes.h.inc" - + : public LoopInvariantCodeMotionBase<LoopInvariantCodeMotion> { void runOnOperation() override; }; } // end anonymous namespace diff --git a/mlir/lib/Transforms/MemRefDataFlowOpt.cpp b/mlir/lib/Transforms/MemRefDataFlowOpt.cpp index 5b03de9..a0a4175 100644 --- a/mlir/lib/Transforms/MemRefDataFlowOpt.cpp +++ b/mlir/lib/Transforms/MemRefDataFlowOpt.cpp @@ -13,12 +13,12 @@ // SSA scalars live out of 'affine.for'/'affine.if' statements is available. //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/Dominance.h" #include "mlir/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/Passes.h" #include "llvm/ADT/SmallPtrSet.h" #include <algorithm> @@ -60,11 +60,7 @@ namespace { // currently only eliminates the stores only if no other loads/uses (other // than dealloc) remain. // -struct MemRefDataFlowOpt : public PassWrapper<MemRefDataFlowOpt, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_MemRefDataFlowOpt -#include "mlir/Transforms/Passes.h.inc" - +struct MemRefDataFlowOpt : public MemRefDataFlowOptBase<MemRefDataFlowOpt> { void runOnFunction() override; void forwardStoreToLoad(AffineLoadOp loadOp); diff --git a/mlir/lib/Transforms/OpStats.cpp b/mlir/lib/Transforms/OpStats.cpp index 667a0b4..7d64910 100644 --- a/mlir/lib/Transforms/OpStats.cpp +++ b/mlir/lib/Transforms/OpStats.cpp @@ -6,10 +6,10 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/IR/Module.h" #include "mlir/IR/Operation.h" #include "mlir/IR/OperationSupport.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/Passes.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/Format.h" @@ -18,12 +18,7 @@ using namespace mlir; namespace { -struct PrintOpStatsPass - : public PassWrapper<PrintOpStatsPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_PrintOpStats -#include "mlir/Transforms/Passes.h.inc" - +struct PrintOpStatsPass : public PrintOpStatsBase<PrintOpStatsPass> { explicit PrintOpStatsPass(raw_ostream &os = llvm::errs()) : os(os) {} // Prints the resultant operation statistics post iterating over the module. diff --git a/mlir/lib/Transforms/ParallelLoopCollapsing.cpp b/mlir/lib/Transforms/ParallelLoopCollapsing.cpp index 4380fe3..16ecb84 100644 --- a/mlir/lib/Transforms/ParallelLoopCollapsing.cpp +++ b/mlir/lib/Transforms/ParallelLoopCollapsing.cpp @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Dialect/LoopOps/LoopOps.h" -#include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Passes.h" #include "mlir/Transforms/RegionUtils.h" @@ -21,13 +20,7 @@ using namespace mlir; namespace { struct ParallelLoopCollapsing - : public PassWrapper<ParallelLoopCollapsing, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_ParallelLoopCollapsing -#include "mlir/Transforms/Passes.h.inc" - - ParallelLoopCollapsing() = default; - ParallelLoopCollapsing(const ParallelLoopCollapsing &) {} + : public ParallelLoopCollapsingBase<ParallelLoopCollapsing> { void runOnOperation() override { Operation *module = getOperation(); @@ -45,7 +38,6 @@ struct ParallelLoopCollapsing }); } }; - } // namespace std::unique_ptr<Pass> mlir::createParallelLoopCollapsingPass() { diff --git a/mlir/lib/Transforms/PassDetail.h b/mlir/lib/Transforms/PassDetail.h new file mode 100644 index 0000000..c6f7e22 --- /dev/null +++ b/mlir/lib/Transforms/PassDetail.h @@ -0,0 +1,21 @@ +//===- PassDetail.h - Transforms Pass class details -------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef TRANSFORMS_PASSDETAIL_H_ +#define TRANSFORMS_PASSDETAIL_H_ + +#include "mlir/Pass/Pass.h" + +namespace mlir { + +#define GEN_PASS_CLASSES +#include "mlir/Transforms/Passes.h.inc" + +} // end namespace mlir + +#endif // TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Transforms/PipelineDataTransfer.cpp b/mlir/lib/Transforms/PipelineDataTransfer.cpp index 8eeea89..01aa25a 100644 --- a/mlir/lib/Transforms/PipelineDataTransfer.cpp +++ b/mlir/lib/Transforms/PipelineDataTransfer.cpp @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/Transforms/Passes.h" #include "mlir/Analysis/AffineAnalysis.h" @@ -17,7 +18,6 @@ #include "mlir/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/IR/Builders.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" #include "mlir/Transforms/Utils.h" #include "llvm/ADT/DenseMap.h" @@ -29,11 +29,7 @@ using namespace mlir; namespace { struct PipelineDataTransfer - : public PassWrapper<PipelineDataTransfer, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_AffinePipelineDataTransfer -#include "mlir/Transforms/Passes.h.inc" - + : public AffinePipelineDataTransferBase<PipelineDataTransfer> { void runOnFunction() override; void runOnAffineForOp(AffineForOp forOp); diff --git a/mlir/lib/Transforms/StripDebugInfo.cpp b/mlir/lib/Transforms/StripDebugInfo.cpp index e5ba144..15ce1c2 100644 --- a/mlir/lib/Transforms/StripDebugInfo.cpp +++ b/mlir/lib/Transforms/StripDebugInfo.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "PassDetail.h" #include "mlir/IR/Function.h" #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" @@ -14,11 +15,7 @@ using namespace mlir; namespace { -struct StripDebugInfo : public PassWrapper<StripDebugInfo, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_StripDebugInfo -#include "mlir/Transforms/Passes.h.inc" - +struct StripDebugInfo : public StripDebugInfoBase<StripDebugInfo> { void runOnOperation() override; }; } // end anonymous namespace diff --git a/mlir/lib/Transforms/SymbolDCE.cpp b/mlir/lib/Transforms/SymbolDCE.cpp index 251a956..581857a6 100644 --- a/mlir/lib/Transforms/SymbolDCE.cpp +++ b/mlir/lib/Transforms/SymbolDCE.cpp @@ -11,17 +11,13 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Pass/Pass.h" +#include "PassDetail.h" #include "mlir/Transforms/Passes.h" using namespace mlir; namespace { -struct SymbolDCE : public PassWrapper<SymbolDCE, OperationPass<>> { -/// Include the generated pass utilities. -#define GEN_PASS_SymbolDCE -#include "mlir/Transforms/Passes.h.inc" - +struct SymbolDCE : public SymbolDCEBase<SymbolDCE> { void runOnOperation() override; /// Compute the liveness of the symbols within the given symbol table. diff --git a/mlir/lib/Transforms/ViewOpGraph.cpp b/mlir/lib/Transforms/ViewOpGraph.cpp index 8ac61fc..41e33e8 100644 --- a/mlir/lib/Transforms/ViewOpGraph.cpp +++ b/mlir/lib/Transforms/ViewOpGraph.cpp @@ -7,10 +7,10 @@ //===----------------------------------------------------------------------===// #include "mlir/Transforms/ViewOpGraph.h" +#include "PassDetail.h" #include "mlir/IR/Block.h" #include "mlir/IR/Operation.h" #include "mlir/IR/StandardTypes.h" -#include "mlir/Pass/Pass.h" #include "mlir/Support/STLExtras.h" #include "llvm/Support/CommandLine.h" @@ -100,11 +100,7 @@ namespace { // PrintOpPass is simple pass to write graph per function. // Note: this is a module pass only to avoid interleaving on the same ostream // due to multi-threading over functions. -struct PrintOpPass : public PassWrapper<PrintOpPass, OperationPass<ModuleOp>> { -/// Include the generated pass utilities. -#define GEN_PASS_PrintOpGraph -#include "mlir/Transforms/Passes.h.inc" - +struct PrintOpPass : public PrintOpBase<PrintOpPass> { explicit PrintOpPass(raw_ostream &os = llvm::errs(), bool short_names = false, const Twine &title = "") : os(os), title(title.str()), short_names(short_names) {} diff --git a/mlir/lib/Transforms/ViewRegionGraph.cpp b/mlir/lib/Transforms/ViewRegionGraph.cpp index 4f31a79..0c67f30 100644 --- a/mlir/lib/Transforms/ViewRegionGraph.cpp +++ b/mlir/lib/Transforms/ViewRegionGraph.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "mlir/Transforms/ViewRegionGraph.h" +#include "PassDetail.h" #include "mlir/IR/RegionGraphTraits.h" -#include "mlir/Pass/Pass.h" using namespace mlir; @@ -60,11 +60,7 @@ void mlir::Region::viewGraph(const Twine ®ionName) { void mlir::Region::viewGraph() { viewGraph("region"); } namespace { -struct PrintCFGPass : public PassWrapper<PrintCFGPass, FunctionPass> { -/// Include the generated pass utilities. -#define GEN_PASS_PrintCFG -#include "mlir/Transforms/Passes.h.inc" - +struct PrintCFGPass : public PrintCFGBase<PrintCFGPass> { PrintCFGPass(raw_ostream &os = llvm::errs(), bool shortNames = false, const Twine &title = "") : os(os), shortNames(shortNames), title(title.str()) {} |