diff --git a/flang/include/flang/Optimizer/CodeGen/CGPasses.td b/flang/include/flang/Optimizer/CodeGen/CGPasses.td --- a/flang/include/flang/Optimizer/CodeGen/CGPasses.td +++ b/flang/include/flang/Optimizer/CodeGen/CGPasses.td @@ -44,7 +44,7 @@ ]; } -def TargetRewrite : Pass<"target-rewrite", "mlir::ModuleOp"> { +def TargetRewritePass : Pass<"target-rewrite", "mlir::ModuleOp"> { let summary = "Rewrite some FIR dialect into target specific forms."; let description = [{ Certain abstractions in the FIR dialect need to be rewritten to reflect diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h --- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h +++ b/flang/include/flang/Optimizer/CodeGen/CodeGen.h @@ -20,6 +20,12 @@ struct NameUniquer; +#define GEN_PASS_DECL_FIRTOLLVMLOWERING +#define GEN_PASS_DECL_CODEGENREWRITE +#define GEN_PASS_DECL_TARGETREWRITEPASS +#define GEN_PASS_DECL_BOXEDPROCEDUREPASS +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" + /// Prerequiste pass for code gen. Perform intermediate rewrites to perform /// the code gen (to LLVM-IR dialect) conversion. std::unique_ptr createFirCodeGenRewritePass(); diff --git a/flang/include/flang/Optimizer/Transforms/Passes.h b/flang/include/flang/Optimizer/Transforms/Passes.h --- a/flang/include/flang/Optimizer/Transforms/Passes.h +++ b/flang/include/flang/Optimizer/Transforms/Passes.h @@ -28,6 +28,22 @@ // Passes defined in Passes.td //===----------------------------------------------------------------------===// +#define GEN_PASS_DECL_ABSTRACTRESULTONFUNCOPT +#define GEN_PASS_DECL_ABSTRACTRESULTONGLOBALOPT +#define GEN_PASS_DECL_AFFINEDIALECTPROMOTION +#define GEN_PASS_DECL_AFFINEDIALECTDEMOTION +#define GEN_PASS_DECL_ANNOTATECONSTANTOPERANDS +#define GEN_PASS_DECL_ARRAYVALUECOPY +#define GEN_PASS_DECL_CHARACTERCONVERSION +#define GEN_PASS_DECL_CFGCONVERSION +#define GEN_PASS_DECL_EXTERNALNAMECONVERSION +#define GEN_PASS_DECL_MEMREFDATAFLOWOPT +#define GEN_PASS_DECL_SIMPLIFYINTRINSICS +#define GEN_PASS_DECL_MEMORYALLOCATIONOPT +#define GEN_PASS_DECL_SIMPLIFYREGIONLITE +#define GEN_PASS_DECL_ALGEBRAICSIMPLIFICATION +#include "flang/Optimizer/Transforms/Passes.h.inc" + std::unique_ptr createAbstractResultOnFuncOptPass(); std::unique_ptr createAbstractResultOnGlobalOptPass(); std::unique_ptr createAffineDemotionPass(); diff --git a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp --- a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp +++ b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp @@ -6,10 +6,10 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "flang/Optimizer/CodeGen/CodeGen.h" + #include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/LowLevelIntrinsics.h" -#include "flang/Optimizer/CodeGen/CodeGen.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -19,6 +19,11 @@ #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace fir { +#define GEN_PASS_DEF_BOXEDPROCEDUREPASS +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-procedure-pointer" using namespace fir; @@ -169,7 +174,8 @@ /// the frame pointer during execution. In LLVM IR, the frame pointer is /// designated with the `nest` attribute. The thunk's address will then be used /// as the call target instead of the original function's address directly. -class BoxedProcedurePass : public BoxedProcedurePassBase { +class BoxedProcedurePass + : public fir::impl::BoxedProcedurePassBase { public: BoxedProcedurePass() { options = {true}; } BoxedProcedurePass(bool useThunks) { options = {useThunks}; } diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -11,8 +11,8 @@ //===----------------------------------------------------------------------===// #include "flang/Optimizer/CodeGen/CodeGen.h" + #include "CGOps.h" -#include "PassDetail.h" #include "flang/ISO_Fortran_binding.h" #include "flang/Optimizer/Dialect/FIRAttr.h" #include "flang/Optimizer/Dialect/FIROps.h" @@ -26,12 +26,19 @@ #include "mlir/Conversion/MathToLLVM/MathToLLVM.h" #include "mlir/Conversion/MathToLibm/MathToLibm.h" #include "mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Dialect/OpenMP/OpenMPDialect.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/Matchers.h" #include "mlir/Pass/Pass.h" #include "mlir/Target/LLVMIR/ModuleTranslation.h" #include "llvm/ADT/ArrayRef.h" +namespace fir { +#define GEN_PASS_DEF_FIRTOLLVMLOWERING +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-codegen" // fir::LLVMTypeConverter for converting to LLVM IR dialect types. @@ -3043,7 +3050,8 @@ auto ptr = adaptor.getOperands()[0]; if (isPresent.getVal().getType().isa()) { - [[maybe_unused]] auto structTy = ptr.getType().cast(); + [[maybe_unused]] auto structTy = + ptr.getType().cast(); assert(!structTy.isOpaque() && !structTy.getBody().empty()); ptr = rewriter.create(loc, ptr, 0); @@ -3280,7 +3288,8 @@ /// /// This pass lowers all FIR dialect operations to LLVM IR dialect. An /// MLIR pass is used to lower residual Std dialect to LLVM IR dialect. -class FIRToLLVMLowering : public fir::FIRToLLVMLoweringBase { +class FIRToLLVMLowering + : public fir::impl::FIRToLLVMLoweringBase { public: FIRToLLVMLowering() = default; FIRToLLVMLowering(fir::FIRToLLVMPassOptions options) : options{options} {} diff --git a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp --- a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp +++ b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp @@ -10,9 +10,9 @@ // //===----------------------------------------------------------------------===// -#include "CGOps.h" -#include "PassDetail.h" #include "flang/Optimizer/CodeGen/CodeGen.h" + +#include "CGOps.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -21,6 +21,11 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_CODEGENREWRITE +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" +} // namespace fir + //===----------------------------------------------------------------------===// // Codegen rewrite: rewriting of subgraphs of ops //===----------------------------------------------------------------------===// @@ -258,7 +263,7 @@ } }; -class CodeGenRewrite : public fir::CodeGenRewriteBase { +class CodeGenRewrite : public fir::impl::CodeGenRewriteBase { public: void runOn(mlir::Operation *op, mlir::Region ®ion) { auto &context = getContext(); diff --git a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp --- a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp +++ b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp @@ -14,12 +14,12 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "flang/Optimizer/CodeGen/CodeGen.h" + #include "Target.h" #include "flang/Optimizer/Builder/Character.h" #include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/Todo.h" -#include "flang/Optimizer/CodeGen/CodeGen.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIROpsSupport.h" @@ -30,6 +30,11 @@ #include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_TARGETREWRITEPASS +#include "flang/Optimizer/CodeGen/CGPasses.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-target-rewrite" namespace { @@ -66,7 +71,7 @@ /// generation that traverses the FIR and modifies types and operations to a /// form that is appropriate for the specific target. LLVM IR has specific /// idioms that are used for distinct target processor and ABI combinations. -class TargetRewrite : public fir::TargetRewriteBase { +class TargetRewrite : public fir::impl::TargetRewritePassBase { public: TargetRewrite(const fir::TargetRewriteOptions &options) { noCharacterConversion = options.noCharacterConversion; diff --git a/flang/lib/Optimizer/Transforms/AbstractResult.cpp b/flang/lib/Optimizer/Transforms/AbstractResult.cpp --- a/flang/lib/Optimizer/Transforms/AbstractResult.cpp +++ b/flang/lib/Optimizer/Transforms/AbstractResult.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Builder/Todo.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" @@ -19,6 +18,12 @@ #include "mlir/Transforms/Passes.h" #include "llvm/ADT/TypeSwitch.h" +namespace fir { +#define GEN_PASS_DEF_ABSTRACTRESULTONFUNCOPT +#define GEN_PASS_DEF_ABSTRACTRESULTONGLOBALOPT +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-abstract-result-opt" namespace fir { @@ -247,8 +252,8 @@ }; class AbstractResultOnFuncOpt - : public AbstractResultOptTemplate { + : public AbstractResultOptTemplate< + AbstractResultOnFuncOpt, fir::impl::AbstractResultOnFuncOptBase> { public: void runOnSpecificOperation(mlir::func::FuncOp func, bool shouldBoxResult, mlir::RewritePatternSet &patterns, @@ -292,8 +297,9 @@ } class AbstractResultOnGlobalOpt - : public AbstractResultOptTemplate { + : public AbstractResultOptTemplate< + AbstractResultOnGlobalOpt, + fir::impl::AbstractResultOnGlobalOptBase> { public: void runOnSpecificOperation(fir::GlobalOp global, bool, mlir::RewritePatternSet &, diff --git a/flang/lib/Optimizer/Transforms/AffineDemotion.cpp b/flang/lib/Optimizer/Transforms/AffineDemotion.cpp --- a/flang/lib/Optimizer/Transforms/AffineDemotion.cpp +++ b/flang/lib/Optimizer/Transforms/AffineDemotion.cpp @@ -16,7 +16,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -36,6 +35,11 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_AFFINEDIALECTDEMOTION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-affine-demotion" using namespace fir; @@ -137,7 +141,7 @@ }; class AffineDialectDemotion - : public AffineDialectDemotionBase { + : public fir::impl::AffineDialectDemotionBase { public: void runOnOperation() override { auto *context = &getContext(); diff --git a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp --- a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp +++ b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp @@ -15,7 +15,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -31,6 +30,11 @@ #include "llvm/ADT/Optional.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_AFFINEDIALECTPROMOTION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-affine-promotion" using namespace fir; @@ -579,7 +583,7 @@ /// Promote fir.do_loop and fir.if to affine.for and affine.if, in the cases /// where such a promotion is possible. class AffineDialectPromotion - : public AffineDialectPromotionBase { + : public fir::impl::AffineDialectPromotionBase { public: void runOnOperation() override { diff --git a/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp b/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp --- a/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp +++ b/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp @@ -11,16 +11,21 @@ // the parameters of the patterns for Fortran programs. //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Transforms/Passes.h" +#include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/Math/Transforms/Passes.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace fir { +#define GEN_PASS_DEF_ALGEBRAICSIMPLIFICATION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + using namespace mlir; namespace { struct AlgebraicSimplification - : public fir::AlgebraicSimplificationBase { + : public fir::impl::AlgebraicSimplificationBase { AlgebraicSimplification(const GreedyRewriteConfig &rewriteConfig) { config = rewriteConfig; } diff --git a/flang/lib/Optimizer/Transforms/AnnotateConstant.cpp b/flang/lib/Optimizer/Transforms/AnnotateConstant.cpp --- a/flang/lib/Optimizer/Transforms/AnnotateConstant.cpp +++ b/flang/lib/Optimizer/Transforms/AnnotateConstant.cpp @@ -6,18 +6,24 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +// #include "PassDetail.h" +#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Transforms/Passes.h" #include "mlir/IR/BuiltinAttributes.h" +namespace fir { +#define GEN_PASS_DEF_ANNOTATECONSTANTOPERANDS +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-annotate-constant" using namespace fir; namespace { struct AnnotateConstantOperands - : AnnotateConstantOperandsBase { + : public impl::AnnotateConstantOperandsBase { void runOnOperation() override { auto *context = &getContext(); mlir::Dialect *firDialect = context->getLoadedDialect("fir"); diff --git a/flang/lib/Optimizer/Transforms/ArrayValueCopy.cpp b/flang/lib/Optimizer/Transforms/ArrayValueCopy.cpp --- a/flang/lib/Optimizer/Transforms/ArrayValueCopy.cpp +++ b/flang/lib/Optimizer/Transforms/ArrayValueCopy.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Builder/Array.h" #include "flang/Optimizer/Builder/BoxValue.h" #include "flang/Optimizer/Builder/FIRBuilder.h" @@ -22,6 +21,11 @@ #include "mlir/Transforms/DialectConversion.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_ARRAYVALUECOPY +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-array-value-copy" using namespace fir; @@ -1326,7 +1330,7 @@ }; class ArrayValueCopyConverter - : public ArrayValueCopyBase { + : public fir::impl::ArrayValueCopyBase { public: void runOnOperation() override { auto func = getOperation(); diff --git a/flang/lib/Optimizer/Transforms/CharacterConversion.cpp b/flang/lib/Optimizer/Transforms/CharacterConversion.cpp --- a/flang/lib/Optimizer/Transforms/CharacterConversion.cpp +++ b/flang/lib/Optimizer/Transforms/CharacterConversion.cpp @@ -6,19 +6,24 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Support/FIRContext.h" #include "flang/Optimizer/Support/KindMapping.h" #include "flang/Optimizer/Transforms/Passes.h" +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/Diagnostics.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/Support/Debug.h" +namespace fir { +#define GEN_PASS_DEF_CHARACTERCONVERSION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-character-conversion" namespace { @@ -95,7 +100,7 @@ /// Rewrite the `fir.char_convert` op into a loop. This pass must be run only on /// fir::CharConvertOp. class CharacterConversion - : public fir::CharacterConversionBase { + : public fir::impl::CharacterConversionBase { public: void runOnOperation() override { CharacterConversionOptions clOpts{useRuntimeCalls.getValue()}; diff --git a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp --- a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp +++ b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Support/InternalNames.h" #include "flang/Optimizer/Transforms/Passes.h" @@ -17,6 +17,11 @@ #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace fir { +#define GEN_PASS_DEF_EXTERNALNAMECONVERSION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + using namespace mlir; //===----------------------------------------------------------------------===// @@ -117,7 +122,7 @@ }; class ExternalNameConversionPass - : public fir::ExternalNameConversionBase { + : public fir::impl::ExternalNameConversionBase { public: mlir::ModuleOp getModule() { return getOperation(); } void runOnOperation() override; diff --git a/flang/lib/Optimizer/Transforms/MemRefDataFlowOpt.cpp b/flang/lib/Optimizer/Transforms/MemRefDataFlowOpt.cpp --- a/flang/lib/Optimizer/Transforms/MemRefDataFlowOpt.cpp +++ b/flang/lib/Optimizer/Transforms/MemRefDataFlowOpt.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -19,6 +18,11 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" +namespace fir { +#define GEN_PASS_DEF_MEMREFDATAFLOWOPT +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "fir-memref-dataflow-opt" using namespace mlir; @@ -94,7 +98,7 @@ mlir::DominanceInfo *domInfo; }; -class MemDataFlowOpt : public fir::MemRefDataFlowOptBase { +class MemDataFlowOpt : public fir::impl::MemRefDataFlowOptBase { public: void runOnOperation() override { mlir::func::FuncOp f = getOperation(); diff --git a/flang/lib/Optimizer/Transforms/MemoryAllocation.cpp b/flang/lib/Optimizer/Transforms/MemoryAllocation.cpp --- a/flang/lib/Optimizer/Transforms/MemoryAllocation.cpp +++ b/flang/lib/Optimizer/Transforms/MemoryAllocation.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -18,6 +17,11 @@ #include "mlir/Transforms/Passes.h" #include "llvm/ADT/TypeSwitch.h" +namespace fir { +#define GEN_PASS_DEF_MEMORYALLOCATIONOPT +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-memory-allocation-opt" // Number of elements in an array does not determine where it is allocated. @@ -151,7 +155,7 @@ /// 2. If a stack allocation is an array with a runtime evaluated size make /// it a heap allocation. class MemoryAllocationOpt - : public fir::MemoryAllocationOptBase { + : public fir::impl::MemoryAllocationOptBase { public: MemoryAllocationOpt() { // Set options with default values. (See Passes.td.) Note that the diff --git a/flang/lib/Optimizer/Transforms/PassDetail.h b/flang/lib/Optimizer/Transforms/PassDetail.h deleted file mode 100644 --- a/flang/lib/Optimizer/Transforms/PassDetail.h +++ /dev/null @@ -1,29 +0,0 @@ -//===- PassDetail.h - Optimizer 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 FORTRAN_OPTMIZER_TRANSFORMS_PASSDETAIL_H -#define FORTRAN_OPTMIZER_TRANSFORMS_PASSDETAIL_H - -#include "flang/Optimizer/Dialect/FIRDialect.h" -#include "flang/Optimizer/Dialect/FIROps.h" -#include "mlir/Dialect/Affine/IR/AffineOps.h" -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Dialect/LLVMIR/LLVMDialect.h" -#include "mlir/Dialect/Math/IR/Math.h" -#include "mlir/Dialect/OpenACC/OpenACC.h" -#include "mlir/Dialect/OpenMP/OpenMPDialect.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Pass/PassRegistry.h" - -namespace fir { - -#define GEN_PASS_CLASSES -#include "flang/Optimizer/Transforms/Passes.h.inc" - -} // namespace fir - -#endif // FORTRAN_OPTMIZER_TRANSFORMS_PASSDETAIL_H diff --git a/flang/lib/Optimizer/Transforms/RewriteLoop.cpp b/flang/lib/Optimizer/Transforms/RewriteLoop.cpp --- a/flang/lib/Optimizer/Transforms/RewriteLoop.cpp +++ b/flang/lib/Optimizer/Transforms/RewriteLoop.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Transforms/Passes.h" @@ -17,6 +16,11 @@ #include "mlir/Transforms/DialectConversion.h" #include "llvm/Support/CommandLine.h" +namespace fir { +#define GEN_PASS_DEF_CFGCONVERSION +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + using namespace fir; using namespace mlir; @@ -297,7 +301,7 @@ }; /// Convert FIR structured control flow ops to CFG ops. -class CfgConversion : public CFGConversionBase { +class CfgConversion : public fir::impl::CFGConversionBase { public: void runOnOperation() override { auto *context = &getContext(); diff --git a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp --- a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp +++ b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp @@ -22,7 +22,6 @@ /// and small in size. //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Builder/BoxValue.h" #include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/Todo.h" @@ -30,6 +29,7 @@ #include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Support/FIRContext.h" #include "flang/Optimizer/Transforms/Passes.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/TypeUtilities.h" #include "mlir/Pass/Pass.h" @@ -40,12 +40,17 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" +namespace fir { +#define GEN_PASS_DEF_SIMPLIFYINTRINSICS +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + #define DEBUG_TYPE "flang-simplify-intrinsics" namespace { class SimplifyIntrinsicsPass - : public fir::SimplifyIntrinsicsBase { + : public fir::impl::SimplifyIntrinsicsBase { using FunctionTypeGeneratorTy = std::function; using FunctionBodyGeneratorTy = diff --git a/flang/lib/Optimizer/Transforms/SimplifyRegionLite.cpp b/flang/lib/Optimizer/Transforms/SimplifyRegionLite.cpp --- a/flang/lib/Optimizer/Transforms/SimplifyRegionLite.cpp +++ b/flang/lib/Optimizer/Transforms/SimplifyRegionLite.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Transforms/Passes.h" #include "mlir/IR/PatternMatch.h" @@ -15,10 +14,15 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/RegionUtils.h" +namespace fir { +#define GEN_PASS_DEF_SIMPLIFYREGIONLITE +#include "flang/Optimizer/Transforms/Passes.h.inc" +} // namespace fir + namespace { class SimplifyRegionLitePass - : public fir::SimplifyRegionLiteBase { + : public fir::impl::SimplifyRegionLiteBase { public: void runOnOperation() override; }; diff --git a/mlir/include/mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h b/mlir/include/mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h --- a/mlir/include/mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h +++ b/mlir/include/mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h @@ -17,6 +17,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTAMDGPUTOROCDL +#include "mlir/Conversion/Passes.h.inc" + void populateAMDGPUToROCDLConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns, amdgpu::Chipset chipset); diff --git a/mlir/include/mlir/Conversion/AffineToStandard/AffineToStandard.h b/mlir/include/mlir/Conversion/AffineToStandard/AffineToStandard.h --- a/mlir/include/mlir/Conversion/AffineToStandard/AffineToStandard.h +++ b/mlir/include/mlir/Conversion/AffineToStandard/AffineToStandard.h @@ -23,6 +23,9 @@ class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTAFFINETOSTANDARD +#include "mlir/Conversion/Passes.h.inc" + /// Collect a set of patterns to convert from the Affine dialect to the Standard /// dialect, in particular convert structured affine control flow into CFG /// branch-based control flow. diff --git a/mlir/include/mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h b/mlir/include/mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h --- a/mlir/include/mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h +++ b/mlir/include/mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h @@ -17,6 +17,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTARITHMETICTOLLVM +#include "mlir/Conversion/Passes.h.inc" + namespace arith { void populateArithmeticToLLVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h b/mlir/include/mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h --- a/mlir/include/mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h +++ b/mlir/include/mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h @@ -18,6 +18,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTARITHMETICTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + namespace arith { void populateArithmeticToSPIRVPatterns(SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h b/mlir/include/mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h --- a/mlir/include/mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h +++ b/mlir/include/mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h @@ -9,9 +9,15 @@ #ifndef MLIR_CONVERSION_ARMNEON2DTOINTR_ARMNEON2DTOINTR_H_ #define MLIR_CONVERSION_ARMNEON2DTOINTR_ARMNEON2DTOINTR_H_ -#include "mlir/Pass/Pass.h" +#include namespace mlir { +class Pass; +class RewritePatternSet; + +#define GEN_PASS_DECL_CONVERTARMNEON2DTOINTR +#include "mlir/Conversion/Passes.h.inc" + /// Populates patterns for the lowering of Arm NEON 2D ops to intrinsics. /// See createConvertArmNeon2dToIntrPass. void populateConvertArmNeon2dToIntrPatterns(RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h b/mlir/include/mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h --- a/mlir/include/mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h +++ b/mlir/include/mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h @@ -21,6 +21,9 @@ class TypeConverter; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTASYNCTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Create a pass to convert Async operations to the LLVM dialect. std::unique_ptr> createConvertAsyncToLLVMPass(); diff --git a/mlir/include/mlir/Conversion/BufferizationToMemRef/BufferizationToMemRef.h b/mlir/include/mlir/Conversion/BufferizationToMemRef/BufferizationToMemRef.h --- a/mlir/include/mlir/Conversion/BufferizationToMemRef/BufferizationToMemRef.h +++ b/mlir/include/mlir/Conversion/BufferizationToMemRef/BufferizationToMemRef.h @@ -15,6 +15,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTBUFFERIZATIONTOMEMREF +#include "mlir/Conversion/Passes.h.inc" + /// Collect a set of patterns to convert memory-related operations from the /// Bufferization dialect to the MemRef dialect. void populateBufferizationToMemRefConversionPatterns( diff --git a/mlir/include/mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h b/mlir/include/mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h --- a/mlir/include/mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h +++ b/mlir/include/mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h @@ -15,6 +15,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTCOMPLEXTOLLVM +#include "mlir/Conversion/Passes.h.inc" + class ComplexStructBuilder : public StructBuilder { public: /// Construct a helper for the given complex number value. diff --git a/mlir/include/mlir/Conversion/ComplexToLibm/ComplexToLibm.h b/mlir/include/mlir/Conversion/ComplexToLibm/ComplexToLibm.h --- a/mlir/include/mlir/Conversion/ComplexToLibm/ComplexToLibm.h +++ b/mlir/include/mlir/Conversion/ComplexToLibm/ComplexToLibm.h @@ -14,6 +14,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTCOMPLEXTOLIBM +#include "mlir/Conversion/Passes.h.inc" + /// Populate the given list with patterns that convert from Complex to Libm /// calls. void populateComplexToLibmConversionPatterns(RewritePatternSet &patterns, diff --git a/mlir/include/mlir/Conversion/ComplexToStandard/ComplexToStandard.h b/mlir/include/mlir/Conversion/ComplexToStandard/ComplexToStandard.h --- a/mlir/include/mlir/Conversion/ComplexToStandard/ComplexToStandard.h +++ b/mlir/include/mlir/Conversion/ComplexToStandard/ComplexToStandard.h @@ -14,6 +14,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTCOMPLEXTOSTANDARD +#include "mlir/Conversion/Passes.h.inc" + /// Populate the given list with patterns that convert from Complex to Standard. void populateComplexToStandardConversionPatterns(RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h b/mlir/include/mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h --- a/mlir/include/mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h +++ b/mlir/include/mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h @@ -20,6 +20,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTCONTROLFLOWTOLLVM +#include "mlir/Conversion/Passes.h.inc" + namespace cf { /// Collect the patterns to convert from the ControlFlow dialect to LLVM. The /// conversion patterns capture the LLVMTypeConverter by reference meaning the diff --git a/mlir/include/mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.h b/mlir/include/mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.h --- a/mlir/include/mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTCONTROLFLOWTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert ControlFlow ops to SPIR-V ops. std::unique_ptr> createConvertControlFlowToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h --- a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h +++ b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h @@ -10,6 +10,7 @@ #define MLIR_CONVERSION_FUNCTOLLVM_CONVERTFUNCTOLLVMPASS_H_ #include +#include namespace mlir { class LowerToLLVMOptions; @@ -18,6 +19,9 @@ class OperationPass; class Pass; +#define GEN_PASS_DECL_CONVERTFUNCTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert the Func dialect into the LLVMIR dialect. std::unique_ptr> createConvertFuncToLLVMPass(); std::unique_ptr> diff --git a/mlir/include/mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h b/mlir/include/mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h --- a/mlir/include/mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTFUNCTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert Func ops to SPIR-V ops. std::unique_ptr> createConvertFuncToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h --- a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h +++ b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h @@ -38,6 +38,9 @@ class LLVMDialect; } // namespace LLVM +#define GEN_PASS_DECL_GPUTOLLVMCONVERSIONPASS +#include "mlir/Conversion/Passes.h.inc" + using OwnedBlob = std::unique_ptr>; using BlobGenerator = std::function; diff --git a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h --- a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h +++ b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h @@ -25,6 +25,9 @@ class MMAMatrixType; } // namespace gpu +#define GEN_PASS_DECL_CONVERTGPUOPSTONVVMOPS +#include "mlir/Conversion/Passes.h.inc" + LLVM::LLVMStructType convertMMAToLLVMType(gpu::MMAMatrixType type); /// Configure target to convert from the GPU dialect to NVVM. diff --git a/mlir/include/mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h b/mlir/include/mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h --- a/mlir/include/mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h +++ b/mlir/include/mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h @@ -24,6 +24,9 @@ class GPUModuleOp; } // namespace gpu +#define GEN_PASS_DECL_CONVERTGPUOPSTOROCDLOPS +#include "mlir/Conversion/Passes.h.inc" + /// Collect a set of patterns to convert from the GPU dialect to ROCDL. /// If `runtime` is Unknown, gpu.printf will not be lowered /// The resulting pattern set should be run over a gpu.module op diff --git a/mlir/include/mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h b/mlir/include/mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h --- a/mlir/include/mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h @@ -21,6 +21,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTGPUTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert GPU kernel ops to corresponding SPIR-V ops. For a /// gpu.func to be converted, it should have a spv.entry_point_abi attribute. /// If `mapMemorySpace` is true, performs MemRef memory space to SPIR-V mapping diff --git a/mlir/include/mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h b/mlir/include/mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h --- a/mlir/include/mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h +++ b/mlir/include/mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h @@ -24,6 +24,10 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTVULKANLAUNCHFUNCTOVULKANCALLS +#define GEN_PASS_DECL_CONVERTGPULAUNCHFUNCTOVULKANLAUNCHFUNC +#include "mlir/Conversion/Passes.h.inc" + std::unique_ptr> createConvertVulkanLaunchFuncToVulkanCallsPass(); diff --git a/mlir/include/mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h b/mlir/include/mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h --- a/mlir/include/mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h +++ b/mlir/include/mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h @@ -18,6 +18,9 @@ class OperationPass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTLINALGTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Populate the given list with patterns that convert from Linalg to LLVM. void populateLinalgToLLVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h b/mlir/include/mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h --- a/mlir/include/mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTLINALGTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates and returns a pass to convert Linalg ops to SPIR-V ops. std::unique_ptr> createLinalgToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/LinalgToStandard/LinalgToStandard.h b/mlir/include/mlir/Conversion/LinalgToStandard/LinalgToStandard.h --- a/mlir/include/mlir/Conversion/LinalgToStandard/LinalgToStandard.h +++ b/mlir/include/mlir/Conversion/LinalgToStandard/LinalgToStandard.h @@ -17,6 +17,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTLINALGTOSTANDARD +#include "mlir/Conversion/Passes.h.inc" + namespace linalg { //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Conversion/MathToFuncs/MathToFuncs.h b/mlir/include/mlir/Conversion/MathToFuncs/MathToFuncs.h --- a/mlir/include/mlir/Conversion/MathToFuncs/MathToFuncs.h +++ b/mlir/include/mlir/Conversion/MathToFuncs/MathToFuncs.h @@ -14,6 +14,9 @@ namespace mlir { class Pass; +#define GEN_PASS_DECL_CONVERTMATHTOFUNCS +#include "mlir/Conversion/Passes.h.inc" + // Pass to convert some Math operations into calls of functions // containing software implementation of these operations. std::unique_ptr createConvertMathToFuncsPass(); diff --git a/mlir/include/mlir/Conversion/MathToLLVM/MathToLLVM.h b/mlir/include/mlir/Conversion/MathToLLVM/MathToLLVM.h --- a/mlir/include/mlir/Conversion/MathToLLVM/MathToLLVM.h +++ b/mlir/include/mlir/Conversion/MathToLLVM/MathToLLVM.h @@ -17,6 +17,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTMATHTOLLVM +#include "mlir/Conversion/Passes.h.inc" + void populateMathToLLVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/MathToLibm/MathToLibm.h b/mlir/include/mlir/Conversion/MathToLibm/MathToLibm.h --- a/mlir/include/mlir/Conversion/MathToLibm/MathToLibm.h +++ b/mlir/include/mlir/Conversion/MathToLibm/MathToLibm.h @@ -14,6 +14,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTMATHTOLIBM +#include "mlir/Conversion/Passes.h.inc" + /// Populate the given list with patterns that convert from Math to Libm calls. /// If log1pBenefit is present, use it instead of benefit for the Log1p op. void populateMathToLibmConversionPatterns( diff --git a/mlir/include/mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h b/mlir/include/mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h --- a/mlir/include/mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTMATHTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert Math ops to SPIR-V ops. std::unique_ptr> createConvertMathToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h b/mlir/include/mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h --- a/mlir/include/mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h +++ b/mlir/include/mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h @@ -16,6 +16,9 @@ class LLVMTypeConverter; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTMEMREFTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Collect a set of patterns to convert memory-related operations from the /// MemRef dialect to the LLVM dialect. void populateMemRefToLLVMConversionPatterns(LLVMTypeConverter &converter, diff --git a/mlir/include/mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h b/mlir/include/mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h --- a/mlir/include/mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h @@ -19,6 +19,10 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_MAPMEMREFSTORAGECLASS +#define GEN_PASS_DECL_CONVERTMEMREFTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to map numeric MemRef memory spaces to symbolic SPIR-V /// storage classes. The mapping is read from the command-line option. std::unique_ptr> createMapMemRefStorageClassPass(); diff --git a/mlir/include/mlir/Conversion/NVGPUToNVVM/NVGPUToNVVM.h b/mlir/include/mlir/Conversion/NVGPUToNVVM/NVGPUToNVVM.h --- a/mlir/include/mlir/Conversion/NVGPUToNVVM/NVGPUToNVVM.h +++ b/mlir/include/mlir/Conversion/NVGPUToNVVM/NVGPUToNVVM.h @@ -16,6 +16,9 @@ class RewritePatternSet; class Pass; +#define GEN_PASS_DECL_CONVERTNVGPUTONVVM +#include "mlir/Conversion/Passes.h.inc" + void populateNVGPUToNVVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h b/mlir/include/mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h --- a/mlir/include/mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h +++ b/mlir/include/mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h @@ -18,6 +18,9 @@ class OperationPass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTOPENACCTOLLVM +#include "mlir/Conversion/Passes.h.inc" + static constexpr unsigned kPtrBasePosInDataDescriptor = 0; static constexpr unsigned kPtrPosInDataDescriptor = 1; static constexpr unsigned kSizePosInDataDescriptor = 2; diff --git a/mlir/include/mlir/Conversion/OpenACCToSCF/ConvertOpenACCToSCF.h b/mlir/include/mlir/Conversion/OpenACCToSCF/ConvertOpenACCToSCF.h --- a/mlir/include/mlir/Conversion/OpenACCToSCF/ConvertOpenACCToSCF.h +++ b/mlir/include/mlir/Conversion/OpenACCToSCF/ConvertOpenACCToSCF.h @@ -16,6 +16,9 @@ class OperationPass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTOPENACCTOSCF +#include "mlir/Conversion/Passes.h.inc" + /// Collect the patterns to convert from the OpenACC dialect to OpenACC with /// SCF dialect. void populateOpenACCToSCFConversionPatterns(RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h b/mlir/include/mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h --- a/mlir/include/mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h +++ b/mlir/include/mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h @@ -19,6 +19,9 @@ class OperationPass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTOOPENMPTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Configure dynamic conversion legality of regionless operations from OpenMP /// to LLVM. void configureOpenMPToLLVMConversionLegality(ConversionTarget &target, diff --git a/mlir/include/mlir/Conversion/PDLToPDLInterp/PDLToPDLInterp.h b/mlir/include/mlir/Conversion/PDLToPDLInterp/PDLToPDLInterp.h --- a/mlir/include/mlir/Conversion/PDLToPDLInterp/PDLToPDLInterp.h +++ b/mlir/include/mlir/Conversion/PDLToPDLInterp/PDLToPDLInterp.h @@ -20,6 +20,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTPDLTOPDLINTERP +#include "mlir/Conversion/Passes.h.inc" + /// Creates and returns a pass to convert PDL ops to PDL interpreter ops. std::unique_ptr> createPDLToPDLInterpPass(); diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td --- a/mlir/include/mlir/Conversion/Passes.td +++ b/mlir/include/mlir/Conversion/Passes.td @@ -780,7 +780,6 @@ ]; } - //===----------------------------------------------------------------------===// // TensorToSPIRV //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h b/mlir/include/mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h --- a/mlir/include/mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h +++ b/mlir/include/mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h @@ -15,6 +15,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_RECONCILEUNREALIZEDCASTS +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass that eliminates noop `unrealized_conversion_cast` operation /// sequences. std::unique_ptr createReconcileUnrealizedCastsPass(); diff --git a/mlir/include/mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h b/mlir/include/mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h --- a/mlir/include/mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h +++ b/mlir/include/mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h @@ -15,6 +15,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_SCFTOCONTROLFLOW +#include "mlir/Conversion/Passes.h.inc" + /// Collect a set of patterns to convert SCF operations to CFG branch-based /// operations within the ControlFlow dialect. void populateSCFToControlFlowConversionPatterns(RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Conversion/SCFToGPU/SCFToGPUPass.h b/mlir/include/mlir/Conversion/SCFToGPU/SCFToGPUPass.h --- a/mlir/include/mlir/Conversion/SCFToGPU/SCFToGPUPass.h +++ b/mlir/include/mlir/Conversion/SCFToGPU/SCFToGPUPass.h @@ -18,6 +18,10 @@ class InterfacePass; class Pass; +#define GEN_PASS_DECL_CONVERTAFFINEFORTOGPU +#define GEN_PASS_DECL_CONVERTPARALLELLOOPTOGPU +#include "mlir/Conversion/Passes.h.inc" + /// Create a pass that converts loop nests into GPU kernels. It considers /// top-level affine.for operations as roots of loop nests and converts them to /// the gpu.launch operations if possible. diff --git a/mlir/include/mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h b/mlir/include/mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h --- a/mlir/include/mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h +++ b/mlir/include/mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h @@ -16,6 +16,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTSCFTOOPENMP +#include "mlir/Conversion/Passes.h.inc" + std::unique_ptr> createConvertSCFToOpenMPPass(); } // namespace mlir diff --git a/mlir/include/mlir/Conversion/SCFToSPIRV/SCFToSPIRVPass.h b/mlir/include/mlir/Conversion/SCFToSPIRV/SCFToSPIRVPass.h --- a/mlir/include/mlir/Conversion/SCFToSPIRV/SCFToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/SCFToSPIRV/SCFToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_SCFTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert SCF ops into SPIR-V ops. std::unique_ptr> createConvertSCFToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h b/mlir/include/mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h --- a/mlir/include/mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h +++ b/mlir/include/mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h @@ -20,6 +20,10 @@ template class OperationPass; +#define GEN_PASS_DECL_LOWERHOSTCODETOLLVM +#define GEN_PASS_DECL_CONVERTSPIRVTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to emulate `gpu.launch_func` call in LLVM dialect and lower /// the host module code to LLVM. /// diff --git a/mlir/include/mlir/Conversion/ShapeToStandard/ShapeToStandard.h b/mlir/include/mlir/Conversion/ShapeToStandard/ShapeToStandard.h --- a/mlir/include/mlir/Conversion/ShapeToStandard/ShapeToStandard.h +++ b/mlir/include/mlir/Conversion/ShapeToStandard/ShapeToStandard.h @@ -19,6 +19,10 @@ class OperationPass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTSHAPECONSTRAINTS +#define GEN_PASS_DECL_CONVERTSHAPETOSTANDARD +#include "mlir/Conversion/Passes.h.inc" + void populateShapeToStandardConversionPatterns(RewritePatternSet &patterns); std::unique_ptr> createConvertShapeToStandardPass(); diff --git a/mlir/include/mlir/Conversion/TensorToLinalg/TensorToLinalgPass.h b/mlir/include/mlir/Conversion/TensorToLinalg/TensorToLinalgPass.h --- a/mlir/include/mlir/Conversion/TensorToLinalg/TensorToLinalgPass.h +++ b/mlir/include/mlir/Conversion/TensorToLinalg/TensorToLinalgPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTTENSORTOLINALG +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert Tensor ops to Linalg ops. std::unique_ptr> createConvertTensorToLinalgPass(); diff --git a/mlir/include/mlir/Conversion/TensorToSPIRV/TensorToSPIRVPass.h b/mlir/include/mlir/Conversion/TensorToSPIRV/TensorToSPIRVPass.h --- a/mlir/include/mlir/Conversion/TensorToSPIRV/TensorToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/TensorToSPIRV/TensorToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_CONVERTTENSORTOSPIRV +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert Tensor ops to SPIR-V ops. std::unique_ptr> createConvertTensorToSPIRVPass(); diff --git a/mlir/include/mlir/Conversion/TosaToArith/TosaToArith.h b/mlir/include/mlir/Conversion/TosaToArith/TosaToArith.h --- a/mlir/include/mlir/Conversion/TosaToArith/TosaToArith.h +++ b/mlir/include/mlir/Conversion/TosaToArith/TosaToArith.h @@ -16,6 +16,10 @@ #include "mlir/Pass/Pass.h" namespace mlir { + +#define GEN_PASS_DECL_TOSATOARITH +#include "mlir/Conversion/Passes.h.inc" + namespace tosa { std::unique_ptr createTosaToArith(); diff --git a/mlir/include/mlir/Conversion/TosaToLinalg/TosaToLinalg.h b/mlir/include/mlir/Conversion/TosaToLinalg/TosaToLinalg.h --- a/mlir/include/mlir/Conversion/TosaToLinalg/TosaToLinalg.h +++ b/mlir/include/mlir/Conversion/TosaToLinalg/TosaToLinalg.h @@ -17,6 +17,11 @@ #include "mlir/Pass/Pass.h" namespace mlir { + +#define GEN_PASS_DECL_TOSATOLINALG +#define GEN_PASS_DECL_TOSATOLINALGNAMED +#include "mlir/Conversion/Passes.h.inc" + namespace tosa { std::unique_ptr createTosaToLinalg(); diff --git a/mlir/include/mlir/Conversion/TosaToSCF/TosaToSCF.h b/mlir/include/mlir/Conversion/TosaToSCF/TosaToSCF.h --- a/mlir/include/mlir/Conversion/TosaToSCF/TosaToSCF.h +++ b/mlir/include/mlir/Conversion/TosaToSCF/TosaToSCF.h @@ -16,6 +16,10 @@ #include "mlir/Pass/Pass.h" namespace mlir { + +#define GEN_PASS_DECL_TOSATOSCF +#include "mlir/Conversion/Passes.h.inc" + namespace tosa { std::unique_ptr createTosaToSCF(); diff --git a/mlir/include/mlir/Conversion/TosaToTensor/TosaToTensor.h b/mlir/include/mlir/Conversion/TosaToTensor/TosaToTensor.h --- a/mlir/include/mlir/Conversion/TosaToTensor/TosaToTensor.h +++ b/mlir/include/mlir/Conversion/TosaToTensor/TosaToTensor.h @@ -16,6 +16,10 @@ #include "mlir/Pass/Pass.h" namespace mlir { + +#define GEN_PASS_DECL_TOSATOTENSOR +#include "mlir/Conversion/Passes.h.inc" + namespace tosa { std::unique_ptr createTosaToTensor(); diff --git a/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h b/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h --- a/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h +++ b/mlir/include/mlir/Conversion/VectorToGPU/VectorToGPU.h @@ -16,6 +16,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTVECTORTOGPU +#include "mlir/Conversion/Passes.h.inc" + /// Patterns to transform vector ops into a canonical form to convert to MMA /// matrix operations. If `useNvGpu` is true, then the patterns will populated /// will prepare for conversion to `nvgpu` mma operations rather than the `gpu` diff --git a/mlir/include/mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h b/mlir/include/mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h --- a/mlir/include/mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h +++ b/mlir/include/mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h @@ -16,6 +16,9 @@ template class OperationPass; +#define GEN_PASS_DECL_CONVERTVECTORTOLLVM +#include "mlir/Conversion/Passes.h.inc" + /// Options to control Vector to LLVM lowering. /// /// This should kept in sync with VectorToLLVM options defined for the diff --git a/mlir/include/mlir/Conversion/VectorToSCF/VectorToSCF.h b/mlir/include/mlir/Conversion/VectorToSCF/VectorToSCF.h --- a/mlir/include/mlir/Conversion/VectorToSCF/VectorToSCF.h +++ b/mlir/include/mlir/Conversion/VectorToSCF/VectorToSCF.h @@ -16,6 +16,9 @@ class Pass; class RewritePatternSet; +#define GEN_PASS_DECL_CONVERTVECTORTOSCF +#include "mlir/Conversion/Passes.h.inc" + /// When lowering an N-d vector transfer op to an (N-1)-d vector transfer op, /// a temporary buffer is created through which individual (N-1)-d vector are /// staged. This pattern can be applied multiple time, until the transfer op diff --git a/mlir/include/mlir/Conversion/VectorToSPIRV/VectorToSPIRVPass.h b/mlir/include/mlir/Conversion/VectorToSPIRV/VectorToSPIRVPass.h --- a/mlir/include/mlir/Conversion/VectorToSPIRV/VectorToSPIRVPass.h +++ b/mlir/include/mlir/Conversion/VectorToSPIRV/VectorToSPIRVPass.h @@ -18,6 +18,9 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_VECTORTOSPIRVPASS +#include "mlir/Conversion/Passes.h.inc" + /// Creates a pass to convert Vector Ops to SPIR-V ops. std::unique_ptr> createConvertVectorToSPIRVPass(); diff --git a/mlir/include/mlir/Dialect/Affine/Passes.h b/mlir/include/mlir/Dialect/Affine/Passes.h --- a/mlir/include/mlir/Dialect/Affine/Passes.h +++ b/mlir/include/mlir/Dialect/Affine/Passes.h @@ -28,6 +28,22 @@ /// producer-consumer and sibling fusion. enum FusionMode { Greedy, ProducerConsumer, Sibling }; +#define GEN_PASS_DECL_AFFINEDATACOPYGENERATION +#define GEN_PASS_DECL_AFFINELOOPFUSION +#define GEN_PASS_DECL_AFFINELOOPINVARIANTCODEMOTION +#define GEN_PASS_DECL_AFFINELOOPTILING +#define GEN_PASS_DECL_AFFINELOOPUNROLL +#define GEN_PASS_DECL_AFFINELOOPUNROLLANDJAM +#define GEN_PASS_DECL_AFFINEPIPELINEDATATRANSFER +#define GEN_PASS_DECL_AFFINESCALARREPLACEMENT +#define GEN_PASS_DECL_AFFINEVECTORIZE +#define GEN_PASS_DECL_AFFINEPARALLELIZE +#define GEN_PASS_DECL_AFFINELOOPNORMALIZE +#define GEN_PASS_DECL_LOOPCOALESCING +#define GEN_PASS_DECL_SIMPLIFYAFFINESTRUCTURES +#define GEN_PASS_DECL_AFFINEEXPANDINDEXOPS +#include "mlir/Dialect/Affine/Passes.h.inc" + /// Creates a simplification pass for affine structures (maps and sets). In /// addition, this pass also normalizes memrefs to have the trivial (identity) /// layout map. diff --git a/mlir/include/mlir/Dialect/Arithmetic/Transforms/Passes.h b/mlir/include/mlir/Dialect/Arithmetic/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Arithmetic/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Arithmetic/Transforms/Passes.h @@ -14,6 +14,11 @@ namespace mlir { namespace arith { +#define GEN_PASS_DECL_ARITHMETICBUFFERIZE +#define GEN_PASS_DECL_ARITHMETICEXPANDOPS +#define GEN_PASS_DECL_ARITHMETICUNSIGNEDWHENEQUIVALENT +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h.inc" + /// Create a pass to bufferize Arithmetic ops. std::unique_ptr createArithmeticBufferizePass(); diff --git a/mlir/include/mlir/Dialect/Async/Passes.h b/mlir/include/mlir/Dialect/Async/Passes.h --- a/mlir/include/mlir/Dialect/Async/Passes.h +++ b/mlir/include/mlir/Dialect/Async/Passes.h @@ -18,6 +18,13 @@ namespace mlir { class ModuleOp; +#define GEN_PASS_DECL_ASYNCPARALLELFOR +#define GEN_PASS_DECL_ASYNCTOASYNCRUNTIME +#define GEN_PASS_DECL_ASYNCRUNTIMEREFCOUNTING +#define GEN_PASS_DECL_ASYNCRUNTIMEREFCOUNTINGOPT +#define GEN_PASS_DECL_ASYNCRUNTIMEPOLICYBASEDREFCOUNTING +#include "mlir/Dialect/Async/Passes.h.inc" + std::unique_ptr createAsyncParallelForPass(); std::unique_ptr createAsyncParallelForPass(bool asyncDispatch, diff --git a/mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h b/mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Bufferization/Transforms/Passes.h @@ -17,6 +17,19 @@ // Passes //===----------------------------------------------------------------------===// +#define GEN_PASS_DECL_BUFFERDEALLOCATION +#define GEN_PASS_DECL_BUFFERHOISTING +#define GEN_PASS_DECL_BUFFERLOOPHOISTING +#define GEN_PASS_DECL_BUFFERRESULTSTOOUTPARAMS +#define GEN_PASS_DECL_FINALIZINGBUFFERIZE +#define GEN_PASS_DECL_BUFFERIZATIONBUFFERIZE +#define GEN_PASS_DECL_DROPEQUIVALENTBUFFERRESULTS +#define GEN_PASS_DECL_ONESHOTBUFFERIZE +#define GEN_PASS_DECL_PROMOTEBUFFERSTOSTACK +#define GEN_PASS_DECL_TENSORCOPYINSERTION +#define GEN_PASS_DECL_ALLOCTENSORELIMINATION +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" + /// Creates an instance of the BufferDeallocation pass to free all allocated /// buffers. std::unique_ptr createBufferDeallocationPass(); diff --git a/mlir/include/mlir/Dialect/Func/Transforms/Passes.h b/mlir/include/mlir/Dialect/Func/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Func/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Func/Transforms/Passes.h @@ -25,6 +25,10 @@ class RewritePatternSet; namespace func { + +#define GEN_PASS_DECL_FUNCBUFFERIZE +#include "mlir/Dialect/Func/Transforms/Passes.h.inc" + /// Creates an instance of func bufferization pass. std::unique_ptr createFuncBufferizePass(); diff --git a/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h b/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h @@ -27,6 +27,12 @@ class FuncOp; } // namespace func +#define GEN_PASS_DECL_GPULAUNCHSINKINDEXCOMPUTATIONS +#define GEN_PASS_DECL_GPUKERNELOUTLINING +#define GEN_PASS_DECL_GPUASYNCREGION +#define GEN_PASS_DECL_GPUMAPPARALLELLOOPS +#include "mlir/Dialect/GPU/Transforms/Passes.h.inc" + /// Pass that moves ops which are likely an index computation into gpu.launch /// body. std::unique_ptr createGpuLauchSinkIndexComputationsPass(); diff --git a/mlir/include/mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h b/mlir/include/mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h --- a/mlir/include/mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h +++ b/mlir/include/mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h @@ -17,6 +17,9 @@ namespace LLVM { +#define GEN_PASS_DECL_LLVMLEGALIZEFOREXPORT +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" + /// Make argument-taking successors of each block distinct. PHI nodes in LLVM /// IR use the predecessor ID to identify which value to take. They do not /// support different values coming from the same predecessor. If a block has diff --git a/mlir/include/mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h b/mlir/include/mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h --- a/mlir/include/mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h +++ b/mlir/include/mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h @@ -16,6 +16,9 @@ namespace NVVM { +#define GEN_PASS_DECL_NVVMOPTIMIZEFORTARGET +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" + /// Creates a pass that optimizes LLVM IR for the NVVM target. std::unique_ptr createOptimizeForTargetPass(); diff --git a/mlir/include/mlir/Dialect/LLVMIR/Transforms/RequestCWrappers.h b/mlir/include/mlir/Dialect/LLVMIR/Transforms/RequestCWrappers.h --- a/mlir/include/mlir/Dialect/LLVMIR/Transforms/RequestCWrappers.h +++ b/mlir/include/mlir/Dialect/LLVMIR/Transforms/RequestCWrappers.h @@ -15,6 +15,10 @@ class Pass; namespace LLVM { + +#define GEN_PASS_DECL_LLVMREQUESTCWRAPPERS +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" + std::unique_ptr createRequestCWrappersPass(); } // namespace LLVM } // namespace mlir diff --git a/mlir/include/mlir/Dialect/Linalg/Passes.h b/mlir/include/mlir/Dialect/Linalg/Passes.h --- a/mlir/include/mlir/Dialect/Linalg/Passes.h +++ b/mlir/include/mlir/Dialect/Linalg/Passes.h @@ -26,6 +26,30 @@ struct OneShotBufferizationOptions; } // namespace bufferization +#define GEN_PASS_DECL_CONVERTELEMENTWISETOLINALG +#define GEN_PASS_DECL_LINALGINITTENSORTOALLOCTENSOR +#define GEN_PASS_DECL_LINALGFOLDUNITEXTENTDIMS +#define GEN_PASS_DECL_LINALGELEMENTWISEOPFUSION +#define GEN_PASS_DECL_LINALGNAMEDOPCONVERSION +#define GEN_PASS_DECL_LINALGINLINESCALAROPERANDS +#define GEN_PASS_DECL_LINALGLOWERTOAFFINELOOPS +#define GEN_PASS_DECL_LINALGLOWERTOLOOPSPASS +#define GEN_PASS_DECL_LINALGLOWERTOPARALLELLOOPS +#define GEN_PASS_DECL_LINALGBUFFERIZE +#define GEN_PASS_DECL_LINALGTILINGPASS +#define GEN_PASS_DECL_LINALGGENERALIZATION +#define GEN_PASS_DECL_LINALGDETENSORIZE +#define GEN_PASS_DECL_LINALGSTRATEGYTILEANDFUSEPASS +#define GEN_PASS_DECL_LINALGSTRATEGYTILEPASS +#define GEN_PASS_DECL_LINALGSTRATEGYPADPASS +#define GEN_PASS_DECL_LINALGSTRATEGYDECOMPOSEPASS +#define GEN_PASS_DECL_LINALGSTRATEGYPEELPASS +#define GEN_PASS_DECL_LINALGSTRATEGYVECTORIZEPASS +#define GEN_PASS_DECL_LINALGSTRATEGYENABLEPASS +#define GEN_PASS_DECL_LINALGSTRATEGYLOWERVECTORSPASS +#define GEN_PASS_DECL_LINALGSTRATEGYREMOVEMARKERSPASS +#include "mlir/Dialect/Linalg/Passes.h.inc" + std::unique_ptr createConvertElementwiseToLinalgPass(); std::unique_ptr createLinalgFoldUnitExtentDimsPass(); diff --git a/mlir/include/mlir/Dialect/Linalg/Passes.td b/mlir/include/mlir/Dialect/Linalg/Passes.td --- a/mlir/include/mlir/Dialect/Linalg/Passes.td +++ b/mlir/include/mlir/Dialect/Linalg/Passes.td @@ -112,7 +112,7 @@ ]; } -def LinalgTiling : Pass<"linalg-tile", "func::FuncOp"> { +def LinalgTilingPass : Pass<"linalg-tile", "func::FuncOp"> { let summary = "Tile operations in the linalg dialect"; let constructor = "mlir::createLinalgTilingPass()"; let dependentDialects = [ diff --git a/mlir/include/mlir/Dialect/MemRef/Transforms/Passes.h b/mlir/include/mlir/Dialect/MemRef/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/MemRef/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/MemRef/Transforms/Passes.h @@ -86,6 +86,13 @@ // Passes //===----------------------------------------------------------------------===// +#define GEN_PASS_DECL_EXPANDOPS +#define GEN_PASS_DECL_FOLDMEMREFALIASOPS +#define GEN_PASS_DECL_NORMALIZEMEMREFS +#define GEN_PASS_DECL_RESOLVERANKEDSHAPETYPERESULTDIMS +#define GEN_PASS_DECL_RESOLVESHAPEDTYPERESULTDIMS +#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" + /// Creates an instance of the ExpandOps pass that legalizes memref dialect ops /// to be convertible to LLVM. For example, `memref.reshape` gets converted to /// `memref_reinterpret_cast`. diff --git a/mlir/include/mlir/Dialect/NVGPU/Passes.h b/mlir/include/mlir/Dialect/NVGPU/Passes.h --- a/mlir/include/mlir/Dialect/NVGPU/Passes.h +++ b/mlir/include/mlir/Dialect/NVGPU/Passes.h @@ -17,6 +17,9 @@ namespace mlir { namespace nvgpu { +#define GEN_PASS_DECL_OPTIMIZESHAREDMEMORY +#include "mlir/Dialect/NVGPU/Passes.h.inc" + /// Create a pass to optimize shared memory reads and writes. std::unique_ptr createOptimizeSharedMemoryPass(); diff --git a/mlir/include/mlir/Dialect/SCF/Transforms/Passes.h b/mlir/include/mlir/Dialect/SCF/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/SCF/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/SCF/Transforms/Passes.h @@ -17,6 +17,18 @@ namespace mlir { +#define GEN_PASS_DECL_SCFBUFFERIZE +#define GEN_PASS_DECL_SCFFORLOOPCANONICALIZATION +#define GEN_PASS_DECL_SCFFORLOOPPEELING +#define GEN_PASS_DECL_SCFFORLOOPSPECIALIZATION +#define GEN_PASS_DECL_SCFPARALLELLOOPFUSION +#define GEN_PASS_DECL_SCFPARALLELLOOPCOLLAPSING +#define GEN_PASS_DECL_SCFPARALLELLOOPSPECIALIZATION +#define GEN_PASS_DECL_SCFPARALLELLOOPTILING +#define GEN_PASS_DECL_SCFFORLOOPRANGEFOLDING +#define GEN_PASS_DECL_SCFFORTOWHILELOOP +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" + /// Creates a pass that bufferizes the SCF dialect. std::unique_ptr createSCFBufferizePass(); diff --git a/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.h b/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.h @@ -27,6 +27,14 @@ // Passes //===----------------------------------------------------------------------===// +#define GEN_PASS_DECL_SPIRVCOMPOSITETYPELAYOUT +#define GEN_PASS_DECL_SPIRVCANONICALIZEGL +#define GEN_PASS_DECL_SPIRVLOWERABIATTRIBUTES +#define GEN_PASS_DECL_SPIRVREWRITEINSERTSPASS +#define GEN_PASS_DECL_SPIRVUNIFYALIASEDRESOURCEPASS +#define GEN_PASS_DECL_SPIRVUPDATEVCE +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" + /// Creates a pass to run canoncalization patterns that involve GL ops. /// These patterns cannot be run in default canonicalization because GL ops /// aren't always available. So they should be involed specifically when needed. diff --git a/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.td b/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.td --- a/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.td +++ b/mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.td @@ -12,7 +12,7 @@ include "mlir/Pass/PassBase.td" def SPIRVCompositeTypeLayout - : Pass<"decorate-spirv-composite-type-layout", "ModuleOp"> { + : Pass<"decorate-spirv-composite-type-layout", "mlir::ModuleOp"> { let summary = "Decorate SPIR-V composite type with layout info"; let constructor = "mlir::spirv::createDecorateSPIRVCompositeTypeLayoutPass()"; } diff --git a/mlir/include/mlir/Dialect/Shape/Transforms/Passes.h b/mlir/include/mlir/Dialect/Shape/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Shape/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Shape/Transforms/Passes.h @@ -25,6 +25,12 @@ } // namespace mlir namespace mlir { + +#define GEN_PASS_DECL_SHAPETOSHAPELOWERING +#define GEN_PASS_DECL_REMOVESHAPECONSTRAINTS +#define GEN_PASS_DECL_SHAPEBUFFERIZE +#include "mlir/Dialect/Shape/Transforms/Passes.h.inc" + /// Creates an instance of the ShapeToShapeLowering pass that legalizes Shape /// dialect to be convertible to Arithmetic. For example, `shape.num_elements` /// get transformed to `shape.reduce`, which can be lowered to SCF and diff --git a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h @@ -26,6 +26,11 @@ struct OneShotBufferizationOptions; } // namespace bufferization +#define GEN_PASS_DECL_SPARSIFICATIONPASS +#define GEN_PASS_DECL_SPARSETENSORCONVERSIONPASS +#define GEN_PASS_DECL_SPARSETENSORCODEGEN +#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc" + //===----------------------------------------------------------------------===// // The Sparsification pass. //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.td b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.td --- a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.td +++ b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.td @@ -11,7 +11,7 @@ include "mlir/Pass/PassBase.td" -def Sparsification : Pass<"sparsification", "ModuleOp"> { +def SparsificationPass : Pass<"sparsification", "ModuleOp"> { let summary = "Automatically generate sparse tensor code from sparse tensor types"; let description = [{ A pass that implements the core functionality of a **sparse compiler**. @@ -76,7 +76,7 @@ ]; } -def SparseTensorConversion : Pass<"sparse-tensor-conversion", "ModuleOp"> { +def SparseTensorConversionPass : Pass<"sparse-tensor-conversion", "ModuleOp"> { let summary = "Convert sparse tensors and primitives to library calls"; let description = [{ A pass that converts sparse tensor primitives into calls into a runtime diff --git a/mlir/include/mlir/Dialect/Tensor/Transforms/Passes.h b/mlir/include/mlir/Dialect/Tensor/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Tensor/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Tensor/Transforms/Passes.h @@ -12,6 +12,10 @@ #include "mlir/Pass/Pass.h" namespace mlir { + +#define GEN_PASS_DECL_TENSORBUFFERIZE +#include "mlir/Dialect/Tensor/Transforms/Passes.h.inc" + /// Creates an instance of `tensor` dialect bufferization pass. std::unique_ptr createTensorBufferizePass(); diff --git a/mlir/include/mlir/Dialect/Tosa/Transforms/PassDetail.h b/mlir/include/mlir/Dialect/Tosa/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/include/mlir/Dialect/Tosa/Transforms/PassDetail.h +++ /dev/null @@ -1,24 +0,0 @@ -//===- PassDetail.h - TOSA 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 MLIR_DIALECT_TOSA_TRANSFORMS_PASSDETAIL_H -#define MLIR_DIALECT_TOSA_TRANSFORMS_PASSDETAIL_H - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // MLIR_DIALECT_TOSA_TRANSFORMS_PASSDETAIL_H diff --git a/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h b/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h @@ -19,6 +19,12 @@ namespace mlir { namespace tosa { +#define GEN_PASS_DECL_TOSALAYERWISECONSTANTFOLD +#define GEN_PASS_DECL_TOSAINFERSHAPES +#define GEN_PASS_DECL_TOSAMAKEBROADCASTABLE +#define GEN_PASS_DECL_TOSAOPTIONALDECOMPOSITIONS +#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" + // Expose Rewrite Functions that decompose TOSA Ops into further TOSA Ops. // The rewrites can be selectively added to a conversion pass. void populateTosaDecomposeConv2D(MLIRContext *ctx, RewritePatternSet &patterns); diff --git a/mlir/include/mlir/Dialect/Transform/Transforms/Passes.h b/mlir/include/mlir/Dialect/Transform/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Transform/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Transform/Transforms/Passes.h @@ -16,6 +16,9 @@ class Pass; namespace transform { +#define GEN_PASS_DECL_CHECKUSES +#include "mlir/Dialect/Transform/Transforms/Passes.h.inc" + std::unique_ptr createCheckUsesPass(); #define GEN_PASS_REGISTRATION diff --git a/mlir/include/mlir/Dialect/Vector/Transforms/Passes.h b/mlir/include/mlir/Dialect/Vector/Transforms/Passes.h --- a/mlir/include/mlir/Dialect/Vector/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Vector/Transforms/Passes.h @@ -13,6 +13,9 @@ namespace mlir { namespace vector { +#define GEN_PASS_DECL_VECTORBUFFERIZE +#include "mlir/Dialect/Vector/Transforms/Passes.h.inc" + /// Creates an instance of the `vector` dialect bufferization pass. std::unique_ptr createVectorBufferizePass(); diff --git a/mlir/include/mlir/Reducer/PassDetail.h b/mlir/include/mlir/Reducer/PassDetail.h deleted file mode 100644 --- a/mlir/include/mlir/Reducer/PassDetail.h +++ /dev/null @@ -1,22 +0,0 @@ -//===- PassDetail.h - Reducer 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 MLIR_REDUCER_PASSDETAIL_H -#define MLIR_REDUCER_PASSDETAIL_H - -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -#define GEN_PASS_CLASSES -#include "mlir/Reducer/Passes.h.inc" - -} // namespace mlir - -#endif // MLIR_REDUCER_PASSDETAIL_H diff --git a/mlir/include/mlir/Reducer/Passes.h b/mlir/include/mlir/Reducer/Passes.h --- a/mlir/include/mlir/Reducer/Passes.h +++ b/mlir/include/mlir/Reducer/Passes.h @@ -12,6 +12,10 @@ namespace mlir { +#define GEN_PASS_DECL_REDUCTIONTREE +#define GEN_PASS_DECL_OPTREDUCTION +#include "mlir/Reducer/Passes.h.inc" + std::unique_ptr createReductionTreePass(); std::unique_ptr createOptReductionPass(); diff --git a/mlir/include/mlir/Transforms/LocationSnapshot.h b/mlir/include/mlir/Transforms/LocationSnapshot.h --- a/mlir/include/mlir/Transforms/LocationSnapshot.h +++ b/mlir/include/mlir/Transforms/LocationSnapshot.h @@ -26,6 +26,9 @@ class OpPrintingFlags; class Pass; +#define GEN_PASS_DECL_LOCATIONSNAPSHOT +#include "mlir/Transforms/Passes.h.inc" + /// This function generates new locations from the given IR by snapshotting the /// IR to the given stream, and using the printed locations within that stream. /// The generated locations replace the current operation locations. diff --git a/mlir/include/mlir/Transforms/Passes.h b/mlir/include/mlir/Transforms/Passes.h --- a/mlir/include/mlir/Transforms/Passes.h +++ b/mlir/include/mlir/Transforms/Passes.h @@ -28,6 +28,19 @@ // Passes //===----------------------------------------------------------------------===// +#define GEN_PASS_DECL_CANONICALIZER +#define GEN_PASS_DECL_CONTROLFLOWSINK +#define GEN_PASS_DECL_CSEPASS +#define GEN_PASS_DECL_LOOPINVARIANTCODEMOTION +#define GEN_PASS_DECL_STRIPDEBUGINFO +#define GEN_PASS_DECL_PRINTOPSTATS +#define GEN_PASS_DECL_INLINER +#define GEN_PASS_DECL_SCCP +#define GEN_PASS_DECL_SYMBOLDCE +#define GEN_PASS_DECL_SYMBOLPRIVATIZE +#define GEN_PASS_DECL_TOPOLOGICALSORT +#include "mlir/Transforms/Passes.h.inc" + /// Creates an instance of the Canonicalizer pass, configured with default /// settings (which can be overridden by pass options on the command line). std::unique_ptr createCanonicalizerPass(); diff --git a/mlir/include/mlir/Transforms/ViewOpGraph.h b/mlir/include/mlir/Transforms/ViewOpGraph.h --- a/mlir/include/mlir/Transforms/ViewOpGraph.h +++ b/mlir/include/mlir/Transforms/ViewOpGraph.h @@ -19,6 +19,9 @@ namespace mlir { class Pass; +#define GEN_PASS_DECL_VIEWOPGRAPH +#include "mlir/Transforms/Passes.h.inc" + /// Creates a pass to print op graphs. std::unique_ptr createPrintOpGraphPass(raw_ostream &os = llvm::errs()); diff --git a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp --- a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp +++ b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp @@ -7,11 +7,17 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Dialect/AMDGPU/AMDGPUDialect.h" #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTAMDGPUTOROCDL +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::amdgpu; @@ -269,7 +275,7 @@ }; struct ConvertAMDGPUToROCDLPass - : public ConvertAMDGPUToROCDLBase { + : public impl::ConvertAMDGPUToROCDLBase { ConvertAMDGPUToROCDLPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp --- a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp +++ b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp @@ -13,7 +13,6 @@ #include "mlir/Conversion/AffineToStandard/AffineToStandard.h" -#include "../PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" @@ -22,10 +21,14 @@ #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/IntegerSet.h" #include "mlir/IR/MLIRContext.h" -#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTAFFINETOSTANDARD +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::vector; @@ -544,7 +547,8 @@ } namespace { -class LowerAffinePass : public ConvertAffineToStandardBase { +class LowerAffinePass + : public impl::ConvertAffineToStandardBase { void runOnOperation() override { RewritePatternSet patterns(&getContext()); populateAffineToStdConversionPatterns(patterns); diff --git a/mlir/lib/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.cpp b/mlir/lib/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.cpp --- a/mlir/lib/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.cpp +++ b/mlir/lib/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.cpp @@ -7,12 +7,18 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/VectorPattern.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/TypeUtilities.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTARITHMETICTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -315,7 +321,7 @@ namespace { struct ConvertArithmeticToLLVMPass - : public ConvertArithmeticToLLVMBase { + : public impl::ConvertArithmeticToLLVMBase { ConvertArithmeticToLLVMPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.cpp b/mlir/lib/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.cpp --- a/mlir/lib/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.cpp +++ b/mlir/lib/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h" -#include "../PassDetail.h" + #include "../SPIRVCommon/Pattern.h" #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" @@ -20,6 +20,11 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTARITHMETICTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "arith-to-spirv-pattern" using namespace mlir; @@ -855,8 +860,8 @@ ConversionPatternRewriter &rewriter) const { Type dstElemTy = adaptor.getLhs().getType(); Location loc = op->getLoc(); - Value result = rewriter.create( - loc, adaptor.getLhs(), adaptor.getRhs()); + Value result = rewriter.create(loc, adaptor.getLhs(), + adaptor.getRhs()); Value sumResult = rewriter.create( loc, result, llvm::makeArrayRef(0)); @@ -948,7 +953,7 @@ namespace { struct ConvertArithmeticToSPIRVPass - : public ConvertArithmeticToSPIRVBase { + : public impl::ConvertArithmeticToSPIRVBase { void runOnOperation() override { Operation *op = getOperation(); auto targetAttr = spirv::lookupTargetEnvOrDefault(op); diff --git a/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp b/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp --- a/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp +++ b/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h" -#include "../PassDetail.h" + #include "mlir/Dialect/ArmNeon/ArmNeonDialect.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/PatternMatch.h" @@ -15,6 +15,11 @@ #include "mlir/Pass/PassRegistry.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTARMNEON2DTOINTR +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::arm_neon; @@ -47,7 +52,7 @@ }; class ConvertArmNeon2dToIntr - : public ConvertArmNeon2dToIntrBase { + : public impl::ConvertArmNeon2dToIntrBase { void runOnOperation() override { auto *context = &getContext(); diff --git a/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp b/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp --- a/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp +++ b/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h" -#include "../PassDetail.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/TypeConverter.h" @@ -24,6 +23,11 @@ #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTASYNCTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "convert-async-to-llvm" using namespace mlir; @@ -986,7 +990,7 @@ namespace { struct ConvertAsyncToLLVMPass - : public ConvertAsyncToLLVMBase { + : public impl::ConvertAsyncToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/BufferizationToMemRef/BufferizationToMemRef.cpp b/mlir/lib/Conversion/BufferizationToMemRef/BufferizationToMemRef.cpp --- a/mlir/lib/Conversion/BufferizationToMemRef/BufferizationToMemRef.cpp +++ b/mlir/lib/Conversion/BufferizationToMemRef/BufferizationToMemRef.cpp @@ -12,14 +12,20 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/BufferizationToMemRef/BufferizationToMemRef.h" -#include "../PassDetail.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/BuiltinTypes.h" +#include "mlir/Pass/Pass.h" #include "mlir/Support/LogicalResult.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTBUFFERIZATIONTOMEMREF +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -82,7 +88,7 @@ namespace { struct BufferizationToMemRefPass - : public ConvertBufferizationToMemRefBase { + : public impl::ConvertBufferizationToMemRefBase { BufferizationToMemRefPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp --- a/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp +++ b/mlir/lib/Conversion/ComplexToLLVM/ComplexToLLVM.cpp @@ -8,12 +8,17 @@ #include "mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h" -#include "../PassDetail.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Complex/IR/Complex.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTCOMPLEXTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::LLVM; @@ -318,7 +323,7 @@ namespace { struct ConvertComplexToLLVMPass - : public ConvertComplexToLLVMBase { + : public impl::ConvertComplexToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp b/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp --- a/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp +++ b/mlir/lib/Conversion/ComplexToLibm/ComplexToLibm.cpp @@ -8,10 +8,15 @@ #include "mlir/Conversion/ComplexToLibm/ComplexToLibm.h" -#include "../PassDetail.h" #include "mlir/Dialect/Complex/IR/Complex.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTCOMPLEXTOLIBM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -117,7 +122,7 @@ namespace { struct ConvertComplexToLibmPass - : public ConvertComplexToLibmBase { + : public impl::ConvertComplexToLibmBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/ComplexToStandard/ComplexToStandard.cpp b/mlir/lib/Conversion/ComplexToStandard/ComplexToStandard.cpp --- a/mlir/lib/Conversion/ComplexToStandard/ComplexToStandard.cpp +++ b/mlir/lib/Conversion/ComplexToStandard/ComplexToStandard.cpp @@ -8,16 +8,20 @@ #include "mlir/Conversion/ComplexToStandard/ComplexToStandard.h" -#include -#include - -#include "../PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Complex/IR/Complex.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +#include +#include + +namespace mlir { +#define GEN_PASS_DEF_CONVERTCOMPLEXTOSTANDARD +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -1081,7 +1085,7 @@ namespace { struct ConvertComplexToStandardPass - : public ConvertComplexToStandardBase { + : public impl::ConvertComplexToStandardBase { void runOnOperation() override; }; diff --git a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp --- a/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp +++ b/mlir/lib/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Conversion/LLVMCommon/VectorPattern.h" @@ -21,10 +21,16 @@ #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/StringRef.h" #include +namespace mlir { +#define GEN_PASS_DEF_CONVERTCONTROLFLOWTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; #define PASS_NAME "convert-cf-to-llvm" @@ -196,7 +202,7 @@ namespace { /// A pass converting MLIR operations into the LLVM IR dialect. struct ConvertControlFlowToLLVM - : public ConvertControlFlowToLLVMBase { + : public impl::ConvertControlFlowToLLVMBase { ConvertControlFlowToLLVM() = default; /// Run the dialect converter on the module. diff --git a/mlir/lib/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.cpp b/mlir/lib/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.cpp --- a/mlir/lib/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.cpp +++ b/mlir/lib/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.cpp @@ -11,17 +11,23 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTCONTROLFLOWTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A pass converting MLIR ControlFlow operations into the SPIR-V dialect. class ConvertControlFlowToSPIRVPass - : public ConvertControlFlowToSPIRVBase { + : public impl::ConvertControlFlowToSPIRVBase< + ConvertControlFlowToSPIRVPass> { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp --- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp +++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp @@ -11,12 +11,12 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" +#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h" + #include "mlir/Analysis/DataLayoutAnalysis.h" #include "mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h" #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" -#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Conversion/LLVMCommon/VectorPattern.h" @@ -47,6 +47,11 @@ #include #include +namespace mlir { +#define GEN_PASS_DEF_CONVERTFUNCTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; #define PASS_NAME "convert-func-to-llvm" @@ -699,7 +704,7 @@ namespace { /// A pass converting Func operations into the LLVM IR dialect. struct ConvertFuncToLLVMPass - : public ConvertFuncToLLVMBase { + : public impl::ConvertFuncToLLVMBase { ConvertFuncToLLVMPass() = default; ConvertFuncToLLVMPass(bool useBarePtrCallConv, unsigned indexBitwidth, bool useAlignedAlloc, diff --git a/mlir/lib/Conversion/FuncToSPIRV/FuncToSPIRVPass.cpp b/mlir/lib/Conversion/FuncToSPIRV/FuncToSPIRVPass.cpp --- a/mlir/lib/Conversion/FuncToSPIRV/FuncToSPIRVPass.cpp +++ b/mlir/lib/Conversion/FuncToSPIRV/FuncToSPIRVPass.cpp @@ -11,17 +11,22 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTFUNCTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A pass converting MLIR Func operations into the SPIR-V dialect. class ConvertFuncToSPIRVPass - : public ConvertFuncToSPIRVBase { + : public impl::ConvertFuncToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp --- a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp +++ b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp @@ -15,7 +15,6 @@ #include "mlir/Conversion/GPUCommon/GPUCommonPass.h" -#include "../PassDetail.h" #include "mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h" #include "mlir/Conversion/AsyncToLLVM/AsyncToLLVM.h" #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h" @@ -38,6 +37,11 @@ #include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" +namespace mlir { +#define GEN_PASS_DEF_GPUTOLLVMCONVERSIONPASS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; static constexpr const char *kGpuBinaryStorageSuffix = "_gpubin_cst"; @@ -45,7 +49,7 @@ namespace { class GpuToLLVMConversionPass - : public GpuToLLVMConversionPassBase { + : public impl::GpuToLLVMConversionPassBase { public: GpuToLLVMConversionPass() = default; diff --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp --- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp +++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp @@ -36,7 +36,11 @@ #include "../GPUCommon/GPUOpsLowering.h" #include "../GPUCommon/IndexIntrinsicsOpLowering.h" #include "../GPUCommon/OpToFuncCallLowering.h" -#include "../PassDetail.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTGPUOPSTONVVMOPS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -152,7 +156,7 @@ /// This pass only handles device code and is not meant to be run on GPU host /// code. struct LowerGpuOpsToNVVMOpsPass - : public ConvertGpuOpsToNVVMOpsBase { + : public impl::ConvertGpuOpsToNVVMOpsBase { LowerGpuOpsToNVVMOpsPass() = default; LowerGpuOpsToNVVMOpsPass(unsigned indexBitwidth) { this->indexBitwidth = indexBitwidth; diff --git a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp --- a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp +++ b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp @@ -37,7 +37,11 @@ #include "../GPUCommon/GPUOpsLowering.h" #include "../GPUCommon/IndexIntrinsicsOpLowering.h" #include "../GPUCommon/OpToFuncCallLowering.h" -#include "../PassDetail.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTGPUOPSTOROCDLOPS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -62,7 +66,7 @@ // This pass only handles device code and is not meant to be run on GPU host // code. struct LowerGpuOpsToROCDLOpsPass - : public ConvertGpuOpsToROCDLOpsBase { + : public impl::ConvertGpuOpsToROCDLOpsBase { LowerGpuOpsToROCDLOpsPass() = default; LowerGpuOpsToROCDLOpsPass(const std::string &chipset, unsigned indexBitwidth, bool useBarePtrCallConv, diff --git a/mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRVPass.cpp b/mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRVPass.cpp --- a/mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRVPass.cpp +++ b/mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRVPass.cpp @@ -13,7 +13,6 @@ #include "mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h" -#include "../PassDetail.h" #include "mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h" #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h" #include "mlir/Conversion/GPUToSPIRV/GPUToSPIRV.h" @@ -23,6 +22,11 @@ #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTGPUTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -35,7 +39,7 @@ /// replace it). /// /// 2) Lower the body of the spirv::ModuleOp. -class GPUToSPIRVPass : public ConvertGPUToSPIRVBase { +class GPUToSPIRVPass : public impl::ConvertGPUToSPIRVBase { public: explicit GPUToSPIRVPass(bool mapMemorySpace) : mapMemorySpace(mapMemorySpace) {} diff --git a/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp b/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp --- a/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp +++ b/mlir/lib/Conversion/GPUToVulkan/ConvertGPULaunchFuncToVulkanLaunchFunc.cpp @@ -13,8 +13,8 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h" + #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" @@ -23,8 +23,14 @@ #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/BuiltinTypes.h" +#include "mlir/Pass/Pass.h" #include "mlir/Target/SPIRV/Serialization.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTGPULAUNCHFUNCTOVULKANLAUNCHFUNC +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; static constexpr const char *kSPIRVBlobAttrName = "spirv_blob"; @@ -38,7 +44,7 @@ /// function and attaching binary data and entry point name as an attributes to /// created vulkan launch call op. class ConvertGpuLaunchFuncToVulkanLaunchFunc - : public ConvertGpuLaunchFuncToVulkanLaunchFuncBase< + : public impl::ConvertGpuLaunchFuncToVulkanLaunchFuncBase< ConvertGpuLaunchFuncToVulkanLaunchFunc> { public: void runOnOperation() override; diff --git a/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp b/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp --- a/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp +++ b/mlir/lib/Conversion/GPUToVulkan/ConvertLaunchFuncToVulkanCalls.cpp @@ -14,16 +14,21 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h" + #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/Attributes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinOps.h" - +#include "mlir/Pass/Pass.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/FormatVariadic.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTVULKANLAUNCHFUNCTOVULKANCALLS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; static constexpr const char *kCInterfaceVulkanLaunch = @@ -53,7 +58,7 @@ /// * deinitVulkan -- deinitializes vulkan runtime /// class VulkanLaunchFuncToVulkanCallsPass - : public ConvertVulkanLaunchFuncToVulkanCallsBase< + : public impl::ConvertVulkanLaunchFuncToVulkanCallsBase< VulkanLaunchFuncToVulkanCallsPass> { private: void initializeCachedTypes() { diff --git a/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp b/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp --- a/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp +++ b/mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h" -#include "../PassDetail.h" #include "mlir/Conversion/AffineToStandard/AffineToStandard.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" @@ -41,6 +40,11 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/ErrorHandling.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTLINALGTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::LLVM; using namespace mlir::linalg; @@ -74,7 +78,7 @@ namespace { struct ConvertLinalgToLLVMPass - : public ConvertLinalgToLLVMBase { + : public impl::ConvertLinalgToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp b/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp --- a/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp +++ b/mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp @@ -7,17 +7,24 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LinalgToSPIRV/LinalgToSPIRV.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTLINALGTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; namespace { /// A pass converting MLIR Linalg ops into SPIR-V ops. -class LinalgToSPIRVPass : public ConvertLinalgToSPIRVBase { +class LinalgToSPIRVPass + : public impl::ConvertLinalgToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/LinalgToStandard/LinalgToStandard.cpp b/mlir/lib/Conversion/LinalgToStandard/LinalgToStandard.cpp --- a/mlir/lib/Conversion/LinalgToStandard/LinalgToStandard.cpp +++ b/mlir/lib/Conversion/LinalgToStandard/LinalgToStandard.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/LinalgToStandard/LinalgToStandard.h" -#include "../PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -16,6 +15,12 @@ #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTLINALGTOSTANDARD +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::linalg; @@ -121,7 +126,7 @@ namespace { struct ConvertLinalgToStandardPass - : public ConvertLinalgToStandardBase { + : public impl::ConvertLinalgToStandardBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/MathToFuncs/MathToFuncs.cpp b/mlir/lib/Conversion/MathToFuncs/MathToFuncs.cpp --- a/mlir/lib/Conversion/MathToFuncs/MathToFuncs.cpp +++ b/mlir/lib/Conversion/MathToFuncs/MathToFuncs.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/MathToFuncs/MathToFuncs.h" -#include "../PassDetail.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" @@ -18,10 +18,16 @@ #include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/TypeUtilities.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTMATHTOFUNCS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -318,7 +324,7 @@ namespace { struct ConvertMathToFuncsPass - : public ConvertMathToFuncsBase { + : public impl::ConvertMathToFuncsBase { ConvertMathToFuncsPass() = default; void runOnOperation() override; diff --git a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp --- a/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp +++ b/mlir/lib/Conversion/MathToLLVM/MathToLLVM.cpp @@ -7,13 +7,19 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/MathToLLVM/MathToLLVM.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Conversion/LLVMCommon/VectorPattern.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/IR/TypeUtilities.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTMATHTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -250,7 +256,7 @@ }; struct ConvertMathToLLVMPass - : public ConvertMathToLLVMBase { + : public impl::ConvertMathToLLVMBase { ConvertMathToLLVMPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp --- a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp +++ b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/MathToLibm/MathToLibm.h" -#include "../PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -18,6 +17,12 @@ #include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinDialect.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTMATHTOLIBM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -193,7 +198,7 @@ namespace { struct ConvertMathToLibmPass - : public ConvertMathToLibmBase { + : public impl::ConvertMathToLibmBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/MathToSPIRV/MathToSPIRVPass.cpp b/mlir/lib/Conversion/MathToSPIRV/MathToSPIRVPass.cpp --- a/mlir/lib/Conversion/MathToSPIRV/MathToSPIRVPass.cpp +++ b/mlir/lib/Conversion/MathToSPIRV/MathToSPIRVPass.cpp @@ -11,17 +11,23 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/MathToSPIRV/MathToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTMATHTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; namespace { /// A pass converting MLIR Math operations into the SPIR-V dialect. class ConvertMathToSPIRVPass - : public ConvertMathToSPIRVBase { + : public impl::ConvertMathToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp --- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" -#include "../PassDetail.h" + #include "mlir/Analysis/DataLayoutAnalysis.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" @@ -20,8 +20,14 @@ #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/BlockAndValueMapping.h" +#include "mlir/Pass/Pass.h" #include "llvm/ADT/SmallBitVector.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTMEMREFTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -2042,7 +2048,8 @@ } namespace { -struct MemRefToLLVMPass : public ConvertMemRefToLLVMBase { +struct MemRefToLLVMPass + : public impl::ConvertMemRefToLLVMBase { MemRefToLLVMPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/MemRefToSPIRV/MapMemRefStorageClassPass.cpp b/mlir/lib/Conversion/MemRefToSPIRV/MapMemRefStorageClassPass.cpp --- a/mlir/lib/Conversion/MemRefToSPIRV/MapMemRefStorageClassPass.cpp +++ b/mlir/lib/Conversion/MemRefToSPIRV/MapMemRefStorageClassPass.cpp @@ -11,9 +11,9 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" -#include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRV.h" #include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h" + +#include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVAttributes.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVEnums.h" @@ -23,6 +23,11 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_MAPMEMREFSTORAGECLASS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "mlir-map-memref-storage-class" using namespace mlir; @@ -284,7 +289,7 @@ namespace { class MapMemRefStorageClassPass final - : public MapMemRefStorageClassBase { + : public impl::MapMemRefStorageClassBase { public: explicit MapMemRefStorageClassPass() { memorySpaceMap = spirv::mapMemorySpaceToVulkanStorageClass; diff --git a/mlir/lib/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.cpp b/mlir/lib/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.cpp --- a/mlir/lib/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.cpp +++ b/mlir/lib/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.cpp @@ -11,17 +11,22 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTMEMREFTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A pass converting MLIR MemRef operations into the SPIR-V dialect. class ConvertMemRefToSPIRVPass - : public ConvertMemRefToSPIRVBase { + : public impl::ConvertMemRefToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp b/mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp --- a/mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp +++ b/mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp @@ -7,12 +7,18 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/NVGPUToNVVM/NVGPUToNVVM.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTNVGPUTONVVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -327,7 +333,7 @@ }; struct ConvertNVGPUToNVVMPass - : public ConvertNVGPUToNVVMBase { + : public impl::ConvertNVGPUToNVVMBase { ConvertNVGPUToNVVMPass() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/OpenACCToLLVM/OpenACCToLLVM.cpp b/mlir/lib/Conversion/OpenACCToLLVM/OpenACCToLLVM.cpp --- a/mlir/lib/Conversion/OpenACCToLLVM/OpenACCToLLVM.cpp +++ b/mlir/lib/Conversion/OpenACCToLLVM/OpenACCToLLVM.cpp @@ -6,12 +6,18 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" -#include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h" + +#include "mlir/Conversion/LLVMCommon/Pattern.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/OpenACC/OpenACC.h" #include "mlir/IR/Builders.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTOPENACCTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -148,7 +154,7 @@ namespace { struct ConvertOpenACCToLLVMPass - : public ConvertOpenACCToLLVMBase { + : public impl::ConvertOpenACCToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/OpenACCToSCF/OpenACCToSCF.cpp b/mlir/lib/Conversion/OpenACCToSCF/OpenACCToSCF.cpp --- a/mlir/lib/Conversion/OpenACCToSCF/OpenACCToSCF.cpp +++ b/mlir/lib/Conversion/OpenACCToSCF/OpenACCToSCF.cpp @@ -6,13 +6,19 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/OpenACCToSCF/ConvertOpenACCToSCF.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/OpenACC/OpenACC.h" #include "mlir/Dialect/SCF/IR/SCF.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTOPENACCTOSCF +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; //===----------------------------------------------------------------------===// @@ -56,7 +62,7 @@ namespace { struct ConvertOpenACCToSCFPass - : public ConvertOpenACCToSCFBase { + : public impl::ConvertOpenACCToSCFBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp --- a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp +++ b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h" -#include "../PassDetail.h" #include "mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h" #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" @@ -18,6 +17,12 @@ #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/OpenMP/OpenMPDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTOPENMPTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -132,7 +137,7 @@ namespace { struct ConvertOpenMPToLLVMPass - : public ConvertOpenMPToLLVMBase { + : public impl::ConvertOpenMPToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp --- a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp +++ b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/PDLToPDLInterp/PDLToPDLInterp.h" -#include "../PassDetail.h" + #include "PredicateTree.h" #include "mlir/Dialect/PDL/IR/PDL.h" #include "mlir/Dialect/PDL/IR/PDLTypes.h" @@ -20,6 +20,11 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTPDLTOPDLINTERP +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::pdl_to_pdl_interp; @@ -909,7 +914,7 @@ namespace { struct PDLToPDLInterpPass - : public ConvertPDLToPDLInterpBase { + : public impl::ConvertPDLToPDLInterpBase { void runOnOperation() final; }; } // namespace diff --git a/mlir/lib/Conversion/PassDetail.h b/mlir/lib/Conversion/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Conversion/PassDetail.h +++ /dev/null @@ -1,115 +0,0 @@ -//===- 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" - -#include "mlir/Conversion/GPUToROCDL/Runtimes.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/IR/FunctionInterfaces.h" - -namespace mlir { -class AffineDialect; - -// Forward declaration from Dialect.h -template -void registerDialect(DialectRegistry ®istry); - -namespace acc { -class OpenACCDialect; -} // namespace acc - -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace cf { -class ControlFlowDialect; -} // namespace cf - -namespace complex { -class ComplexDialect; -} // namespace complex - -namespace gpu { -class GPUDialect; -class GPUModuleOp; -} // namespace gpu - -namespace func { -class FuncDialect; -} // namespace func - -namespace linalg { -class LinalgDialect; -} // namespace linalg - -namespace LLVM { -class LLVMDialect; -} // namespace LLVM - -namespace nvgpu { -class NVGPUDialect; -} - -namespace NVVM { -class NVVMDialect; -} // namespace NVVM - -namespace math { -class MathDialect; -} // namespace math - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace omp { -class OpenMPDialect; -} // namespace omp - -namespace pdl_interp { -class PDLInterpDialect; -} // namespace pdl_interp - -namespace ROCDL { -class ROCDLDialect; -} // namespace ROCDL - -namespace scf { -class SCFDialect; -} // namespace scf - -namespace spirv { -class SPIRVDialect; -} // namespace spirv - -namespace tensor { -class TensorDialect; -} // namespace tensor - -namespace tosa { -class TosaDialect; -} // namespace tosa - -namespace vector { -class VectorDialect; -} // namespace vector - -namespace arm_neon { -class ArmNeonDialect; -} // namespace arm_neon - -#define GEN_PASS_CLASSES -#include "mlir/Conversion/Passes.h.inc" - -} // namespace mlir - -#endif // CONVERSION_PASSDETAIL_H_ diff --git a/mlir/lib/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.cpp b/mlir/lib/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.cpp --- a/mlir/lib/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.cpp +++ b/mlir/lib/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.cpp @@ -7,12 +7,17 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h" -#include "../PassDetail.h" + #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_RECONCILEUNREALIZEDCASTS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -103,7 +108,7 @@ /// Pass to simplify and eliminate unrealized conversion casts. struct ReconcileUnrealizedCasts - : public ReconcileUnrealizedCastsBase { + : public impl::ReconcileUnrealizedCastsBase { ReconcileUnrealizedCasts() = default; void runOnOperation() override { diff --git a/mlir/lib/Conversion/SCFToControlFlow/SCFToControlFlow.cpp b/mlir/lib/Conversion/SCFToControlFlow/SCFToControlFlow.cpp --- a/mlir/lib/Conversion/SCFToControlFlow/SCFToControlFlow.cpp +++ b/mlir/lib/Conversion/SCFToControlFlow/SCFToControlFlow.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h" -#include "../PassDetail.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" @@ -24,13 +24,18 @@ #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" +namespace mlir { +#define GEN_PASS_DEF_SCFTOCONTROLFLOW +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; namespace { struct SCFToControlFlowPass - : public SCFToControlFlowBase { + : public impl::SCFToControlFlowBase { void runOnOperation() override; }; diff --git a/mlir/lib/Conversion/SCFToGPU/SCFToGPUPass.cpp b/mlir/lib/Conversion/SCFToGPU/SCFToGPUPass.cpp --- a/mlir/lib/Conversion/SCFToGPU/SCFToGPUPass.cpp +++ b/mlir/lib/Conversion/SCFToGPU/SCFToGPUPass.cpp @@ -7,18 +7,24 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/SCFToGPU/SCFToGPUPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/SCFToGPU/SCFToGPU.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Complex/IR/Complex.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/SCF/IR/SCF.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" - #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/CommandLine.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTAFFINEFORTOGPU +#define GEN_PASS_DEF_CONVERTPARALLELLOOPTOGPU +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; @@ -26,7 +32,7 @@ // 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 ConvertAffineForToGPUBase { +struct ForLoopMapper : public impl::ConvertAffineForToGPUBase { ForLoopMapper() = default; ForLoopMapper(unsigned numBlockDims, unsigned numThreadDims) { this->numBlockDims = numBlockDims; @@ -46,7 +52,7 @@ }; struct ParallelLoopToGpuPass - : public ConvertParallelLoopToGpuBase { + : public impl::ConvertParallelLoopToGpuBase { void runOnOperation() override { RewritePatternSet patterns(&getContext()); populateParallelLoopToGPUPatterns(patterns); diff --git a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp --- a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp +++ b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h" -#include "../PassDetail.h" + #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" @@ -22,8 +22,14 @@ #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/SymbolTable.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTSCFTOOPENMP +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; /// Matches a block containing a "simple" reduction. The expected shape of the @@ -443,7 +449,7 @@ } /// A pass converting SCF operations to OpenMP operations. -struct SCFToOpenMPPass : public ConvertSCFToOpenMPBase { +struct SCFToOpenMPPass : public impl::ConvertSCFToOpenMPBase { /// Pass entry point. void runOnOperation() override { if (failed(applyPatterns(getOperation()))) diff --git a/mlir/lib/Conversion/SCFToSPIRV/SCFToSPIRVPass.cpp b/mlir/lib/Conversion/SCFToSPIRV/SCFToSPIRVPass.cpp --- a/mlir/lib/Conversion/SCFToSPIRV/SCFToSPIRVPass.cpp +++ b/mlir/lib/Conversion/SCFToSPIRV/SCFToSPIRVPass.cpp @@ -12,7 +12,6 @@ #include "mlir/Conversion/SCFToSPIRV/SCFToSPIRVPass.h" -#include "../PassDetail.h" #include "mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h" #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h" #include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRV.h" @@ -21,10 +20,15 @@ #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_SCFTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct SCFToSPIRVPass : public SCFToSPIRVBase { +struct SCFToSPIRVPass : public impl::SCFToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/SPIRVToLLVM/ConvertLaunchFuncToLLVMCalls.cpp b/mlir/lib/Conversion/SPIRVToLLVM/ConvertLaunchFuncToLLVMCalls.cpp --- a/mlir/lib/Conversion/SPIRVToLLVM/ConvertLaunchFuncToLLVMCalls.cpp +++ b/mlir/lib/Conversion/SPIRVToLLVM/ConvertLaunchFuncToLLVMCalls.cpp @@ -11,7 +11,8 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" +#include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h" + #include "mlir/Conversion/ArithmeticToLLVM/ArithmeticToLLVM.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" #include "mlir/Conversion/LLVMCommon/LoweringOptions.h" @@ -19,19 +20,23 @@ #include "mlir/Conversion/LLVMCommon/TypeConverter.h" #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" #include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVM.h" -#include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/SymbolTable.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" - #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/FormatVariadic.h" +namespace mlir { +#define GEN_PASS_DEF_LOWERHOSTCODETOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; static constexpr const char kSPIRVModule[] = "__spv__"; @@ -271,7 +276,7 @@ }; class LowerHostCodeToLLVM - : public LowerHostCodeToLLVMBase { + : public impl::LowerHostCodeToLLVMBase { public: void runOnOperation() override { ModuleOp module = getOperation(); diff --git a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.cpp b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.cpp --- a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.cpp +++ b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.cpp @@ -11,18 +11,24 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/LLVMCommon/TypeConverter.h" #include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVM.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +#define GEN_PASS_DEF_CONVERTSPIRVTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir using namespace mlir; namespace { /// A pass converting MLIR SPIR-V operations into LLVM dialect. class ConvertSPIRVToLLVMPass - : public ConvertSPIRVToLLVMBase { + : public impl::ConvertSPIRVToLLVMBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Conversion/ShapeToStandard/ConvertShapeConstraints.cpp b/mlir/lib/Conversion/ShapeToStandard/ConvertShapeConstraints.cpp --- a/mlir/lib/Conversion/ShapeToStandard/ConvertShapeConstraints.cpp +++ b/mlir/lib/Conversion/ShapeToStandard/ConvertShapeConstraints.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/ShapeToStandard/ShapeToStandard.h" -#include "../PassDetail.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Shape/IR/Shape.h" @@ -18,7 +17,13 @@ #include "mlir/Pass/PassRegistry.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTSHAPECONSTRAINTS +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; + namespace { #include "ShapeToStandard.cpp.inc" } // namespace @@ -49,7 +54,7 @@ // is emitted, witnesses are satisfied, so they are replace with // `shape.const_witness true`. class ConvertShapeConstraints - : public ConvertShapeConstraintsBase { + : public impl::ConvertShapeConstraintsBase { void runOnOperation() override { auto *func = getOperation(); auto *context = &getContext(); diff --git a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp --- a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp +++ b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp @@ -8,7 +8,6 @@ #include "mlir/Conversion/ShapeToStandard/ShapeToStandard.h" -#include "../PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" @@ -16,9 +15,15 @@ #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/ImplicitLocOpBuilder.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/STLExtras.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTSHAPETOSTANDARD +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::shape; using namespace mlir::scf; @@ -680,7 +685,7 @@ namespace { /// Conversion pass. class ConvertShapeToStandardPass - : public ConvertShapeToStandardBase { + : public impl::ConvertShapeToStandardBase { void runOnOperation() override; }; diff --git a/mlir/lib/Conversion/TensorToLinalg/TensorToLinalgPass.cpp b/mlir/lib/Conversion/TensorToLinalg/TensorToLinalgPass.cpp --- a/mlir/lib/Conversion/TensorToLinalg/TensorToLinalgPass.cpp +++ b/mlir/lib/Conversion/TensorToLinalg/TensorToLinalgPass.cpp @@ -11,18 +11,23 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/TensorToLinalg/TensorToLinalgPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/TensorToLinalg/TensorToLinalg.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTTENSORTOLINALG +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A pass converting MLIR Tensor operations into the Linalg dialect. class ConvertTensorToLinalgPass - : public ConvertTensorToLinalgBase { + : public impl::ConvertTensorToLinalgBase { void runOnOperation() override { auto &context = getContext(); ConversionTarget target(context); diff --git a/mlir/lib/Conversion/TensorToSPIRV/TensorToSPIRVPass.cpp b/mlir/lib/Conversion/TensorToSPIRV/TensorToSPIRVPass.cpp --- a/mlir/lib/Conversion/TensorToSPIRV/TensorToSPIRVPass.cpp +++ b/mlir/lib/Conversion/TensorToSPIRV/TensorToSPIRVPass.cpp @@ -11,19 +11,24 @@ //===----------------------------------------------------------------------===// #include "mlir/Conversion/TensorToSPIRV/TensorToSPIRVPass.h" -#include "../PassDetail.h" + #include "mlir/Conversion/ArithmeticToSPIRV/ArithmeticToSPIRV.h" #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h" #include "mlir/Conversion/TensorToSPIRV/TensorToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTTENSORTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A pass converting MLIR Tensor operations into the SPIR-V dialect. class ConvertTensorToSPIRVPass - : public ConvertTensorToSPIRVBase { + : public impl::ConvertTensorToSPIRVBase { void runOnOperation() override { MLIRContext *context = &getContext(); Operation *op = getOperation(); diff --git a/mlir/lib/Conversion/TosaToArith/TosaToArithPass.cpp b/mlir/lib/Conversion/TosaToArith/TosaToArithPass.cpp --- a/mlir/lib/Conversion/TosaToArith/TosaToArithPass.cpp +++ b/mlir/lib/Conversion/TosaToArith/TosaToArithPass.cpp @@ -10,22 +10,26 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/TosaToArith/TosaToArith.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_TOSATOARITH +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace tosa; namespace { -struct TosaToArith : public TosaToArithBase { +struct TosaToArith : public impl::TosaToArithBase { public: void runOnOperation() override { RewritePatternSet patterns(&getContext()); diff --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamedPass.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamedPass.cpp --- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamedPass.cpp +++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgNamedPass.cpp @@ -10,15 +10,15 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/TosaToLinalg/TosaToLinalg.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/Dialect/Tosa/Utils/QuantUtils.h" #include "mlir/IR/PatternMatch.h" @@ -26,10 +26,16 @@ #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_TOSATOLINALGNAMED +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct TosaToLinalgNamed : public TosaToLinalgNamedBase { +struct TosaToLinalgNamed + : public impl::TosaToLinalgNamedBase { public: void getDependentDialects(DialectRegistry ®istry) const override { registry diff --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp --- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp +++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp @@ -10,15 +10,15 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/TosaToLinalg/TosaToLinalg.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/Dialect/Tosa/Utils/QuantUtils.h" #include "mlir/IR/PatternMatch.h" @@ -27,10 +27,15 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/Passes.h" +namespace mlir { +#define GEN_PASS_DEF_TOSATOLINALG +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct TosaToLinalg : public TosaToLinalgBase { +struct TosaToLinalg : public impl::TosaToLinalgBase { public: void getDependentDialects(DialectRegistry ®istry) const override { registry diff --git a/mlir/lib/Conversion/TosaToSCF/TosaToSCFPass.cpp b/mlir/lib/Conversion/TosaToSCF/TosaToSCFPass.cpp --- a/mlir/lib/Conversion/TosaToSCF/TosaToSCFPass.cpp +++ b/mlir/lib/Conversion/TosaToSCF/TosaToSCFPass.cpp @@ -10,23 +10,28 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/TosaToSCF/TosaToSCF.h" + +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_TOSATOSCF +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace tosa; namespace { -struct TosaToSCF : public TosaToSCFBase { +struct TosaToSCF : public impl::TosaToSCFBase { public: void runOnOperation() override { RewritePatternSet patterns(&getContext()); diff --git a/mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp b/mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp --- a/mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp +++ b/mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp @@ -10,23 +10,27 @@ // //===----------------------------------------------------------------------===// -#include "../PassDetail.h" #include "mlir/Conversion/TosaToTensor/TosaToTensor.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_TOSATOTENSOR +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace tosa; namespace { -struct TosaToTensor : public TosaToTensorBase { +struct TosaToTensor : public impl::TosaToTensorBase { public: void runOnOperation() override { RewritePatternSet patterns(&getContext()); diff --git a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp --- a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp +++ b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp @@ -15,7 +15,6 @@ #include "NvGpuSupport.h" #include "mlir/Conversion/VectorToGPU/VectorToGPU.h" -#include "../PassDetail.h" #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" @@ -31,6 +30,11 @@ #include "mlir/Transforms/Passes.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTVECTORTOGPU +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; /// For a vector TransferOpType `xferOp`, an empty `indices` vector, and an @@ -882,7 +886,7 @@ namespace { struct ConvertVectorToGPUPass - : public ConvertVectorToGPUBase { + : public impl::ConvertVectorToGPUBase { explicit ConvertVectorToGPUPass(bool useNvGpu_) { useNvGpu.setValue(useNvGpu_); diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp --- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp +++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp @@ -8,8 +8,6 @@ #include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h" -#include "../PassDetail.h" - #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/TypeConverter.h" #include "mlir/Dialect/AMX/AMXDialect.h" @@ -24,14 +22,20 @@ #include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" #include "mlir/Dialect/X86Vector/Transforms.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTVECTORTOLLVM +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::vector; namespace { struct LowerVectorToLLVMPass - : public ConvertVectorToLLVMBase { + : public impl::ConvertVectorToLLVMBase { LowerVectorToLLVMPass(const LowerVectorToLLVMOptions &options) { this->reassociateFPReductions = options.reassociateFPReductions; this->force32BitVectorIndices = options.force32BitVectorIndices; diff --git a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp --- a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp +++ b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp @@ -14,7 +14,6 @@ #include "mlir/Conversion/VectorToSCF/VectorToSCF.h" -#include "../PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" @@ -26,6 +25,11 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/Passes.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTVECTORTOSCF +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; using vector::TransferReadOp; using vector::TransferWriteOp; @@ -1281,7 +1285,7 @@ namespace { struct ConvertVectorToSCFPass - : public ConvertVectorToSCFBase { + : public impl::ConvertVectorToSCFBase { ConvertVectorToSCFPass() = default; ConvertVectorToSCFPass(const VectorTransferToSCFOptions &options) { this->fullUnroll = options.unroll; diff --git a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp --- a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp +++ b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp @@ -12,7 +12,6 @@ #include "mlir/Conversion/VectorToSPIRV/VectorToSPIRV.h" -#include "../PassDetail.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVTypes.h" diff --git a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRVPass.cpp b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRVPass.cpp --- a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRVPass.cpp +++ b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRVPass.cpp @@ -12,18 +12,22 @@ #include "mlir/Conversion/VectorToSPIRV/VectorToSPIRVPass.h" -#include "../PassDetail.h" #include "mlir/Conversion/VectorToSPIRV/VectorToSPIRV.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTVECTORTOSPIRV +#include "mlir/Conversion/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { struct ConvertVectorToSPIRVPass - : public ConvertVectorToSPIRVBase { + : public impl::ConvertVectorToSPIRVBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp @@ -19,12 +19,13 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/MapVector.h" @@ -32,6 +33,11 @@ #include "llvm/Support/Debug.h" #include +namespace mlir { +#define GEN_PASS_DEF_AFFINEDATACOPYGENERATION +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "affine-data-copy-generate" using namespace mlir; @@ -50,7 +56,7 @@ // TODO: We currently can't generate copies correctly when stores // are strided. Check for strided stores. struct AffineDataCopyGeneration - : public AffineDataCopyGenerationBase { + : public impl::AffineDataCopyGenerationBase { AffineDataCopyGeneration() = default; explicit AffineDataCopyGeneration(unsigned slowMemorySpace, unsigned fastMemorySpace, diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineExpandIndexOps.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineExpandIndexOps.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineExpandIndexOps.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineExpandIndexOps.cpp @@ -10,13 +10,17 @@ // fundamental operations. //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" -#include "PassDetail.h" +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_AFFINEEXPANDINDEXOPS +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -38,7 +42,7 @@ }; class ExpandAffineIndexOpsPass - : public AffineExpandIndexOpsBase { + : public impl::AffineExpandIndexOpsBase { public: ExpandAffineIndexOpsPass() = default; diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp @@ -10,7 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineStructures.h" @@ -18,9 +19,9 @@ #include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" @@ -32,6 +33,11 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPINVARIANTCODEMOTION +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "licm" using namespace mlir; @@ -44,7 +50,7 @@ /// TODO: This code should be removed once the new LICM pass can handle its /// uses. struct LoopInvariantCodeMotion - : public AffineLoopInvariantCodeMotionBase { + : public impl::AffineLoopInvariantCodeMotionBase { void runOnOperation() override; void runOnAffineForOp(AffineForOp forOp); }; diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineLoopNormalize.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineLoopNormalize.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineLoopNormalize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineLoopNormalize.cpp @@ -10,10 +10,16 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" + +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" + +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPNORMALIZE +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir using namespace mlir; @@ -23,7 +29,7 @@ /// As currently implemented, this pass cannot fail, but it might skip over ops /// that are already in a normalized form. struct AffineLoopNormalizePass - : public AffineLoopNormalizeBase { + : public impl::AffineLoopNormalizeBase { void runOnOperation() override { getOperation().walk([](Operation *op) { diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp @@ -11,7 +11,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" @@ -19,19 +20,25 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Affine/Passes.h.inc" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "llvm/Support/Debug.h" #include +namespace mlir { +#define GEN_PASS_DEF_AFFINEPARALLELIZE +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "affine-parallel" using namespace mlir; namespace { /// Convert all parallel affine.for op into 1-D affine.parallel op. -struct AffineParallelize : public AffineParallelizeBase { +struct AffineParallelize + : public impl::AffineParallelizeBase { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineScalarReplacement.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineScalarReplacement.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineScalarReplacement.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineScalarReplacement.cpp @@ -16,19 +16,24 @@ #include "mlir/Dialect/Affine/Passes.h" -#include "PassDetail.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/Dominance.h" #include "mlir/Support/LogicalResult.h" #include +namespace mlir { +#define GEN_PASS_DEF_AFFINESCALARREPLACEMENT +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "affine-scalrep" using namespace mlir; namespace { struct AffineScalarReplacement - : public AffineScalarReplacementBase { + : public impl::AffineScalarReplacementBase { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopCoalescing.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopCoalescing.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopCoalescing.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopCoalescing.cpp @@ -6,23 +6,31 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/Transforms/Passes.h" #include "mlir/Transforms/RegionUtils.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_LOOPCOALESCING +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define PASS_NAME "loop-coalescing" #define DEBUG_TYPE PASS_NAME using namespace mlir; namespace { -struct LoopCoalescingPass : public LoopCoalescingBase { +struct LoopCoalescingPass + : public impl::LoopCoalescingBase { /// Walk either an scf.for or an affine.for to find a band to coalesce. template diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp @@ -10,7 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" @@ -19,6 +20,7 @@ #include "mlir/Dialect/Affine/LoopFusionUtils.h" #include "mlir/Dialect/Affine/LoopUtils.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" @@ -33,6 +35,12 @@ #include "llvm/Support/raw_ostream.h" #include #include + +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPFUSION +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "affine-loop-fusion" using namespace mlir; @@ -47,7 +55,7 @@ // TODO: Extend this pass to check for fusion preventing dependences, // and add support for more general loop fusion algorithms. -struct LoopFusion : public AffineLoopFusionBase { +struct LoopFusion : public impl::AffineLoopFusionBase { LoopFusion() = default; LoopFusion(unsigned fastMemorySpace, uint64_t localBufSizeThresholdBytes, bool maximalFusion, enum FusionMode affineFusionMode) { diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp @@ -10,7 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" @@ -18,12 +19,18 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" + +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPTILING +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + using namespace mlir; #define DEBUG_TYPE "affine-loop-tile" @@ -31,7 +38,7 @@ namespace { /// A pass to perform loop tiling on all suitable loop nests of a Function. -struct LoopTiling : public AffineLoopTilingBase { +struct LoopTiling : public impl::AffineLoopTilingBase { LoopTiling() = default; explicit LoopTiling(uint64_t cacheSizeBytes, bool avoidMaxMinBounds = true) : avoidMaxMinBounds(avoidMaxMinBounds) { diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp @@ -9,11 +9,13 @@ // This file implements loop unrolling. // //===----------------------------------------------------------------------===// -#include "PassDetail.h" + +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" @@ -21,10 +23,15 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" -using namespace mlir; +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPUNROLL +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir #define DEBUG_TYPE "affine-loop-unroll" +using namespace mlir; + namespace { // TODO: this is really a test pass and should be moved out of dialect @@ -34,7 +41,7 @@ /// 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 AffineLoopUnrollBase { +struct LoopUnroll : public impl::AffineLoopUnrollBase { // Callback to obtain unroll factors; if this has a callable target, takes // precedence over command-line argument or passed argument. const std::function getUnrollFactor; diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp @@ -33,12 +33,13 @@ // op's, bodies of those loops will not be jammed. //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" -#include "mlir/Dialect/Affine/Passes.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/BlockAndValueMapping.h" @@ -46,14 +47,20 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/Support/CommandLine.h" -using namespace mlir; +namespace mlir { +#define GEN_PASS_DEF_AFFINELOOPUNROLLANDJAM +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir #define DEBUG_TYPE "affine-loop-unroll-jam" +using namespace mlir; + namespace { /// Loop unroll jam pass. Currently, this just unroll jams the first /// outer loop in a Function. -struct LoopUnrollAndJam : public AffineLoopUnrollAndJamBase { +struct LoopUnrollAndJam + : public impl::AffineLoopUnrollAndJamBase { explicit LoopUnrollAndJam(Optional unrollJamFactor = None) { if (unrollJamFactor) this->unrollJamFactor = *unrollJamFactor; diff --git a/mlir/lib/Dialect/Affine/Transforms/PassDetail.h b/mlir/lib/Dialect/Affine/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Affine/Transforms/PassDetail.h +++ /dev/null @@ -1,42 +0,0 @@ -//===- 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/Dialect/Affine/Passes.h" -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { -// Forward declaration from Dialect.h -template -void registerDialect(DialectRegistry ®istry); - -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace linalg { -class LinalgDialect; -} // namespace linalg - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace vector { -class VectorDialect; -} // namespace vector - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Affine/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_AFFINE_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Affine/Transforms/PipelineDataTransfer.cpp b/mlir/lib/Dialect/Affine/Transforms/PipelineDataTransfer.cpp --- a/mlir/lib/Dialect/Affine/Transforms/PipelineDataTransfer.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/PipelineDataTransfer.cpp @@ -10,7 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/Analysis/Utils.h" @@ -18,19 +19,25 @@ #include "mlir/Dialect/Affine/LoopUtils.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Arithmetic/Utils/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Builders.h" #include "mlir/Transforms/Passes.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_AFFINEPIPELINEDATATRANSFER +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "affine-pipeline-data-transfer" using namespace mlir; namespace { struct PipelineDataTransfer - : public AffinePipelineDataTransferBase { + : public impl::AffinePipelineDataTransferBase { void runOnOperation() override; void runOnAffineForOp(AffineForOp forOp); diff --git a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp --- a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp @@ -10,14 +10,20 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" -#include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/IntegerSet.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_SIMPLIFYAFFINESTRUCTURES +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "simplify-affine-structure" using namespace mlir; @@ -29,7 +35,7 @@ /// all memrefs with non-trivial layout maps are converted to ones with trivial /// identity layout ones. struct SimplifyAffineStructures - : public SimplifyAffineStructuresBase { + : public impl::SimplifyAffineStructuresBase { void runOnOperation() 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 --- a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp @@ -11,7 +11,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Affine/Passes.h" + #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" @@ -19,13 +20,20 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BlockAndValueMapping.h" +#include "mlir/Pass/Pass.h" #include "mlir/Support/LLVM.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_AFFINEVECTORIZE +#include "mlir/Dialect/Affine/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace vector; @@ -607,7 +615,7 @@ /// Base state for the vectorize pass. /// Command line arguments are preempted by non-empty pass arguments. -struct Vectorize : public AffineVectorizeBase { +struct Vectorize : public impl::AffineVectorizeBase { Vectorize() = default; Vectorize(ArrayRef virtualVectorSize); void runOnOperation() override; diff --git a/mlir/lib/Dialect/Arithmetic/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Arithmetic/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Arithmetic/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Arithmetic/Transforms/Bufferize.cpp @@ -6,23 +6,29 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Arithmetic/Transforms/BufferizableOpInterfaceImpl.h" -#include "mlir/Dialect/Arithmetic/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" +namespace mlir { +namespace arith { +#define GEN_PASS_DEF_ARITHMETICBUFFERIZE +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h.inc" +} // namespace arith +} // namespace mlir + using namespace mlir; using namespace bufferization; namespace { /// Pass to bufferize Arithmetic ops. struct ArithmeticBufferizePass - : public ArithmeticBufferizeBase { + : public arith::impl::ArithmeticBufferizeBase { ArithmeticBufferizePass(uint64_t alignment = 0, bool constantOpOnly = false) : constantOpOnly(constantOpOnly) { this->alignment = alignment; diff --git a/mlir/lib/Dialect/Arithmetic/Transforms/ExpandOps.cpp b/mlir/lib/Dialect/Arithmetic/Transforms/ExpandOps.cpp --- a/mlir/lib/Dialect/Arithmetic/Transforms/ExpandOps.cpp +++ b/mlir/lib/Dialect/Arithmetic/Transforms/ExpandOps.cpp @@ -6,12 +6,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Arithmetic/Transforms/Passes.h" + +#include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/IR/TypeUtilities.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +namespace arith { +#define GEN_PASS_DEF_ARITHMETICEXPANDOPS +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h.inc" +} // namespace arith +} // namespace mlir + using namespace mlir; /// Create an integer or index constant. @@ -189,7 +196,7 @@ }; struct ArithmeticExpandOpsPass - : public ArithmeticExpandOpsBase { + : public arith::impl::ArithmeticExpandOpsBase { void runOnOperation() override { RewritePatternSet patterns(&getContext()); ConversionTarget target(getContext()); diff --git a/mlir/lib/Dialect/Arithmetic/Transforms/PassDetail.h b/mlir/lib/Dialect/Arithmetic/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Arithmetic/Transforms/PassDetail.h +++ /dev/null @@ -1,34 +0,0 @@ -//===- PassDetail.h - Arithmetic Pass 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_ARITHMETIC_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_ARITHMETIC_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace func { -class FuncDialect; -} // namespace func - -namespace memref { -class MemRefDialect; -} // namespace memref - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Arithmetic/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_ARITHMETIC_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp b/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp --- a/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp +++ b/mlir/lib/Dialect/Arithmetic/Transforms/UnsignedWhenEquivalent.cpp @@ -8,13 +8,20 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h" + #include "mlir/Analysis/DataFlow/DeadCodeAnalysis.h" #include "mlir/Analysis/DataFlow/IntegerRangeAnalysis.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" -#include "mlir/Dialect/Arithmetic/Transforms/Passes.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +namespace arith { +#define GEN_PASS_DEF_ARITHMETICUNSIGNEDWHENEQUIVALENT +#include "mlir/Dialect/Arithmetic/Transforms/Passes.h.inc" +} // namespace arith +} // namespace mlir + using namespace mlir; using namespace mlir::arith; using namespace mlir::dataflow; @@ -102,7 +109,7 @@ }; struct ArithmeticUnsignedWhenEquivalentPass - : public ArithmeticUnsignedWhenEquivalentBase< + : public arith::impl::ArithmeticUnsignedWhenEquivalentBase< ArithmeticUnsignedWhenEquivalentPass> { /// Implementation structure: first find all equivalent ops and collect them, /// then perform all the rewrites in a second pass over the target op. This diff --git a/mlir/lib/Dialect/Async/Transforms/AsyncParallelFor.cpp b/mlir/lib/Dialect/Async/Transforms/AsyncParallelFor.cpp --- a/mlir/lib/Dialect/Async/Transforms/AsyncParallelFor.cpp +++ b/mlir/lib/Dialect/Async/Transforms/AsyncParallelFor.cpp @@ -10,12 +10,11 @@ // //===----------------------------------------------------------------------===// -#include +#include "mlir/Dialect/Async/Passes.h" #include "PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Async/IR/Async.h" -#include "mlir/Dialect/Async/Passes.h" #include "mlir/Dialect/Async/Transforms.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" @@ -26,6 +25,12 @@ #include "mlir/Support/LLVM.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/RegionUtils.h" +#include + +namespace mlir { +#define GEN_PASS_DEF_ASYNCPARALLELFOR +#include "mlir/Dialect/Async/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::async; @@ -94,7 +99,7 @@ // } // struct AsyncParallelForPass - : public AsyncParallelForBase { + : public impl::AsyncParallelForBase { AsyncParallelForPass() = default; AsyncParallelForPass(bool asyncDispatch, int32_t numWorkerThreads, diff --git a/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCounting.cpp b/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCounting.cpp --- a/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCounting.cpp +++ b/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCounting.cpp @@ -11,10 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Async/Passes.h" + #include "mlir/Analysis/Liveness.h" #include "mlir/Dialect/Async/IR/Async.h" -#include "mlir/Dialect/Async/Passes.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/ImplicitLocOpBuilder.h" @@ -22,11 +22,17 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/SmallSet.h" -using namespace mlir; -using namespace mlir::async; +namespace mlir { +#define GEN_PASS_DEF_ASYNCRUNTIMEREFCOUNTING +#define GEN_PASS_DEF_ASYNCRUNTIMEPOLICYBASEDREFCOUNTING +#include "mlir/Dialect/Async/Passes.h.inc" +} // namespace mlir #define DEBUG_TYPE "async-runtime-ref-counting" +using namespace mlir; +using namespace mlir::async; + //===----------------------------------------------------------------------===// // Utility functions shared by reference counting passes. //===----------------------------------------------------------------------===// @@ -103,7 +109,7 @@ namespace { class AsyncRuntimeRefCountingPass - : public AsyncRuntimeRefCountingBase { + : public impl::AsyncRuntimeRefCountingBase { public: AsyncRuntimeRefCountingPass() = default; void runOnOperation() override; @@ -462,7 +468,7 @@ namespace { class AsyncRuntimePolicyBasedRefCountingPass - : public AsyncRuntimePolicyBasedRefCountingBase< + : public impl::AsyncRuntimePolicyBasedRefCountingBase< AsyncRuntimePolicyBasedRefCountingPass> { public: AsyncRuntimePolicyBasedRefCountingPass() { initializeDefaultPolicy(); } diff --git a/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCountingOpt.cpp b/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCountingOpt.cpp --- a/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCountingOpt.cpp +++ b/mlir/lib/Dialect/Async/Transforms/AsyncRuntimeRefCountingOpt.cpp @@ -10,22 +10,28 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Async/IR/Async.h" #include "mlir/Dialect/Async/Passes.h" + +#include "mlir/Dialect/Async/IR/Async.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "llvm/ADT/SmallSet.h" #include "llvm/Support/Debug.h" -using namespace mlir; -using namespace mlir::async; +namespace mlir { +#define GEN_PASS_DEF_ASYNCRUNTIMEREFCOUNTINGOPT +#include "mlir/Dialect/Async/Passes.h.inc" +} // namespace mlir #define DEBUG_TYPE "async-ref-counting" +using namespace mlir; +using namespace mlir::async; + namespace { class AsyncRuntimeRefCountingOptPass - : public AsyncRuntimeRefCountingOptBase { + : public impl::AsyncRuntimeRefCountingOptBase< + AsyncRuntimeRefCountingOptPass> { public: AsyncRuntimeRefCountingOptPass() = default; void runOnOperation() override; diff --git a/mlir/lib/Dialect/Async/Transforms/AsyncToAsyncRuntime.cpp b/mlir/lib/Dialect/Async/Transforms/AsyncToAsyncRuntime.cpp --- a/mlir/lib/Dialect/Async/Transforms/AsyncToAsyncRuntime.cpp +++ b/mlir/lib/Dialect/Async/Transforms/AsyncToAsyncRuntime.cpp @@ -11,11 +11,12 @@ // //===----------------------------------------------------------------------===// +#include "mlir/Dialect/Async/Passes.h" + #include "PassDetail.h" #include "mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Async/IR/Async.h" -#include "mlir/Dialect/Async/Passes.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SCF/IR/SCF.h" @@ -27,6 +28,11 @@ #include "llvm/ADT/SetVector.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_ASYNCTOASYNCRUNTIME +#include "mlir/Dialect/Async/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::async; @@ -37,7 +43,7 @@ namespace { class AsyncToAsyncRuntimePass - : public AsyncToAsyncRuntimeBase { + : public impl::AsyncToAsyncRuntimeBase { public: AsyncToAsyncRuntimePass() = default; void runOnOperation() override; diff --git a/mlir/lib/Dialect/Async/Transforms/PassDetail.h b/mlir/lib/Dialect/Async/Transforms/PassDetail.h --- a/mlir/lib/Dialect/Async/Transforms/PassDetail.h +++ b/mlir/lib/Dialect/Async/Transforms/PassDetail.h @@ -27,9 +27,6 @@ class SCFDialect; } // namespace scf -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Async/Passes.h.inc" - // -------------------------------------------------------------------------- // // Utility functions shared by Async Transformations. // -------------------------------------------------------------------------- // diff --git a/mlir/lib/Dialect/Bufferization/Transforms/AllocTensorElimination.cpp b/mlir/lib/Dialect/Bufferization/Transforms/AllocTensorElimination.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/AllocTensorElimination.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/AllocTensorElimination.cpp @@ -6,17 +6,23 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/AllocTensorElimination.h" #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h" -#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/IR/Dominance.h" #include "mlir/Pass/Pass.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_ALLOCTENSORELIMINATION +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; using namespace mlir::bufferization; @@ -234,7 +240,8 @@ namespace { struct AllocTensorElimination - : public AllocTensorEliminationBase { + : public bufferization::impl::AllocTensorEliminationBase< + AllocTensorElimination> { AllocTensorElimination() = default; void runOnOperation() override; diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp @@ -50,15 +50,22 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/IR/AllocationOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/BufferUtils.h" -#include "mlir/Dialect/Bufferization/Transforms/Passes.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "llvm/ADT/SetOperations.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_BUFFERDEALLOCATION +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; using namespace mlir::bufferization; @@ -633,7 +640,9 @@ /// The actual buffer deallocation pass that inserts and moves dealloc nodes /// into the right positions. Furthermore, it inserts additional clones if /// necessary. It uses the algorithm described at the top of the file. -struct BufferDeallocationPass : BufferDeallocationBase { +struct BufferDeallocationPass + : public bufferization::impl::BufferDeallocationBase< + BufferDeallocationPass> { void getDependentDialects(DialectRegistry ®istry) const override { registry.insert(); registry.insert(); diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferOptimizations.cpp @@ -11,14 +11,24 @@ // allocations and copies during buffer deallocation. The third pass tries to // convert heap-based allocations to stack-based allocations, if possible. -#include "PassDetail.h" -#include "mlir/Dialect/Bufferization/Transforms/BufferUtils.h" #include "mlir/Dialect/Bufferization/Transforms/Passes.h" + +#include "mlir/Dialect/Bufferization/Transforms/BufferUtils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Operation.h" #include "mlir/Interfaces/LoopLikeInterface.h" #include "mlir/Pass/Pass.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_BUFFERHOISTING +#define GEN_PASS_DEF_BUFFERLOOPHOISTING +#define GEN_PASS_DEF_PROMOTEBUFFERSTOSTACK +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; using namespace mlir::bufferization; @@ -361,7 +371,8 @@ /// The buffer hoisting pass that hoists allocation nodes into dominating /// blocks. -struct BufferHoistingPass : BufferHoistingBase { +struct BufferHoistingPass + : public bufferization::impl::BufferHoistingBase { void runOnOperation() override { // Hoist all allocations into dominator blocks. @@ -372,7 +383,9 @@ }; /// The buffer loop hoisting pass that hoists allocation nodes out of loops. -struct BufferLoopHoistingPass : BufferLoopHoistingBase { +struct BufferLoopHoistingPass + : public bufferization::impl::BufferLoopHoistingBase< + BufferLoopHoistingPass> { void runOnOperation() override { // Hoist all allocations out of loops. @@ -385,7 +398,8 @@ /// The promote buffer to stack pass that tries to convert alloc nodes into /// alloca nodes. class PromoteBuffersToStackPass - : public PromoteBuffersToStackBase { + : public bufferization::impl::PromoteBuffersToStackBase< + PromoteBuffersToStackPass> { public: PromoteBuffersToStackPass(unsigned maxAllocSizeInBytes, unsigned maxRankOfAllocatedMemRef) { diff --git a/mlir/lib/Dialect/Bufferization/Transforms/BufferResultsToOutParams.cpp b/mlir/lib/Dialect/Bufferization/Transforms/BufferResultsToOutParams.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/BufferResultsToOutParams.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/BufferResultsToOutParams.cpp @@ -6,13 +6,20 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Bufferization/Transforms/Passes.h" + #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_BUFFERRESULTSTOOUTPARAMS +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; /// Return `true` if the given MemRef type has a fully dynamic layout. @@ -179,7 +186,8 @@ namespace { struct BufferResultsToOutParamsPass - : BufferResultsToOutParamsBase { + : bufferization::impl::BufferResultsToOutParamsBase< + BufferResultsToOutParamsPass> { void runOnOperation() override { if (failed(bufferization::promoteBufferResultsToOutParams(getOperation()))) return signalPassFailure(); diff --git a/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp @@ -6,14 +6,13 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h" #include "mlir/Dialect/Bufferization/Transforms/OneShotModuleBufferize.h" -#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/Transforms/TensorCopyInsertion.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" @@ -22,6 +21,15 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/Passes.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_FINALIZINGBUFFERIZE +#define GEN_PASS_DEF_BUFFERIZATIONBUFFERIZE +#define GEN_PASS_DEF_ONESHOTBUFFERIZE +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; using namespace mlir::bufferization; @@ -122,7 +130,8 @@ namespace { struct FinalizingBufferizePass - : public FinalizingBufferizeBase { + : public bufferization::impl::FinalizingBufferizeBase< + FinalizingBufferizePass> { using FinalizingBufferizeBase< FinalizingBufferizePass>::FinalizingBufferizeBase; @@ -164,7 +173,7 @@ } struct OneShotBufferizePass - : public OneShotBufferizeBase { + : public bufferization::impl::OneShotBufferizeBase { OneShotBufferizePass() {} explicit OneShotBufferizePass(const OneShotBufferizationOptions &options) @@ -255,7 +264,8 @@ namespace { struct BufferizationBufferizePass - : public BufferizationBufferizeBase { + : public bufferization::impl::BufferizationBufferizeBase< + BufferizationBufferizePass> { void runOnOperation() override { BufferizationOptions options = getPartialBufferizationOptions(); options.opFilter.allowDialect(); diff --git a/mlir/lib/Dialect/Bufferization/Transforms/DropEquivalentBufferResults.cpp b/mlir/lib/Dialect/Bufferization/Transforms/DropEquivalentBufferResults.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/DropEquivalentBufferResults.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/DropEquivalentBufferResults.cpp @@ -27,13 +27,20 @@ // function argument, it is also considered equivalent. A cast is inserted at // the call site in that case. -#include "PassDetail.h" #include "mlir/Dialect/Bufferization/Transforms/Passes.h" + #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_DROPEQUIVALENTBUFFERRESULTS +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir + using namespace mlir; /// Return the unique ReturnOp that terminates `funcOp`. @@ -137,7 +144,8 @@ namespace { struct DropEquivalentBufferResultsPass - : DropEquivalentBufferResultsBase { + : bufferization::impl::DropEquivalentBufferResultsBase< + DropEquivalentBufferResultsPass> { void runOnOperation() override { if (failed(bufferization::dropEquivalentBufferResults(getOperation()))) return signalPassFailure(); diff --git a/mlir/lib/Dialect/Bufferization/Transforms/PassDetail.h b/mlir/lib/Dialect/Bufferization/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Bufferization/Transforms/PassDetail.h +++ /dev/null @@ -1,35 +0,0 @@ -//===- PassDetail.h - Bufferization Pass 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_BUFFERIZATION_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_BUFFERIZATION_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace func { -class FuncDialect; -} // namespace func - -namespace memref { -class MemRefDialect; -} // namespace memref - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_BUFFERIZATION_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Bufferization/Transforms/TensorCopyInsertion.cpp b/mlir/lib/Dialect/Bufferization/Transforms/TensorCopyInsertion.cpp --- a/mlir/lib/Dialect/Bufferization/Transforms/TensorCopyInsertion.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/TensorCopyInsertion.cpp @@ -6,16 +6,22 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Bufferization/Transforms/TensorCopyInsertion.h" - -#include "PassDetail.h" +#include "mlir/Dialect/Bufferization/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h" #include "mlir/Dialect/Bufferization/Transforms/OneShotModuleBufferize.h" -#include "mlir/Dialect/Bufferization/Transforms/Passes.h" +#include "mlir/Dialect/Bufferization/Transforms/TensorCopyInsertion.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" + +namespace mlir { +namespace bufferization { +#define GEN_PASS_DEF_TENSORCOPYINSERTION +#include "mlir/Dialect/Bufferization/Transforms/Passes.h.inc" +} // namespace bufferization +} // namespace mlir using namespace mlir; using namespace mlir::bufferization; @@ -159,7 +165,8 @@ namespace { struct TensorCopyInsertionPass - : TensorCopyInsertionBase { + : public bufferization::impl::TensorCopyInsertionBase< + TensorCopyInsertionPass> { TensorCopyInsertionPass() : options(llvm::None) {} TensorCopyInsertionPass(const OneShotBufferizationOptions &options) : options(options) {} diff --git a/mlir/lib/Dialect/Func/Transforms/FuncBufferize.cpp b/mlir/lib/Dialect/Func/Transforms/FuncBufferize.cpp --- a/mlir/lib/Dialect/Func/Transforms/FuncBufferize.cpp +++ b/mlir/lib/Dialect/Func/Transforms/FuncBufferize.cpp @@ -10,20 +10,25 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Func/Transforms/Passes.h" + #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Func/Transforms/FuncConversions.h" -#include "mlir/Dialect/Func/Transforms/Passes.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_FUNCBUFFERIZE +#include "mlir/Dialect/Func/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::func; namespace { -struct FuncBufferizePass : public FuncBufferizeBase { +struct FuncBufferizePass : public impl::FuncBufferizeBase { using FuncBufferizeBase::FuncBufferizeBase; void runOnOperation() override { auto module = getOperation(); diff --git a/mlir/lib/Dialect/Func/Transforms/PassDetail.h b/mlir/lib/Dialect/Func/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Func/Transforms/PassDetail.h +++ /dev/null @@ -1,33 +0,0 @@ -//===- PassDetail.h - Func 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_FUNC_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_FUNC_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -class AtomicRMWOp; - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace memref { -class MemRefDialect; -} // namespace memref - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Func/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_FUNC_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp --- a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp @@ -11,10 +11,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/GPU/Transforms/Passes.h" + #include "mlir/Dialect/Async/IR/Async.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/Transforms/Passes.h" #include "mlir/Dialect/GPU/Transforms/Utils.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" @@ -24,9 +25,16 @@ #include "mlir/Transforms/RegionUtils.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_GPUASYNCREGIONPASS +#include "mlir/Dialect/GPU/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; + namespace { -class GpuAsyncRegionPass : public GpuAsyncRegionPassBase { +class GpuAsyncRegionPass + : public impl::GpuAsyncRegionPassBase { struct ThreadTokenCallback; struct DeferWaitCallback; struct SingleTokenUseCallback; diff --git a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp --- a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp @@ -10,14 +10,14 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/GPU/Transforms/Passes.h" + #include "mlir/AsmParser/AsmParser.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" #include "mlir/Dialect/DLTI/DLTI.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/Transforms/Passes.h" #include "mlir/Dialect/GPU/Transforms/Utils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/BlockAndValueMapping.h" @@ -27,6 +27,12 @@ #include "mlir/Support/LLVM.h" #include "mlir/Transforms/RegionUtils.h" +namespace mlir { +#define GEN_PASS_DEF_GPULAUNCHSINKINDEXCOMPUTATIONS +#define GEN_PASS_DEF_GPUKERNELOUTLINING +#include "mlir/Dialect/GPU/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; template @@ -239,7 +245,7 @@ /// Pass that moves ops which are likely an index computation into gpu.launch /// body. class GpuLaunchSinkIndexComputationsPass - : public GpuLaunchSinkIndexComputationsBase< + : public impl::GpuLaunchSinkIndexComputationsBase< GpuLaunchSinkIndexComputationsPass> { public: void runOnOperation() override { @@ -266,7 +272,7 @@ /// a separate pass. The external functions can then be annotated with the /// symbol of the cubin accessor function. class GpuKernelOutliningPass - : public GpuKernelOutliningBase { + : public impl::GpuKernelOutliningBase { public: GpuKernelOutliningPass(StringRef dlStr) { if (!dlStr.empty() && !dataLayoutStr.hasValue()) diff --git a/mlir/lib/Dialect/GPU/Transforms/ParallelLoopMapper.cpp b/mlir/lib/Dialect/GPU/Transforms/ParallelLoopMapper.cpp --- a/mlir/lib/Dialect/GPU/Transforms/ParallelLoopMapper.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/ParallelLoopMapper.cpp @@ -11,14 +11,19 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/GPU/Transforms/ParallelLoopMapper.h" +#include "mlir/Dialect/GPU/Transforms/Passes.h" -#include "PassDetail.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/Transforms/Passes.h" +#include "mlir/Dialect/GPU/Transforms/ParallelLoopMapper.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/IR/AffineMap.h" +namespace mlir { +#define GEN_PASS_DEF_GPUMAPPARALLELLOOPSPASS +#include "mlir/Dialect/GPU/Transforms/Passes.h.inc" +} // namespace mlir + namespace mlir { using scf::ParallelOp; @@ -129,7 +134,7 @@ namespace { struct GpuMapParallelLoopsPass - : public GpuMapParallelLoopsPassBase { + : public impl::GpuMapParallelLoopsPassBase { void runOnOperation() override { for (Region ®ion : getOperation()->getRegions()) { region.walk([](ParallelOp parallelOp) { mapParallelOp(parallelOp); }); diff --git a/mlir/lib/Dialect/GPU/Transforms/PassDetail.h b/mlir/lib/Dialect/GPU/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/GPU/Transforms/PassDetail.h +++ /dev/null @@ -1,25 +0,0 @@ -//===- 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/Dialect/Async/IR/Async.h" -#include "mlir/Dialect/DLTI/DLTI.h" -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/GPU/Transforms/Passes.h.inc" - -} // 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 --- a/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/LegalizeForExport.cpp @@ -7,11 +7,19 @@ //===----------------------------------------------------------------------===// #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/BuiltinOps.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +namespace LLVM { +#define GEN_PASS_DEF_LLVMLEGALIZEFOREXPORT +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" +} // namespace LLVM +} // namespace mlir using namespace mlir; @@ -68,7 +76,7 @@ namespace { struct LegalizeForExportPass - : public LLVMLegalizeForExportBase { + : public LLVM::impl::LLVMLegalizeForExportBase { void runOnOperation() override { LLVM::ensureDistinctSuccessors(getOperation()); } diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/OptimizeForNVVM.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/OptimizeForNVVM.cpp --- a/mlir/lib/Dialect/LLVMIR/Transforms/OptimizeForNVVM.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/OptimizeForNVVM.cpp @@ -7,12 +7,20 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h" -#include "PassDetail.h" + #include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "mlir/IR/Builders.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace NVVM { +#define GEN_PASS_DEF_NVVMOPTIMIZEFORTARGET +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" +} // namespace NVVM +} // namespace mlir + using namespace mlir; namespace { @@ -32,7 +40,7 @@ }; struct NVVMOptimizeForTarget - : public NVVMOptimizeForTargetBase { + : public NVVM::impl::NVVMOptimizeForTargetBase { void runOnOperation() override; void getDependentDialects(DialectRegistry ®istry) const override { diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h b/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/LLVMIR/Transforms/PassDetail.h +++ /dev/null @@ -1,24 +0,0 @@ -//===- 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 { -namespace func { -class FuncOp; -} // namespace func - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_LLVMIR_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/RequestCWrappers.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/RequestCWrappers.cpp --- a/mlir/lib/Dialect/LLVMIR/Transforms/RequestCWrappers.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/RequestCWrappers.cpp @@ -7,15 +7,22 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/LLVMIR/Transforms/RequestCWrappers.h" -#include "PassDetail.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Pass/Pass.h" + +namespace mlir { +namespace LLVM { +#define GEN_PASS_DEF_LLVMREQUESTCWRAPPERS +#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc" +} // namespace LLVM +} // namespace mlir using namespace mlir; namespace { class RequestCWrappersPass - : public LLVMRequestCWrappersBase { + : public LLVM::impl::LLVMRequestCWrappersBase { public: void runOnOperation() override { getOperation()->setAttr(LLVM::LLVMDialect::getEmitCWrapperAttrName(), diff --git a/mlir/lib/Dialect/Linalg/Transforms/BubbleUpExtractSlice.cpp b/mlir/lib/Dialect/Linalg/Transforms/BubbleUpExtractSlice.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/BubbleUpExtractSlice.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/BubbleUpExtractSlice.cpp @@ -12,7 +12,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/Utils/Utils.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp @@ -6,12 +6,13 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" @@ -19,13 +20,19 @@ #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGBUFFERIZE +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace bufferization; namespace { /// Converts Linalg operations that work on tensor-type operands or results to /// work on buffers. -struct LinalgBufferizePass : public LinalgBufferizeBase { +struct LinalgBufferizePass + : public impl::LinalgBufferizeBase { void runOnOperation() override { BufferizationOptions options = getPartialBufferizationOptions(); options.opFilter.allowDialect(); diff --git a/mlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp b/mlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp @@ -6,11 +6,12 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" + #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Func/Transforms/FuncConversions.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/IR/OpDefinition.h" #include "mlir/Transforms/DialectConversion.h" @@ -19,6 +20,11 @@ #include #include +namespace mlir { +#define GEN_PASS_DEF_LINALGDETENSORIZE +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::linalg; @@ -158,7 +164,8 @@ }; /// @see LinalgDetensorize in Linalg/Passes.td for more details. -struct LinalgDetensorize : public LinalgDetensorizeBase { +struct LinalgDetensorize + : public impl::LinalgDetensorizeBase { LinalgDetensorize() = default; class CostModel { diff --git a/mlir/lib/Dialect/Linalg/Transforms/DropUnitDims.cpp b/mlir/lib/Dialect/Linalg/Transforms/DropUnitDims.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/DropUnitDims.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/DropUnitDims.cpp @@ -12,10 +12,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" + +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" @@ -27,6 +28,11 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGFOLDUNITEXTENTDIMS +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "linalg-drop-unit-dims" using namespace mlir; @@ -542,7 +548,7 @@ namespace { /// Pass that removes unit-extent dims within generic ops. struct LinalgFoldUnitExtentDimsPass - : public LinalgFoldUnitExtentDimsBase { + : public impl::LinalgFoldUnitExtentDimsBase { void runOnOperation() override { Operation *op = getOperation(); MLIRContext *context = op->getContext(); diff --git a/mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp b/mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp @@ -9,12 +9,11 @@ // This file implements the linalg dialect Fusion on tensors operations pass. // //===----------------------------------------------------------------------===// -#include -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/SparseTensor/IR/SparseTensor.h" @@ -24,6 +23,13 @@ #include "mlir/IR/PatternMatch.h" #include "mlir/Support/LLVM.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +#include + +namespace mlir { +#define GEN_PASS_DEF_LINALGFOLDUNITEXTENTDIMS +#define GEN_PASS_DEF_LINALGELEMENTWISEOPFUSION +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::linalg; @@ -1753,7 +1759,8 @@ // favor of test passes that check the functionality of each of the patterns // added here individually. struct LinalgElementwiseOpFusionPass - : public LinalgElementwiseOpFusionBase { + : public impl::LinalgElementwiseOpFusionBase< + LinalgElementwiseOpFusionPass> { void runOnOperation() override { Operation *op = getOperation(); MLIRContext *context = op->getContext(); diff --git a/mlir/lib/Dialect/Linalg/Transforms/ElementwiseToLinalg.cpp b/mlir/lib/Dialect/Linalg/Transforms/ElementwiseToLinalg.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/ElementwiseToLinalg.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/ElementwiseToLinalg.cpp @@ -8,13 +8,17 @@ #include "mlir/Dialect/Linalg/Passes.h" -#include "PassDetail.h" #include "mlir/Dialect/Arithmetic/Utils/Utils.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_CONVERTELEMENTWISETOLINALG +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; static bool isElementwiseMappableOpOnRankedTensors(Operation *op) { @@ -121,7 +125,8 @@ namespace { class ConvertElementwiseToLinalgPass - : public ConvertElementwiseToLinalgBase { + : public impl::ConvertElementwiseToLinalgBase< + ConvertElementwiseToLinalgPass> { void runOnOperation() final { auto *func = getOperation(); diff --git a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Linalg/Analysis/DependenceAnalysis.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/FusionOnTensors.cpp b/mlir/lib/Dialect/Linalg/Transforms/FusionOnTensors.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/FusionOnTensors.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/FusionOnTensors.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Generalization.cpp b/mlir/lib/Dialect/Linalg/Transforms/Generalization.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Generalization.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Generalization.cpp @@ -11,9 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/Passes.h" + +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Attributes.h" @@ -24,6 +25,11 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGGENERALIZATION +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "linalg-generalization" using namespace mlir; @@ -67,7 +73,7 @@ namespace { struct LinalgGeneralizationPass - : public LinalgGeneralizationBase { + : public impl::LinalgGeneralizationBase { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/Linalg/Transforms/InitTensorToAllocTensor.cpp b/mlir/lib/Dialect/Linalg/Transforms/InitTensorToAllocTensor.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/InitTensorToAllocTensor.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/InitTensorToAllocTensor.cpp @@ -6,13 +6,17 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGINITTENSORTOALLOCTENSOR +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::bufferization; using namespace mlir::linalg; @@ -30,7 +34,8 @@ }; struct LinalgInitTensorToAllocTensor - : public LinalgInitTensorToAllocTensorBase { + : public impl::LinalgInitTensorToAllocTensorBase< + LinalgInitTensorToAllocTensor> { LinalgInitTensorToAllocTensor() = default; void runOnOperation() override; diff --git a/mlir/lib/Dialect/Linalg/Transforms/InlineScalarOperands.cpp b/mlir/lib/Dialect/Linalg/Transforms/InlineScalarOperands.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/InlineScalarOperands.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/InlineScalarOperands.cpp @@ -12,15 +12,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGINLINESCALAROPERANDS +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::linalg; @@ -96,7 +102,8 @@ namespace { /// Pass that removes unit-extent dims within generic ops. struct LinalgInlineScalarOperandsPass - : public LinalgInlineScalarOperandsBase { + : public impl::LinalgInlineScalarOperandsBase< + LinalgInlineScalarOperandsPass> { void runOnOperation() override { func::FuncOp funcOp = getOperation(); MLIRContext *context = funcOp.getContext(); diff --git a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp @@ -11,15 +11,14 @@ // //===----------------------------------------------------------------------===// -#include +#include "mlir/Dialect/Linalg/Passes.h" -#include "PassDetail.h" #include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" #include "mlir/Dialect/Affine/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Hoisting.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" @@ -33,6 +32,20 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/LoopInvariantCodeMotionUtils.h" #include "mlir/Transforms/Passes.h" +#include + +namespace mlir { +#define GEN_PASS_DEF_LINALGSTRATEGYTILEANDFUSEPASS +#define GEN_PASS_DEF_LINALGSTRATEGYTILEPASS +#define GEN_PASS_DEF_LINALGSTRATEGYPADPASS +#define GEN_PASS_DEF_LINALGSTRATEGYDECOMPOSEPASS +#define GEN_PASS_DEF_LINALGSTRATEGYPEELPASS +#define GEN_PASS_DEF_LINALGSTRATEGYVECTORIZEPASS +#define GEN_PASS_DEF_LINALGSTRATEGYENABLEPASS +#define GEN_PASS_DEF_LINALGSTRATEGYLOWERVECTORSPASS +#define GEN_PASS_DEF_LINALGSTRATEGYREMOVEMARKERSPASS +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::vector; @@ -42,7 +55,8 @@ /// Configurable pass to apply pattern-based tiling and fusion. struct LinalgStrategyTileAndFusePass - : public LinalgStrategyTileAndFusePassBase { + : public impl::LinalgStrategyTileAndFusePassBase< + LinalgStrategyTileAndFusePass> { LinalgStrategyTileAndFusePass() = default; @@ -79,11 +93,12 @@ /// Configurable pass to apply pattern-based linalg tiling. struct LinalgStrategyTilePass - : public LinalgStrategyTilePassBase { + : public impl::LinalgStrategyTilePassBase { LinalgStrategyTilePass() = default; - LinalgStrategyTilePass(StringRef opName, LinalgTilingOptions opt, + LinalgStrategyTilePass(StringRef opName, + mlir::linalg::LinalgTilingOptions opt, LinalgTransformationFilter filt) : options(std::move(opt)), filter(std::move(filt)) { this->anchorOpName.setValue(opName.str()); @@ -106,13 +121,13 @@ (void)applyPatternsAndFoldGreedily(funcOp, std::move(tilingPattern)); } - LinalgTilingOptions options; + mlir::linalg::LinalgTilingOptions options; LinalgTransformationFilter filter; }; /// Configurable pass to apply hoisting and padding. struct LinalgStrategyPadPass - : public LinalgStrategyPadPassBase { + : public impl::LinalgStrategyPadPassBase { LinalgStrategyPadPass() = default; @@ -142,11 +157,11 @@ LinalgTransformationFilter filter; }; - /// Configurable pass to apply lowering of coarser-grained named linalg ops into /// finer-grained named versions. struct LinalgStrategyDecomposePass - : public LinalgStrategyDecomposePassBase { + : public impl::LinalgStrategyDecomposePassBase< + LinalgStrategyDecomposePass> { LinalgStrategyDecomposePass() = default; @@ -169,7 +184,7 @@ /// Configurable pass to apply pattern-based linalg peeling. struct LinalgStrategyPeelPass - : public LinalgStrategyPeelPassBase { + : public impl::LinalgStrategyPeelPassBase { LinalgStrategyPeelPass() = default; @@ -203,7 +218,8 @@ /// Configurable pass to apply pattern-based linalg vectorization. struct LinalgStrategyVectorizePass - : public LinalgStrategyVectorizePassBase { + : public impl::LinalgStrategyVectorizePassBase< + LinalgStrategyVectorizePass> { LinalgStrategyVectorizePass() = default; @@ -259,7 +275,7 @@ /// Configurable pass to enable the application of other pattern-based linalg /// passes. struct LinalgStrategyEnablePass - : public LinalgStrategyEnablePassBase { + : public impl::LinalgStrategyEnablePassBase { LinalgStrategyEnablePass(LinalgEnablingOptions opt, LinalgTransformationFilter filt) @@ -309,7 +325,7 @@ /// Configurable pass to lower vector operations. struct LinalgStrategyLowerVectorsPass - : public LinalgStrategyLowerVectorsPassBase< + : public impl::LinalgStrategyLowerVectorsPassBase< LinalgStrategyLowerVectorsPass> { LinalgStrategyLowerVectorsPass(LinalgVectorLoweringOptions opt, @@ -374,7 +390,7 @@ /// Configurable pass to lower vector operations. struct LinalgStrategyRemoveMarkersPass - : public LinalgStrategyRemoveMarkersPassBase< + : public impl::LinalgStrategyRemoveMarkersPassBase< LinalgStrategyRemoveMarkersPass> { void runOnOperation() override { diff --git a/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp b/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Linalg/Passes.h" + +#include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Arithmetic/Utils/Utils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" @@ -24,6 +26,13 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGLOWERTOAFFINELOOPS +#define GEN_PASS_DEF_LINALGLOWERTOLOOPS +#define GEN_PASS_DEF_LINALGLOWERTOPARALLELLOOPS +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::linalg; @@ -311,7 +320,7 @@ } struct LowerToAffineLoops - : public LinalgLowerToAffineLoopsBase { + : public impl::LinalgLowerToAffineLoopsBase { void getDependentDialects(DialectRegistry ®istry) const override { registry.insert(); } @@ -320,7 +329,7 @@ } }; -struct LowerToLoops : public LinalgLowerToLoopsBase { +struct LowerToLoops : public impl::LinalgLowerToLoopsBase { void getDependentDialects(DialectRegistry ®istry) const override { registry.insert(); } @@ -330,7 +339,7 @@ }; struct LowerToParallelLoops - : public LinalgLowerToParallelLoopsBase { + : public impl::LinalgLowerToParallelLoopsBase { void runOnOperation() override { lowerLinalgToLoopsImpl(getOperation()); } diff --git a/mlir/lib/Dialect/Linalg/Transforms/NamedOpConversions.cpp b/mlir/lib/Dialect/Linalg/Transforms/NamedOpConversions.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/NamedOpConversions.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/NamedOpConversions.cpp @@ -10,15 +10,20 @@ // canonicalizations of named ops. // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Linalg/IR/Linalg.h" + #include "mlir/Dialect/Linalg/Passes.h" + +#include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" - #include "llvm/ADT/SmallVector.h" +namespace mlir { +#define GEN_PASS_DEF_LINALGNAMEDOPCONVERSION +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::linalg; @@ -135,7 +140,7 @@ }; struct LinalgNamedOpConversionPass - : public LinalgNamedOpConversionBase { + : public impl::LinalgNamedOpConversionBase { LinalgNamedOpConversionPass() = default; LinalgNamedOpConversionPass(const LinalgNamedOpConversionPass &) = default; diff --git a/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h b/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/PassDetail.h +++ /dev/null @@ -1,52 +0,0 @@ -//===- 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/Dialect/Affine/IR/AffineOps.h" -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/IR/Dialect.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace linalg { -class LinalgDialect; -} // namespace linalg - -namespace scf { -class SCFDialect; -} // namespace scf - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace tensor { -class TensorDialect; -} // namespace tensor - -namespace vector { -class VectorDialect; -} // namespace vector - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Linalg/Passes.h.inc" - -} // 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 --- a/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Promotion.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Complex/IR/Complex.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp @@ -10,14 +10,13 @@ // //===----------------------------------------------------------------------===// -#include +#include "mlir/Dialect/Linalg/Passes.h" -#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/Utils/Utils.h" #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" -#include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" @@ -28,8 +27,13 @@ #include "mlir/IR/AffineMap.h" #include "mlir/Transforms/FoldUtils.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" - #include "llvm/Support/CommandLine.h" +#include + +namespace mlir { +#define GEN_PASS_DEF_LINALGTILINGPASS +#include "mlir/Dialect/Linalg/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::linalg; @@ -744,7 +748,7 @@ } namespace { -struct LinalgTilingPass : public LinalgTilingBase { +struct LinalgTilingPass : public impl::LinalgTilingPassBase { LinalgTilingPass() = default; LinalgTilingPass(ArrayRef tileSizes, LinalgTilingLoopType loopType) { this->tileSizes = tileSizes; diff --git a/mlir/lib/Dialect/MemRef/Transforms/ExpandOps.cpp b/mlir/lib/Dialect/MemRef/Transforms/ExpandOps.cpp --- a/mlir/lib/Dialect/MemRef/Transforms/ExpandOps.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/ExpandOps.cpp @@ -12,15 +12,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/MemRef/Transforms/Passes.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Arithmetic/Transforms/Passes.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" -#include "mlir/Dialect/MemRef/Transforms/Passes.h" #include "mlir/IR/TypeUtilities.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +namespace memref { +#define GEN_PASS_DEF_EXPANDOPS +#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" +} // namespace memref +} // namespace mlir + using namespace mlir; namespace { @@ -119,7 +125,7 @@ } }; -struct ExpandOpsPass : public ExpandOpsBase { +struct ExpandOpsPass : public memref::impl::ExpandOpsBase { void runOnOperation() override { MLIRContext &ctx = getContext(); diff --git a/mlir/lib/Dialect/MemRef/Transforms/FoldMemRefAliasOps.cpp b/mlir/lib/Dialect/MemRef/Transforms/FoldMemRefAliasOps.cpp --- a/mlir/lib/Dialect/MemRef/Transforms/FoldMemRefAliasOps.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/FoldMemRefAliasOps.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/MemRef/Transforms/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" -#include "mlir/Dialect/MemRef/Transforms/Passes.h" #include "mlir/Dialect/Utils/IndexingUtils.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/BuiltinTypes.h" @@ -23,6 +23,13 @@ #include "llvm/ADT/SmallBitVector.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +namespace memref { +#define GEN_PASS_DEF_FOLDMEMREFALIASOPS +#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" +} // namespace memref +} // namespace mlir + using namespace mlir; //===----------------------------------------------------------------------===// @@ -540,11 +547,8 @@ namespace { -#define GEN_PASS_CLASSES -#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" - struct FoldMemRefAliasOpsPass final - : public FoldMemRefAliasOpsBase { + : public memref::impl::FoldMemRefAliasOpsBase { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp b/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp --- a/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Func/IR/FuncOps.h" @@ -20,6 +19,13 @@ #include "llvm/ADT/SmallSet.h" #include "llvm/Support/Debug.h" +namespace mlir { +namespace memref { +#define GEN_PASS_DEF_NORMALIZEMEMREFS +#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" +} // namespace memref +} // namespace mlir + #define DEBUG_TYPE "normalize-memrefs" using namespace mlir; @@ -32,7 +38,8 @@ /// such functions as normalizable. Also, if a normalizable function is known /// to call a non-normalizable function, we treat that function as /// non-normalizable as well. We assume external functions to be normalizable. -struct NormalizeMemRefs : public NormalizeMemRefsBase { +struct NormalizeMemRefs + : public memref::impl::NormalizeMemRefsBase { void runOnOperation() override; void normalizeFuncOpMemRefs(func::FuncOp funcOp, ModuleOp moduleOp); bool areMemRefsNormalizable(func::FuncOp funcOp); diff --git a/mlir/lib/Dialect/MemRef/Transforms/PassDetail.h b/mlir/lib/Dialect/MemRef/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/MemRef/Transforms/PassDetail.h +++ /dev/null @@ -1,49 +0,0 @@ -//===- PassDetail.h - MemRef 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_MEMREF_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_MEMREF_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/IR/BuiltinOps.h" -#include "mlir/IR/DialectRegistry.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -class AffineDialect; - -// Forward declaration from Dialect.h -template -void registerDialect(DialectRegistry ®istry); - -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace func { -class FuncDialect; -} // namespace func - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace tensor { -class TensorDialect; -} // namespace tensor - -namespace vector { -class VectorDialect; -} // namespace vector - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_MEMREF_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/MemRef/Transforms/ResolveShapedTypeResultDims.cpp b/mlir/lib/Dialect/MemRef/Transforms/ResolveShapedTypeResultDims.cpp --- a/mlir/lib/Dialect/MemRef/Transforms/ResolveShapedTypeResultDims.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/ResolveShapedTypeResultDims.cpp @@ -11,15 +11,23 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/MemRef/Transforms/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" -#include "mlir/Dialect/MemRef/Transforms/Passes.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Interfaces/InferTypeOpInterface.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace memref { +#define GEN_PASS_DEF_RESOLVERANKEDSHAPETYPERESULTDIMS +#define GEN_PASS_DEF_RESOLVESHAPEDTYPERESULTDIMS +#include "mlir/Dialect/MemRef/Transforms/Passes.h.inc" +} // namespace memref +} // namespace mlir + using namespace mlir; namespace { @@ -108,13 +116,14 @@ namespace { struct ResolveRankedShapeTypeResultDimsPass final - : public ResolveRankedShapeTypeResultDimsBase< + : public memref::impl::ResolveRankedShapeTypeResultDimsBase< ResolveRankedShapeTypeResultDimsPass> { void runOnOperation() override; }; struct ResolveShapedTypeResultDimsPass final - : public ResolveShapedTypeResultDimsBase { + : public memref::impl::ResolveShapedTypeResultDimsBase< + ResolveShapedTypeResultDimsPass> { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/NVGPU/Transforms/MmaSyncTF32Transform.cpp b/mlir/lib/Dialect/NVGPU/Transforms/MmaSyncTF32Transform.cpp --- a/mlir/lib/Dialect/NVGPU/Transforms/MmaSyncTF32Transform.cpp +++ b/mlir/lib/Dialect/NVGPU/Transforms/MmaSyncTF32Transform.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" diff --git a/mlir/lib/Dialect/NVGPU/Transforms/OptimizeSharedMemory.cpp b/mlir/lib/Dialect/NVGPU/Transforms/OptimizeSharedMemory.cpp --- a/mlir/lib/Dialect/NVGPU/Transforms/OptimizeSharedMemory.cpp +++ b/mlir/lib/Dialect/NVGPU/Transforms/OptimizeSharedMemory.cpp @@ -9,12 +9,13 @@ // This file implements transforms to optimize accesses to shared memory. // //===----------------------------------------------------------------------===// -#include "PassDetail.h" + +#include "mlir/Dialect/NVGPU/Passes.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h" -#include "mlir/Dialect/NVGPU/Passes.h" #include "mlir/Dialect/NVGPU/Transforms/Transforms.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Interfaces/SideEffectInterfaces.h" @@ -22,6 +23,13 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" +namespace mlir { +namespace nvgpu { +#define GEN_PASS_DEF_OPTIMIZESHAREDMEMORY +#include "mlir/Dialect/NVGPU/Passes.h.inc" +} // namespace nvgpu +} // namespace mlir + using namespace mlir; using namespace mlir::nvgpu; @@ -242,7 +250,7 @@ namespace { class OptimizeSharedMemoryPass - : public OptimizeSharedMemoryBase { + : public nvgpu::impl::OptimizeSharedMemoryBase { public: OptimizeSharedMemoryPass() = default; diff --git a/mlir/lib/Dialect/NVGPU/Transforms/PassDetail.h b/mlir/lib/Dialect/NVGPU/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/NVGPU/Transforms/PassDetail.h +++ /dev/null @@ -1,33 +0,0 @@ -//===- PassDetail.h - NVGPU 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_NVGPU_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_NVGPU_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/IR/BuiltinOps.h" -#include "mlir/IR/Dialect.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace vector { -class VectorDialect; -} // namespace vector - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/NVGPU/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_NVGPU_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/SCF/Transforms/Bufferize.cpp b/mlir/lib/Dialect/SCF/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/SCF/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/Bufferize.cpp @@ -6,20 +6,25 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Bufferization/IR/Bufferization.h" +#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_SCFBUFFERIZE +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; namespace { -struct SCFBufferizePass : public SCFBufferizeBase { +struct SCFBufferizePass : public impl::SCFBufferizeBase { void runOnOperation() override { auto func = getOperation(); auto *context = &getContext(); diff --git a/mlir/lib/Dialect/SCF/Transforms/ForToWhile.cpp b/mlir/lib/Dialect/SCF/Transforms/ForToWhile.cpp --- a/mlir/lib/Dialect/SCF/Transforms/ForToWhile.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/ForToWhile.cpp @@ -10,14 +10,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_SCFFORTOWHILELOOP +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace llvm; using namespace mlir; using scf::ForOp; @@ -98,7 +103,7 @@ } }; -struct ForToWhileLoop : public SCFForToWhileLoopBase { +struct ForToWhileLoop : public impl::SCFForToWhileLoopBase { void runOnOperation() override { auto *parentOp = getOperation(); MLIRContext *ctx = parentOp->getContext(); diff --git a/mlir/lib/Dialect/SCF/Transforms/LoopCanonicalization.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopCanonicalization.cpp --- a/mlir/lib/Dialect/SCF/Transforms/LoopCanonicalization.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/LoopCanonicalization.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/Dialect/SCF/Utils/AffineCanonicalizationUtils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" @@ -23,6 +23,11 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/TypeSwitch.h" +namespace mlir { +#define GEN_PASS_DEF_SCFFORLOOPCANONICALIZATION +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; @@ -193,7 +198,7 @@ }; struct SCFForLoopCanonicalization - : public SCFForLoopCanonicalizationBase { + : public impl::SCFForLoopCanonicalizationBase { void runOnOperation() override { auto *parentOp = getOperation(); MLIRContext *ctx = parentOp->getContext(); diff --git a/mlir/lib/Dialect/SCF/Transforms/LoopPipelining.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopPipelining.cpp --- a/mlir/lib/Dialect/SCF/Transforms/LoopPipelining.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/LoopPipelining.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/SCF/Transforms/Patterns.h" @@ -19,6 +18,7 @@ #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Support/MathExtras.h" +#include "llvm/ADT/MapVector.h" using namespace mlir; using namespace mlir::scf; diff --git a/mlir/lib/Dialect/SCF/Transforms/LoopRangeFolding.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopRangeFolding.cpp --- a/mlir/lib/Dialect/SCF/Transforms/LoopRangeFolding.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/LoopRangeFolding.cpp @@ -10,20 +10,25 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/IR/BlockAndValueMapping.h" +namespace mlir { +#define GEN_PASS_DEF_SCFFORLOOPRANGEFOLDING +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; namespace { struct ForLoopRangeFolding - : public SCFForLoopRangeFoldingBase { + : public impl::SCFForLoopRangeFoldingBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp --- a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp @@ -11,12 +11,12 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/Dialect/SCF/Utils/AffineCanonicalizationUtils.h" #include "mlir/Dialect/Utils/StaticValueUtils.h" @@ -26,6 +26,13 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/DenseMap.h" +namespace mlir { +#define GEN_PASS_DEF_SCFFORLOOPPEELING +#define GEN_PASS_DEF_SCFFORLOOPSPECIALIZATION +#define GEN_PASS_DEF_SCFPARALLELLOOPSPECIALIZATION +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using scf::ForOp; using scf::ParallelOp; @@ -235,7 +242,8 @@ namespace { struct ParallelLoopSpecialization - : public SCFParallelLoopSpecializationBase { + : public impl::SCFParallelLoopSpecializationBase< + ParallelLoopSpecialization> { void runOnOperation() override { getOperation()->walk( [](ParallelOp op) { specializeParallelLoopForUnrolling(op); }); @@ -243,13 +251,13 @@ }; struct ForLoopSpecialization - : public SCFForLoopSpecializationBase { + : public impl::SCFForLoopSpecializationBase { void runOnOperation() override { getOperation()->walk([](ForOp op) { specializeForLoopForUnrolling(op); }); } }; -struct ForLoopPeeling : public SCFForLoopPeelingBase { +struct ForLoopPeeling : public impl::SCFForLoopPeelingBase { void runOnOperation() override { auto *parentOp = getOperation(); MLIRContext *ctx = parentOp->getContext(); diff --git a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopCollapsing.cpp b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopCollapsing.cpp --- a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopCollapsing.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopCollapsing.cpp @@ -6,21 +6,26 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/SCF/Transforms/Passes.h" + +#include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/Transforms/RegionUtils.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_SCFPARALLELLOOPCOLLAPSING +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "parallel-loop-collapsing" using namespace mlir; namespace { struct ParallelLoopCollapsing - : public SCFParallelLoopCollapsingBase { + : public impl::SCFParallelLoopCollapsingBase { void runOnOperation() override { Operation *module = getOperation(); diff --git a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp --- a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp @@ -10,15 +10,20 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" #include "mlir/IR/OpDefinition.h" +namespace mlir { +#define GEN_PASS_DEF_SCFPARALLELLOOPFUSION +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; @@ -162,7 +167,7 @@ namespace { struct ParallelLoopFusion - : public SCFParallelLoopFusionBase { + : public impl::SCFParallelLoopFusionBase { void runOnOperation() override { getOperation()->walk([&](Operation *child) { for (Region ®ion : child->getRegions()) diff --git a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp --- a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp @@ -10,14 +10,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SCF/Transforms/Passes.h" + #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/IR/SCF.h" -#include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" #include "mlir/Dialect/SCF/Utils/Utils.h" +namespace mlir { +#define GEN_PASS_DEF_SCFPARALLELLOOPTILING +#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::scf; @@ -181,7 +186,7 @@ namespace { struct ParallelLoopTiling - : public SCFParallelLoopTilingBase { + : public impl::SCFParallelLoopTilingBase { ParallelLoopTiling() = default; explicit ParallelLoopTiling(ArrayRef tileSizes, bool noMinMaxBounds = false) { diff --git a/mlir/lib/Dialect/SCF/Transforms/PassDetail.h b/mlir/lib/Dialect/SCF/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/SCF/Transforms/PassDetail.h +++ /dev/null @@ -1,43 +0,0 @@ -//===- 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_SCF_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_SCF_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { -// Forward declaration from Dialect.h -template -void registerDialect(DialectRegistry ®istry); - -class AffineDialect; - -namespace arith { -class ArithmeticDialect; -} // namespace arith - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace tensor { -class TensorDialect; -} // namespace tensor - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/SCF/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_SCF_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/SCF/Transforms/StructuralTypeConversions.cpp b/mlir/lib/Dialect/SCF/Transforms/StructuralTypeConversions.cpp --- a/mlir/lib/Dialect/SCF/Transforms/StructuralTypeConversions.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/StructuralTypeConversions.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/SCF/Transforms/Transforms.h" diff --git a/mlir/lib/Dialect/SPIRV/Transforms/CanonicalizeGLPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/CanonicalizeGLPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/CanonicalizeGLPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/CanonicalizeGLPass.cpp @@ -6,18 +6,25 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SPIRV/Transforms/Passes.h" + #include "mlir/Dialect/SPIRV/IR/SPIRVGLCanonicalization.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" -#include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVCANONICALIZEGL +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + using namespace mlir; namespace { class CanonicalizeGLPass final - : public SPIRVCanonicalizeGLBase { + : public spirv::impl::SPIRVCanonicalizeGLBase { public: void runOnOperation() override { RewritePatternSet patterns(&getContext()); diff --git a/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp @@ -13,16 +13,23 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SPIRV/Transforms/Passes.h" + #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" -#include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/Dialect/SPIRV/Utils/LayoutUtils.h" #include "mlir/Transforms/DialectConversion.h" using namespace mlir; +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVCOMPOSITETYPELAYOUT +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + namespace { class SPIRVGlobalVariableOpLayoutInfoDecoration : public OpRewritePattern { @@ -99,7 +106,7 @@ namespace { class DecorateSPIRVCompositeTypeLayoutPass - : public SPIRVCompositeTypeLayoutBase< + : public spirv::impl::SPIRVCompositeTypeLayoutBase< DecorateSPIRVCompositeTypeLayoutPass> { void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp @@ -11,15 +11,22 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SPIRV/Transforms/Passes.h" + #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" -#include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" #include "mlir/Dialect/SPIRV/Utils/LayoutUtils.h" #include "mlir/Transforms/DialectConversion.h" #include "llvm/ADT/SetVector.h" +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVLOWERABIATTRIBUTES +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + using namespace mlir; /// Creates a global variable for an argument based on the ABI info. @@ -165,7 +172,7 @@ /// Pass to implement the ABI information specified as attributes. class LowerABIAttributesPass final - : public SPIRVLowerABIAttributesBase { + : public spirv::impl::SPIRVLowerABIAttributesBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h b/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/SPIRV/Transforms/PassDetail.h +++ /dev/null @@ -1,26 +0,0 @@ -//===- 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/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace spirv { -class ModuleOp; -} // namespace spirv - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_SPIRV_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/SPIRV/Transforms/RewriteInsertsPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/RewriteInsertsPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/RewriteInsertsPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/RewriteInsertsPass.cpp @@ -12,12 +12,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/Transforms/Passes.h" + +#include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinOps.h" +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVREWRITEINSERTSPASS +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + using namespace mlir; namespace { @@ -25,7 +32,7 @@ /// Replaces sequential chains of `spirv::CompositeInsertOp` operation into /// `spirv::CompositeConstructOp` operation if possible. class RewriteInsertsPass - : public SPIRVRewriteInsertsPassBase { + : public spirv::impl::SPIRVRewriteInsertsPassBase { public: void runOnOperation() override; diff --git a/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SPIRV/Transforms/Passes.h" + #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVTypes.h" -#include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinAttributes.h" #include "mlir/IR/BuiltinTypes.h" @@ -27,6 +27,13 @@ #include #include +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVUNIFYALIASEDRESOURCEPASS +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + #define DEBUG_TYPE "spirv-unify-aliased-resource" using namespace mlir; @@ -521,7 +528,8 @@ namespace { class UnifyAliasedResourcePass final - : public SPIRVUnifyAliasedResourcePassBase { + : public spirv::impl::SPIRVUnifyAliasedResourcePassBase< + UnifyAliasedResourcePass> { public: void runOnOperation() override; }; diff --git a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp --- a/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp @@ -11,24 +11,32 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/SPIRV/Transforms/Passes.h" + #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVTypes.h" #include "mlir/Dialect/SPIRV/IR/TargetAndABI.h" -#include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Visitors.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/StringExtras.h" +namespace mlir { +namespace spirv { +#define GEN_PASS_DEF_SPIRVUPDATEVCE +#include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" +} // namespace spirv +} // namespace mlir + using namespace mlir; namespace { /// Pass to deduce minimal version/extension/capability requirements for a /// spirv::ModuleOp. -class UpdateVCEPass final : public SPIRVUpdateVCEBase { +class UpdateVCEPass final + : public spirv::impl::SPIRVUpdateVCEBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/Shape/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Shape/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Shape/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Shape/Transforms/Bufferize.cpp @@ -6,21 +6,28 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" -#include "PassDetail.h" +#include "mlir/Dialect/Shape/Transforms/Passes.h" + #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" +#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/Shape/IR/Shape.h" #include "mlir/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.h" -#include "mlir/Dialect/Shape/Transforms/Passes.h" #include "mlir/Pass/Pass.h" +namespace mlir { +#define GEN_PASS_DEF_SHAPEBUFFERIZE +#include "mlir/Dialect/Shape/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace bufferization; namespace { -struct ShapeBufferizePass : public ShapeBufferizeBase { +struct ShapeBufferizePass + : public impl::ShapeBufferizeBase { void runOnOperation() override { BufferizationOptions options = getPartialBufferizationOptions(); options.opFilter.allowDialect(); diff --git a/mlir/lib/Dialect/Shape/Transforms/PassDetail.h b/mlir/lib/Dialect/Shape/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Shape/Transforms/PassDetail.h +++ /dev/null @@ -1,30 +0,0 @@ -//===- PassDetail.h - Shape 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_SHAPE_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_SHAPE_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace memref { -class MemRefDialect; -} // namespace memref - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Shape/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_SHAPE_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Shape/Transforms/RemoveShapeConstraints.cpp b/mlir/lib/Dialect/Shape/Transforms/RemoveShapeConstraints.cpp --- a/mlir/lib/Dialect/Shape/Transforms/RemoveShapeConstraints.cpp +++ b/mlir/lib/Dialect/Shape/Transforms/RemoveShapeConstraints.cpp @@ -6,12 +6,18 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/Dialect/Shape/IR/Shape.h" #include "mlir/Dialect/Shape/Transforms/Passes.h" + +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/Shape/IR/Shape.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_REMOVESHAPECONSTRAINTS +#include "mlir/Dialect/Shape/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -41,7 +47,7 @@ /// Removal pass. class RemoveShapeConstraintsPass - : public RemoveShapeConstraintsBase { + : public impl::RemoveShapeConstraintsBase { void runOnOperation() override { MLIRContext &ctx = getContext(); diff --git a/mlir/lib/Dialect/Shape/Transforms/ShapeToShapeLowering.cpp b/mlir/lib/Dialect/Shape/Transforms/ShapeToShapeLowering.cpp --- a/mlir/lib/Dialect/Shape/Transforms/ShapeToShapeLowering.cpp +++ b/mlir/lib/Dialect/Shape/Transforms/ShapeToShapeLowering.cpp @@ -6,15 +6,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Dialect/Shape/Transforms/Passes.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Shape/IR/Shape.h" -#include "mlir/Dialect/Shape/Transforms/Passes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +#define GEN_PASS_DEF_SHAPETOSHAPELOWERING +#include "mlir/Dialect/Shape/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::shape; @@ -53,7 +59,7 @@ namespace { struct ShapeToShapeLowering - : public ShapeToShapeLoweringBase { + : public impl::ShapeToShapeLoweringBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp --- a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp @@ -20,23 +20,24 @@ #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +#define GEN_PASS_DEF_SPARSIFICATIONPASS +#define GEN_PASS_DEF_SPARSETENSORCONVERSIONPASS +#define GEN_PASS_DEF_SPARSETENSORCODEGEN +#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; using namespace mlir::sparse_tensor; namespace { -//===----------------------------------------------------------------------===// -// Passes declaration. -//===----------------------------------------------------------------------===// - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc" - //===----------------------------------------------------------------------===// // Passes implementation. //===----------------------------------------------------------------------===// -struct SparsificationPass : public SparsificationBase { +struct SparsificationPass + : public impl::SparsificationPassBase { SparsificationPass() = default; SparsificationPass(const SparsificationPass &pass) = default; @@ -68,7 +69,7 @@ }; struct SparseTensorConversionPass - : public SparseTensorConversionBase { + : public impl::SparseTensorConversionPassBase { SparseTensorConversionPass() = default; SparseTensorConversionPass(const SparseTensorConversionPass &pass) = default; @@ -145,7 +146,7 @@ }; struct SparseTensorCodegenPass - : public SparseTensorCodegenBase { + : public impl::SparseTensorCodegenBase { SparseTensorCodegenPass() = default; SparseTensorCodegenPass(const SparseTensorCodegenPass &pass) = default; diff --git a/mlir/lib/Dialect/Tensor/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Tensor/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Tensor/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/Bufferize.cpp @@ -11,10 +11,10 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" -#include "PassDetail.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" @@ -23,11 +23,19 @@ #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/Transforms/DialectConversion.h" +namespace mlir { +namespace tensor { +#define GEN_PASS_DEF_TENSORBUFFERIZE +#include "mlir/Dialect/Tensor/Transforms/Passes.h.inc" +} // namespace tensor +} // namespace mlir + using namespace mlir; using namespace bufferization; namespace { -struct TensorBufferizePass : public TensorBufferizeBase { +struct TensorBufferizePass + : public tensor::impl::TensorBufferizeBase { void runOnOperation() override { BufferizationOptions options = getPartialBufferizationOptions(); options.opFilter.allowDialect(); diff --git a/mlir/lib/Dialect/Tensor/Transforms/PassDetail.h b/mlir/lib/Dialect/Tensor/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/PassDetail.h +++ /dev/null @@ -1,34 +0,0 @@ -//===- 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_TENSOR_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_TENSOR_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace memref { -class MemRefDialect; -} // namespace memref - -namespace scf { -class SCFDialect; -} // namespace scf - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Tensor/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_TENSOR_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaInferShapes.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaInferShapes.cpp --- a/mlir/lib/Dialect/Tosa/Transforms/TosaInferShapes.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaInferShapes.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// +#include "mlir/Dialect/Tosa/Transforms/Passes.h" + #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" -#include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/Dialect/Tosa/Utils/ShapeUtils.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" @@ -26,6 +26,13 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/Support/FormatVariadic.h" +namespace mlir { +namespace tosa { +#define GEN_PASS_DEF_TOSAINFERSHAPES +#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" +} // namespace tosa +} // namespace mlir + using namespace mlir; using namespace mlir::tosa; @@ -275,7 +282,8 @@ /// Pass that performs shape propagation across TOSA operations. This includes /// migrating to within the regions of if/while operations. -struct TosaInferShapes : public TosaInferShapesBase { +struct TosaInferShapes + : public tosa::impl::TosaInferShapesBase { public: void runOnOperation() override { func::FuncOp func = getOperation(); diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaLayerwiseConstantFoldPass.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaLayerwiseConstantFoldPass.cpp --- a/mlir/lib/Dialect/Tosa/Transforms/TosaLayerwiseConstantFoldPass.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaLayerwiseConstantFoldPass.cpp @@ -10,12 +10,20 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" + +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/Tosa/IR/TosaOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace tosa { +#define GEN_PASS_DEF_TOSALAYERWISECONSTANTFOLDPASS +#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" +} // namespace tosa +} // namespace mlir + using namespace mlir; using namespace mlir::tosa; @@ -35,7 +43,8 @@ } struct TosaLayerwiseConstantFoldPass - : public TosaLayerwiseConstantFoldPassBase { + : public tosa::impl::TosaLayerwiseConstantFoldPassBase< + TosaLayerwiseConstantFoldPass> { void runOnOperation() override { auto *ctx = &getContext(); RewritePatternSet patterns(ctx); diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp --- a/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp @@ -10,14 +10,21 @@ // //===----------------------------------------------------------------------===// +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Tosa/IR//TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" +#include "mlir/Dialect/Tosa/IR/TosaOps.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/Dialect/Tosa/Utils/QuantUtils.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace tosa { +#define GEN_PASS_DEF_TOSAMAKEBROADCASTABLE +#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" +} // namespace tosa +} // namespace mlir + using namespace mlir; using namespace mlir::tosa; @@ -232,7 +239,7 @@ /// Pass that enables broadcast by making all input arrays have the same /// number of dimensions. Insert RESHAPE operations to lower rank operand struct TosaMakeBroadcastable - : public TosaMakeBroadcastableBase { + : public tosa::impl::TosaMakeBroadcastableBase { public: void runOnOperation() override { auto func = getOperation(); diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp --- a/mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp @@ -12,18 +12,27 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" + +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/Tosa/IR/TosaOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +namespace mlir { +namespace tosa { +#define GEN_PASS_DEF_TOSAOPTIONALDECOMPOSITIONS +#include "mlir/Dialect/Tosa/Transforms/Passes.h.inc" +} // namespace tosa +} // namespace mlir + using namespace mlir; namespace { struct TosaOptionalDecompositions - : public TosaOptionalDecompositionsBase { + : public tosa::impl::TosaOptionalDecompositionsBase< + TosaOptionalDecompositions> { void runOnOperation() override { auto *ctx = &getContext(); RewritePatternSet patterns(ctx); diff --git a/mlir/lib/Dialect/Transform/Transforms/CheckUses.cpp b/mlir/lib/Dialect/Transform/Transforms/CheckUses.cpp --- a/mlir/lib/Dialect/Transform/Transforms/CheckUses.cpp +++ b/mlir/lib/Dialect/Transform/Transforms/CheckUses.cpp @@ -11,12 +11,20 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Transform/IR/TransformInterfaces.h" #include "mlir/Dialect/Transform/Transforms/Passes.h" + +#include "mlir/Dialect/Transform/IR/TransformInterfaces.h" #include "mlir/Interfaces/SideEffectInterfaces.h" #include "mlir/Pass/Pass.h" #include "llvm/ADT/SetOperations.h" +namespace mlir { +namespace transform { +#define GEN_PASS_DEF_CHECKUSES +#include "mlir/Dialect/Transform/Transforms/Passes.h.inc" +} // namespace transform +} // namespace mlir + using namespace mlir; namespace { @@ -361,12 +369,9 @@ DenseMap> reachableFromCache; }; -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Transform/Transforms/Passes.h.inc" - //// A simple pass that warns about any use of a value by a transform operation // that may be using the value after it has been freed. -class CheckUsesPass : public CheckUsesBase { +class CheckUsesPass : public transform::impl::CheckUsesBase { public: void runOnOperation() override { auto &analysis = getAnalysis(); diff --git a/mlir/lib/Dialect/Vector/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Vector/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Vector/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/Bufferize.cpp @@ -11,20 +11,29 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" -#include "PassDetail.h" + #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/Vector/Transforms/Passes.h" +namespace mlir { +namespace vector { +#define GEN_PASS_DEF_VECTORBUFFERIZE +#include "mlir/Dialect/Vector/Transforms/Passes.h.inc" +} // namespace vector +} // namespace mlir + using namespace mlir; using namespace bufferization; namespace { -struct VectorBufferizePass : public VectorBufferizeBase { +struct VectorBufferizePass + : public vector::impl::VectorBufferizeBase { void runOnOperation() override { BufferizationOptions options = getPartialBufferizationOptions(); options.opFilter.allowDialect(); diff --git a/mlir/lib/Dialect/Vector/Transforms/PassDetail.h b/mlir/lib/Dialect/Vector/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Dialect/Vector/Transforms/PassDetail.h +++ /dev/null @@ -1,30 +0,0 @@ -//===- PassDetail.h - Vector 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_VECTOR_TRANSFORMS_PASSDETAIL_H_ -#define DIALECT_VECTOR_TRANSFORMS_PASSDETAIL_H_ - -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Pass/Pass.h" - -namespace mlir { - -namespace bufferization { -class BufferizationDialect; -} // namespace bufferization - -namespace memref { -class MemRefDialect; -} // namespace memref - -#define GEN_PASS_CLASSES -#include "mlir/Dialect/Vector/Transforms/Passes.h.inc" - -} // namespace mlir - -#endif // DIALECT_VECTOR_TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Reducer/OptReductionPass.cpp b/mlir/lib/Reducer/OptReductionPass.cpp --- a/mlir/lib/Reducer/OptReductionPass.cpp +++ b/mlir/lib/Reducer/OptReductionPass.cpp @@ -14,18 +14,22 @@ #include "mlir/Pass/PassManager.h" #include "mlir/Pass/PassRegistry.h" -#include "mlir/Reducer/PassDetail.h" #include "mlir/Reducer/Passes.h" #include "mlir/Reducer/Tester.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_OPTREDUCTION +#include "mlir/Reducer/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "mlir-reduce" using namespace mlir; namespace { -class OptReductionPass : public OptReductionBase { +class OptReductionPass : public impl::OptReductionBase { public: /// Runs the pass instance in the pass pipeline. void runOnOperation() override; diff --git a/mlir/lib/Reducer/ReductionTreePass.cpp b/mlir/lib/Reducer/ReductionTreePass.cpp --- a/mlir/lib/Reducer/ReductionTreePass.cpp +++ b/mlir/lib/Reducer/ReductionTreePass.cpp @@ -16,7 +16,6 @@ #include "mlir/IR/DialectInterface.h" #include "mlir/IR/OpDefinition.h" -#include "mlir/Reducer/PassDetail.h" #include "mlir/Reducer/Passes.h" #include "mlir/Reducer/ReductionNode.h" #include "mlir/Reducer/ReductionPatternInterface.h" @@ -29,6 +28,11 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/ManagedStatic.h" +namespace mlir { +#define GEN_PASS_DEF_REDUCTIONTREE +#include "mlir/Reducer/Passes.h.inc" +} // namespace mlir + using namespace mlir; /// We implicitly number each operation in the region and if an operation's @@ -183,7 +187,7 @@ /// This class defines the Reduction Tree Pass. It provides a framework to /// to implement a reduction pass using a tree structure to keep track of the /// generated reduced variants. -class ReductionTreePass : public ReductionTreeBase { +class ReductionTreePass : public impl::ReductionTreeBase { public: ReductionTreePass() = default; ReductionTreePass(const ReductionTreePass &pass) = default; diff --git a/mlir/lib/Transforms/CSE.cpp b/mlir/lib/Transforms/CSE.cpp --- a/mlir/lib/Transforms/CSE.cpp +++ b/mlir/lib/Transforms/CSE.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/IR/Dominance.h" #include "mlir/Interfaces/SideEffectInterfaces.h" #include "mlir/Pass/Pass.h" -#include "mlir/Transforms/Passes.h" #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/ScopedHashTable.h" @@ -23,6 +23,11 @@ #include "llvm/Support/RecyclingAllocator.h" #include +namespace mlir { +#define GEN_PASS_DEF_CSE +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { @@ -53,7 +58,7 @@ namespace { /// Simple common sub-expression elimination. -struct CSE : public CSEBase { +struct CSE : public impl::CSEBase { /// 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 --- a/mlir/lib/Transforms/Canonicalizer.cpp +++ b/mlir/lib/Transforms/Canonicalizer.cpp @@ -11,16 +11,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" -#include "mlir/Transforms/Passes.h" + +namespace mlir { +#define GEN_PASS_DEF_CANONICALIZER +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir using namespace mlir; namespace { /// Canonicalize operations in nested regions. -struct Canonicalizer : public CanonicalizerBase { +struct Canonicalizer : public impl::CanonicalizerBase { Canonicalizer() = default; Canonicalizer(const GreedyRewriteConfig &config, ArrayRef disabledPatterns, diff --git a/mlir/lib/Transforms/ControlFlowSink.cpp b/mlir/lib/Transforms/ControlFlowSink.cpp --- a/mlir/lib/Transforms/ControlFlowSink.cpp +++ b/mlir/lib/Transforms/ControlFlowSink.cpp @@ -13,19 +13,24 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/IR/Dominance.h" #include "mlir/Interfaces/ControlFlowInterfaces.h" #include "mlir/Interfaces/SideEffectInterfaces.h" #include "mlir/Transforms/ControlFlowSinkUtils.h" -#include "mlir/Transforms/Passes.h" #include "mlir/Transforms/SideEffectUtils.h" +namespace mlir { +#define GEN_PASS_DEF_CONTROLFLOWSINK +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// A control-flow sink pass. -struct ControlFlowSink : public ControlFlowSinkBase { +struct ControlFlowSink : public impl::ControlFlowSinkBase { void runOnOperation() override; }; } // end anonymous namespace diff --git a/mlir/lib/Transforms/Inliner.cpp b/mlir/lib/Transforms/Inliner.cpp --- a/mlir/lib/Transforms/Inliner.cpp +++ b/mlir/lib/Transforms/Inliner.cpp @@ -13,7 +13,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/Analysis/CallGraph.h" #include "mlir/IR/Threading.h" #include "mlir/Interfaces/CallInterfaces.h" @@ -21,10 +22,14 @@ #include "mlir/Pass/PassManager.h" #include "mlir/Support/DebugStringHelper.h" #include "mlir/Transforms/InliningUtils.h" -#include "mlir/Transforms/Passes.h" #include "llvm/ADT/SCCIterator.h" #include "llvm/Support/Debug.h" +namespace mlir { +#define GEN_PASS_DEF_INLINER +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + #define DEBUG_TYPE "inlining" using namespace mlir; @@ -582,7 +587,7 @@ //===----------------------------------------------------------------------===// namespace { -class InlinerPass : public InlinerBase { +class InlinerPass : public impl::InlinerBase { public: InlinerPass(); InlinerPass(const InlinerPass &) = default; diff --git a/mlir/lib/Transforms/LocationSnapshot.cpp b/mlir/lib/Transforms/LocationSnapshot.cpp --- a/mlir/lib/Transforms/LocationSnapshot.cpp +++ b/mlir/lib/Transforms/LocationSnapshot.cpp @@ -7,13 +7,19 @@ //===----------------------------------------------------------------------===// #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" +namespace mlir { +#define GEN_PASS_DEF_LOCATIONSNAPSHOT +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; /// This function generates new locations from the given IR by snapshotting the @@ -123,7 +129,7 @@ namespace { struct LocationSnapshotPass - : public LocationSnapshotBase { + : public impl::LocationSnapshotBase { LocationSnapshotPass() = default; LocationSnapshotPass(OpPrintingFlags flags, StringRef fileName, StringRef tag) : flags(flags) { diff --git a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp --- a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp +++ b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp @@ -10,18 +10,23 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/Interfaces/LoopLikeInterface.h" #include "mlir/Transforms/LoopInvariantCodeMotionUtils.h" -#include "mlir/Transforms/Passes.h" #include "mlir/Transforms/SideEffectUtils.h" +namespace mlir { +#define GEN_PASS_DEF_LOOPINVARIANTCODEMOTION +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { /// Loop invariant code motion (LICM) pass. struct LoopInvariantCodeMotion - : public LoopInvariantCodeMotionBase { + : public impl::LoopInvariantCodeMotionBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Transforms/OpStats.cpp b/mlir/lib/Transforms/OpStats.cpp --- a/mlir/lib/Transforms/OpStats.cpp +++ b/mlir/lib/Transforms/OpStats.cpp @@ -6,19 +6,24 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Operation.h" #include "mlir/IR/OperationSupport.h" -#include "mlir/Transforms/Passes.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" +namespace mlir { +#define GEN_PASS_DEF_PRINTOPSTATS +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct PrintOpStatsPass : public PrintOpStatsBase { +struct PrintOpStatsPass : public impl::PrintOpStatsBase { explicit PrintOpStatsPass(raw_ostream &os) : os(os) {} explicit PrintOpStatsPass(raw_ostream &os, bool printAsJSON) : os(os) { diff --git a/mlir/lib/Transforms/PassDetail.h b/mlir/lib/Transforms/PassDetail.h deleted file mode 100644 --- a/mlir/lib/Transforms/PassDetail.h +++ /dev/null @@ -1,21 +0,0 @@ -//===- 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" -#include "mlir/Pass/PassManager.h" -#include "mlir/Transforms/Passes.h" - -namespace mlir { -#define GEN_PASS_CLASSES -#include "mlir/Transforms/Passes.h.inc" -} // namespace mlir - -#endif // TRANSFORMS_PASSDETAIL_H_ diff --git a/mlir/lib/Transforms/SCCP.cpp b/mlir/lib/Transforms/SCCP.cpp --- a/mlir/lib/Transforms/SCCP.cpp +++ b/mlir/lib/Transforms/SCCP.cpp @@ -14,7 +14,8 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/Analysis/DataFlow/ConstantPropagationAnalysis.h" #include "mlir/Analysis/DataFlow/DeadCodeAnalysis.h" #include "mlir/IR/Builders.h" @@ -22,7 +23,11 @@ #include "mlir/Interfaces/SideEffectInterfaces.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/FoldUtils.h" -#include "mlir/Transforms/Passes.h" + +namespace mlir { +#define GEN_PASS_DEF_SCCP +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir using namespace mlir; using namespace mlir::dataflow; @@ -109,7 +114,7 @@ //===----------------------------------------------------------------------===// namespace { -struct SCCP : public SCCPBase { +struct SCCP : public impl::SCCPBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Transforms/StripDebugInfo.cpp b/mlir/lib/Transforms/StripDebugInfo.cpp --- a/mlir/lib/Transforms/StripDebugInfo.cpp +++ b/mlir/lib/Transforms/StripDebugInfo.cpp @@ -6,16 +6,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" -#include "mlir/Transforms/Passes.h" + +namespace mlir { +#define GEN_PASS_DEF_STRIPDEBUGINFO +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir using namespace mlir; namespace { -struct StripDebugInfo : public StripDebugInfoBase { +struct StripDebugInfo : public impl::StripDebugInfoBase { void runOnOperation() override; }; } // namespace diff --git a/mlir/lib/Transforms/SymbolDCE.cpp b/mlir/lib/Transforms/SymbolDCE.cpp --- a/mlir/lib/Transforms/SymbolDCE.cpp +++ b/mlir/lib/Transforms/SymbolDCE.cpp @@ -11,14 +11,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/IR/SymbolTable.h" #include "mlir/Transforms/Passes.h" +#include "mlir/IR/SymbolTable.h" + +namespace mlir { +#define GEN_PASS_DEF_SYMBOLDCE +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct SymbolDCE : public SymbolDCEBase { +struct SymbolDCE : public impl::SymbolDCEBase { void runOnOperation() override; /// Compute the liveness of the symbols within the given symbol table. diff --git a/mlir/lib/Transforms/SymbolPrivatize.cpp b/mlir/lib/Transforms/SymbolPrivatize.cpp --- a/mlir/lib/Transforms/SymbolPrivatize.cpp +++ b/mlir/lib/Transforms/SymbolPrivatize.cpp @@ -11,14 +11,19 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" -#include "mlir/IR/SymbolTable.h" #include "mlir/Transforms/Passes.h" +#include "mlir/IR/SymbolTable.h" + +namespace mlir { +#define GEN_PASS_DEF_SYMBOLPRIVATIZE +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct SymbolPrivatize : public SymbolPrivatizeBase { +struct SymbolPrivatize : public impl::SymbolPrivatizeBase { explicit SymbolPrivatize(ArrayRef excludeSymbols); LogicalResult initialize(MLIRContext *context) override; void runOnOperation() override; diff --git a/mlir/lib/Transforms/TopologicalSort.cpp b/mlir/lib/Transforms/TopologicalSort.cpp --- a/mlir/lib/Transforms/TopologicalSort.cpp +++ b/mlir/lib/Transforms/TopologicalSort.cpp @@ -6,14 +6,21 @@ // //===----------------------------------------------------------------------===// -#include "PassDetail.h" +#include "mlir/Transforms/Passes.h" + #include "mlir/IR/RegionKindInterface.h" #include "mlir/Transforms/TopologicalSortUtils.h" +namespace mlir { +#define GEN_PASS_DEF_TOPOLOGICALSORT +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; namespace { -struct TopologicalSortPass : public TopologicalSortBase { +struct TopologicalSortPass + : public impl::TopologicalSortBase { void runOnOperation() override { // Topologically sort the regions of the operation without SSA dominance. getOperation()->walk([](RegionKindInterface op) { diff --git a/mlir/lib/Transforms/ViewOpGraph.cpp b/mlir/lib/Transforms/ViewOpGraph.cpp --- a/mlir/lib/Transforms/ViewOpGraph.cpp +++ b/mlir/lib/Transforms/ViewOpGraph.cpp @@ -7,15 +7,22 @@ //===----------------------------------------------------------------------===// #include "mlir/Transforms/ViewOpGraph.h" -#include "PassDetail.h" + #include "mlir/IR/Block.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/Operation.h" +#include "mlir/Pass/Pass.h" #include "mlir/Support/IndentedOstream.h" +#include "llvm/ADT/StringMap.h" #include "llvm/Support/Format.h" #include "llvm/Support/GraphWriter.h" #include +namespace mlir { +#define GEN_PASS_DEF_VIEWOPGRAPH +#include "mlir/Transforms/Passes.h.inc" +} // namespace mlir + using namespace mlir; static const StringRef kLineStyleControlFlow = "dashed"; @@ -72,7 +79,7 @@ /// This pass generates a Graphviz dataflow visualization of an MLIR operation. /// Note: See https://www.graphviz.org/doc/info/lang.html for more information /// about the Graphviz DOT language. -class PrintOpPass : public ViewOpGraphBase { +class PrintOpPass : public impl::ViewOpGraphBase { public: PrintOpPass(raw_ostream &os) : os(os) {} PrintOpPass(const PrintOpPass &o) : PrintOpPass(o.os.getOStream()) {} diff --git a/mlir/test/lib/Dialect/Tosa/TosaTestPasses.cpp b/mlir/test/lib/Dialect/Tosa/TosaTestPasses.cpp --- a/mlir/test/lib/Dialect/Tosa/TosaTestPasses.cpp +++ b/mlir/test/lib/Dialect/Tosa/TosaTestPasses.cpp @@ -10,9 +10,9 @@ // //===----------------------------------------------------------------------===// +#include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Tosa/Transforms/PassDetail.h" #include "mlir/Dialect/Tosa/Transforms/Passes.h" #include "mlir/Dialect/Tosa/Utils/QuantUtils.h" #include "mlir/IR/BuiltinTypes.h" diff --git a/mlir/tools/mlir-tblgen/PassCAPIGen.cpp b/mlir/tools/mlir-tblgen/PassCAPIGen.cpp --- a/mlir/tools/mlir-tblgen/PassCAPIGen.cpp +++ b/mlir/tools/mlir-tblgen/PassCAPIGen.cpp @@ -74,7 +74,7 @@ return wrap({2}.release()); } void mlirRegister{0}{1}() { - register{1}Pass(); + register{1}(); } )"; @@ -103,7 +103,7 @@ constructorCall = constructor.str(); else constructorCall = - llvm::formatv("create{0}Pass()", pass.getDef()->getName()).str(); + llvm::formatv("create{0}()", pass.getDef()->getName()).str(); os << llvm::formatv(passCreateDef, groupName, defName, constructorCall); } diff --git a/mlir/tools/mlir-tblgen/PassGen.cpp b/mlir/tools/mlir-tblgen/PassGen.cpp --- a/mlir/tools/mlir-tblgen/PassGen.cpp +++ b/mlir/tools/mlir-tblgen/PassGen.cpp @@ -27,8 +27,6 @@ groupName("name", llvm::cl::desc("The name of this group of passes"), llvm::cl::cat(passGenCat)); -static void emitOldPassDecl(const Pass &pass, raw_ostream &os); - /// Extract the list of passes from the TableGen records. static std::vector getPasses(const llvm::RecordKeeper &recordKeeper) { std::vector passes; @@ -356,73 +354,6 @@ os << "#endif // " << enableVarName << "\n"; } -// TODO drop old pass declarations -// The old pass base class is being kept until all the passes have switched to -// the new decls/defs design. -const char *const oldPassDeclBegin = R"( -template -class {0}Base : public {1} { -public: - using Base = {0}Base; - - {0}Base() : {1}(::mlir::TypeID::get()) {{} - {0}Base(const {0}Base &other) : {1}(other) {{} - - /// Returns the command-line argument attached to this pass. - static constexpr ::llvm::StringLiteral getArgumentName() { - return ::llvm::StringLiteral("{2}"); - } - ::llvm::StringRef getArgument() const override { return "{2}"; } - - ::llvm::StringRef getDescription() const override { return "{3}"; } - - /// Returns the derived pass name. - static constexpr ::llvm::StringLiteral getPassName() { - return ::llvm::StringLiteral("{0}"); - } - ::llvm::StringRef getName() const override { return "{0}"; } - - /// Support isa/dyn_cast functionality for the derived pass class. - static bool classof(const ::mlir::Pass *pass) {{ - return pass->getTypeID() == ::mlir::TypeID::get(); - } - - /// A clone method to create a copy of this pass. - std::unique_ptr<::mlir::Pass> clonePass() const override {{ - return std::make_unique(*static_cast(this)); - } - - /// Return the dialect that must be loaded in the context before this pass. - void getDependentDialects(::mlir::DialectRegistry ®istry) const override { - {4} - } - - /// Explicitly declare the TypeID for this class. We declare an explicit private - /// instantiation because Pass classes should only be visible by the current - /// library. - MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID({0}Base) - -protected: -)"; - -/// Emit a backward-compatible declaration of the pass base class. -static void emitOldPassDecl(const Pass &pass, raw_ostream &os) { - StringRef defName = pass.getDef()->getName(); - std::string dependentDialectRegistrations; - { - llvm::raw_string_ostream dialectsOs(dependentDialectRegistrations); - for (StringRef dependentDialect : pass.getDependentDialects()) - dialectsOs << llvm::formatv(dialectRegistrationTemplate, - dependentDialect); - } - os << llvm::formatv(oldPassDeclBegin, defName, pass.getBaseClass(), - pass.getArgument(), pass.getSummary(), - dependentDialectRegistrations); - emitPassOptionDecls(pass, os); - emitPassStatisticDecls(pass, os); - os << "};\n"; -} - static void emitPass(const Pass &pass, raw_ostream &os) { StringRef passName = pass.getDef()->getName(); os << llvm::formatv(passHeader, passName); @@ -440,14 +371,6 @@ emitPass(pass, os); emitRegistrations(passes, os); - - // TODO: Drop old pass declarations. - // Emit the old code until all the passes have switched to the new design. - os << "#ifdef GEN_PASS_CLASSES\n"; - for (const Pass &pass : passes) - emitOldPassDecl(pass, os); - os << "#undef GEN_PASS_CLASSES\n"; - os << "#endif // GEN_PASS_CLASSES\n"; } static mlir::GenRegistration