[mlir][spirv] Clean up transform pass definitions. NFC.
authorJakub Kuderski <kubak@google.com>
Mon, 9 Jan 2023 15:50:06 +0000 (10:50 -0500)
committerJakub Kuderski <kubak@google.com>
Mon, 9 Jan 2023 15:51:08 +0000 (10:51 -0500)
- Make naming more consistent.
- Drop unnecessary custom constructors definitions.
- Move pass documentation to pass descriptions.

Reviewed By: antiagainst

Differential Revision: https://reviews.llvm.org/D141159

mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.h
mlir/include/mlir/Dialect/SPIRV/Transforms/Passes.td
mlir/lib/Dialect/SPIRV/Transforms/CanonicalizeGLPass.cpp
mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp
mlir/lib/Dialect/SPIRV/Transforms/LowerABIAttributesPass.cpp
mlir/lib/Dialect/SPIRV/Transforms/RewriteInsertsPass.cpp
mlir/lib/Dialect/SPIRV/Transforms/UpdateVCEPass.cpp
mlir/tools/mlir-spirv-cpu-runner/mlir-spirv-cpu-runner.cpp
mlir/tools/mlir-vulkan-runner/mlir-vulkan-runner.cpp

index 7c9fc59..f9636c3 100644 (file)
@@ -31,43 +31,6 @@ class ModuleOp;
 #define GEN_PASS_DECL
 #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.
-std::unique_ptr<OperationPass<>> createCanonicalizeGLPass();
-
-/// Creates a module pass that converts composite types used by objects in the
-/// StorageBuffer, PhysicalStorageBuffer, Uniform, and PushConstant storage
-/// classes with layout information.
-/// Right now this pass only supports Vulkan layout rules.
-std::unique_ptr<OperationPass<mlir::ModuleOp>>
-createDecorateSPIRVCompositeTypeLayoutPass();
-
-/// Creates an operation pass that deduces and attaches the minimal version/
-/// capabilities/extensions requirements for spirv.module ops.
-/// For each spirv.module op, this pass requires a `spirv.target_env` attribute
-/// on it or an enclosing module-like op to drive the deduction. The reason is
-/// that an op can be enabled by multiple extensions/capabilities. So we need
-/// to know which one to pick. `spirv.target_env` gives the hard limit as for
-/// what the target environment can support; this pass deduces what are
-/// actually needed for a specific spirv.module op.
-std::unique_ptr<OperationPass<spirv::ModuleOp>>
-createUpdateVersionCapabilityExtensionPass();
-
-/// Creates an operation pass that lowers the ABI attributes specified during
-/// SPIR-V Lowering. Specifically,
-/// 1. Creates the global variables for arguments of entry point function using
-///    the specification in the `spirv.interface_var_abi` attribute for each
-///    argument.
-/// 2. Inserts the EntryPointOp and the ExecutionModeOp for entry point
-///    functions using the specification in the `spirv.entry_point_abi`
-///    attribute.
-std::unique_ptr<OperationPass<spirv::ModuleOp>> createLowerABIAttributesPass();
-
-/// Creates an operation pass that rewrites sequential chains of
-/// spirv.CompositeInsert into spirv.CompositeConstruct.
-std::unique_ptr<OperationPass<spirv::ModuleOp>> createRewriteInsertsPass();
-
 /// Creates an operation pass that unifies access of multiple aliased resources
 /// into access of one single resource.
 using GetTargetEnvFn = std::function<spirv::TargetEnvAttr(spirv::ModuleOp)>;
index f24b1ae..2d9befe 100644 (file)
 
 include "mlir/Pass/PassBase.td"
 
-def SPIRVCompositeTypeLayout
-    : Pass<"decorate-spirv-composite-type-layout", "mlir::ModuleOp"> {
-  let summary = "Decorate SPIR-V composite type with layout info";
-  let constructor = "mlir::spirv::createDecorateSPIRVCompositeTypeLayoutPass()";
+def SPIRVCanonicalizeGLPass : Pass<"spirv-canonicalize-gl", ""> {
+  let summary = "Canonicalize GLSL ops";
+  let description = [{
+    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.
+  }];
 }
 
-def SPIRVCanonicalizeGL : Pass<"spirv-canonicalize-gl", ""> {
-  let summary = "Run canonicalization involving GLSL ops";
-  let constructor = "mlir::spirv::createCanonicalizeGLPass()";
+def SPIRVCompositeTypeLayoutPass
+    : Pass<"decorate-spirv-composite-type-layout", "mlir::ModuleOp"> {
+  let summary = "Decorate SPIR-V composite type with layout info";
+  let description = [{
+    Module pass that converts composite types used by objects in the
+    StorageBuffer, PhysicalStorageBuffer, Uniform, and PushConstant storage
+    classes to attatch layout information.
+    Right now this pass only supports Vulkan layout rules.
+  }];
 }
 
-def SPIRVLowerABIAttributes : Pass<"spirv-lower-abi-attrs", "spirv::ModuleOp"> {
+def SPIRVLowerABIAttributesPass : Pass<"spirv-lower-abi-attrs", "spirv::ModuleOp"> {
   let summary = "Decorate SPIR-V composite type with layout info";
-  let constructor = "mlir::spirv::createLowerABIAttributesPass()";
+  let description = [{
+    Operation pass that lowers the ABI attributes specified during
+    SPIR-V Lowering. Specifically:
+    1. Creates the global variables for arguments of entry point function using
+      the specification in the `spirv.interface_var_abi` attribute for each
+      argument.
+    2. Inserts the EntryPointOp and the ExecutionModeOp for entry point
+      functions using the specification in the `spirv.entry_point_abi`
+      attribute.
+  }];
 }
 
 def SPIRVRewriteInsertsPass : Pass<"spirv-rewrite-inserts", "spirv::ModuleOp"> {
-  let summary = "Rewrite sequential chains of spirv.CompositeInsert operations into "
-                "spirv.CompositeConstruct operations";
-  let constructor = "mlir::spirv::createRewriteInsertsPass()";
+  let summary = "Rewrite sequential chains of `spirv.CompositeInsert` operations "
+                "into `spirv.CompositeConstruct` operations";
 }
 
 def SPIRVUnifyAliasedResourcePass
@@ -40,10 +57,19 @@ def SPIRVUnifyAliasedResourcePass
   let constructor = "mlir::spirv::createUnifyAliasedResourcePass()";
 }
 
-def SPIRVUpdateVCE : Pass<"spirv-update-vce", "spirv::ModuleOp"> {
+def SPIRVUpdateVCEPass : Pass<"spirv-update-vce", "spirv::ModuleOp"> {
   let summary = "Deduce and attach minimal (version, capabilities, extensions) "
                 "requirements to spirv.module ops";
-  let constructor = "mlir::spirv::createUpdateVersionCapabilityExtensionPass()";
+  let description = [{
+    Operation pass that deduces and attaches the minimal version/
+    capabilities/extensions requirements for spirv.module ops.
+    For each spirv.module op, this pass requires a `spirv.target_env` attribute
+    on it or an enclosing module-like op to drive the deduction. The reason is
+    that an op can be enabled by multiple extensions/capabilities. So we need
+    to know which one to pick. `spirv.target_env` gives the hard limit as for
+    what the target environment can support; this pass deduces what are
+    actually needed for a specific spirv.module op.
+  }];
 }
 
 def SPIRVWebGPUPreparePass : Pass<"spirv-webgpu-prepare", "spirv::ModuleOp"> {
index 94039c6..374c205 100644 (file)
@@ -15,7 +15,7 @@
 
 namespace mlir {
 namespace spirv {
-#define GEN_PASS_DEF_SPIRVCANONICALIZEGL
+#define GEN_PASS_DEF_SPIRVCANONICALIZEGLPASS
 #include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc"
 } // namespace spirv
 } // namespace mlir
@@ -24,7 +24,7 @@ using namespace mlir;
 
 namespace {
 class CanonicalizeGLPass final
-    : public spirv::impl::SPIRVCanonicalizeGLBase<CanonicalizeGLPass> {
+    : public spirv::impl::SPIRVCanonicalizeGLPassBase<CanonicalizeGLPass> {
 public:
   void runOnOperation() override {
     RewritePatternSet patterns(&getContext());
@@ -35,7 +35,3 @@ public:
   }
 };
 } // namespace
-
-std::unique_ptr<OperationPass<>> spirv::createCanonicalizeGLPass() {
-  return std::make_unique<CanonicalizeGLPass>();
-}
index 06649ba..42679c1 100644 (file)
@@ -25,7 +25,7 @@ using namespace mlir;
 
 namespace mlir {
 namespace spirv {
-#define GEN_PASS_DEF_SPIRVCOMPOSITETYPELAYOUT
+#define GEN_PASS_DEF_SPIRVCOMPOSITETYPELAYOUTPASS
 #include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc"
 } // namespace spirv
 } // namespace mlir
@@ -106,7 +106,7 @@ static void populateSPIRVLayoutInfoPatterns(RewritePatternSet &patterns) {
 
 namespace {
 class DecorateSPIRVCompositeTypeLayoutPass
-    : public spirv::impl::SPIRVCompositeTypeLayoutBase<
+    : public spirv::impl::SPIRVCompositeTypeLayoutPassBase<
           DecorateSPIRVCompositeTypeLayoutPass> {
   void runOnOperation() override;
 };
@@ -146,8 +146,3 @@ void DecorateSPIRVCompositeTypeLayoutPass::runOnOperation() {
     if (failed(applyFullConversion(spirvModule, target, frozenPatterns)))
       signalPassFailure();
 }
-
-std::unique_ptr<OperationPass<ModuleOp>>
-mlir::spirv::createDecorateSPIRVCompositeTypeLayoutPass() {
-  return std::make_unique<DecorateSPIRVCompositeTypeLayoutPass>();
-}
index 9e25e9f..2a13d4a 100644 (file)
@@ -26,7 +26,7 @@
 
 namespace mlir {
 namespace spirv {
-#define GEN_PASS_DEF_SPIRVLOWERABIATTRIBUTES
+#define GEN_PASS_DEF_SPIRVLOWERABIATTRIBUTESPASS
 #include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc"
 } // namespace spirv
 } // namespace mlir
@@ -199,7 +199,8 @@ public:
 
 /// Pass to implement the ABI information specified as attributes.
 class LowerABIAttributesPass final
-    : public spirv::impl::SPIRVLowerABIAttributesBase<LowerABIAttributesPass> {
+    : public spirv::impl::SPIRVLowerABIAttributesPassBase<
+          LowerABIAttributesPass> {
   void runOnOperation() override;
 };
 } // namespace
@@ -322,8 +323,3 @@ void LowerABIAttributesPass::runOnOperation() {
     }
   }
 }
-
-std::unique_ptr<OperationPass<spirv::ModuleOp>>
-mlir::spirv::createLowerABIAttributesPass() {
-  return std::make_unique<LowerABIAttributesPass>();
-}
index 26f9579..51c36bd 100644 (file)
@@ -117,8 +117,3 @@ LogicalResult RewriteInsertsPass::collectInsertionChain(
   }
   return failure();
 }
-
-std::unique_ptr<mlir::OperationPass<spirv::ModuleOp>>
-mlir::spirv::createRewriteInsertsPass() {
-  return std::make_unique<RewriteInsertsPass>();
-}
index 25bc0c8..22a2953 100644 (file)
@@ -25,7 +25,7 @@
 
 namespace mlir {
 namespace spirv {
-#define GEN_PASS_DEF_SPIRVUPDATEVCE
+#define GEN_PASS_DEF_SPIRVUPDATEVCEPASS
 #include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc"
 } // namespace spirv
 } // namespace mlir
@@ -36,7 +36,7 @@ namespace {
 /// Pass to deduce minimal version/extension/capability requirements for a
 /// spirv::ModuleOp.
 class UpdateVCEPass final
-    : public spirv::impl::SPIRVUpdateVCEBase<UpdateVCEPass> {
+    : public spirv::impl::SPIRVUpdateVCEPassBase<UpdateVCEPass> {
   void runOnOperation() override;
 };
 } // namespace
@@ -184,8 +184,3 @@ void UpdateVCEPass::runOnOperation() {
       deducedExtensions.getArrayRef(), &getContext());
   module->setAttr(spirv::ModuleOp::getVCETripleAttrName(), triple);
 }
-
-std::unique_ptr<OperationPass<spirv::ModuleOp>>
-mlir::spirv::createUpdateVersionCapabilityExtensionPass() {
-  return std::make_unique<UpdateVCEPass>();
-}
index 51abe83..1055305 100644 (file)
@@ -83,8 +83,8 @@ static LogicalResult runMLIRPasses(Operation *module,
   passManager.addPass(createConvertGPUToSPIRVPass(/*mapMemorySpace=*/true));
 
   OpPassManager &nestedPM = passManager.nest<spirv::ModuleOp>();
-  nestedPM.addPass(spirv::createLowerABIAttributesPass());
-  nestedPM.addPass(spirv::createUpdateVersionCapabilityExtensionPass());
+  nestedPM.addPass(spirv::createSPIRVLowerABIAttributesPass());
+  nestedPM.addPass(spirv::createSPIRVUpdateVCEPass());
   passManager.addPass(createLowerHostCodeToLLVMPass());
   passManager.addPass(createConvertSPIRVToLLVMPass());
   return passManager.run(module);
index a1a0bcb..d52621a 100644 (file)
@@ -63,8 +63,8 @@ static LogicalResult runMLIRPasses(Operation *op,
 
   passManager.addPass(createConvertGPUToSPIRVPass(/*mapMemorySpace=*/true));
   OpPassManager &modulePM = passManager.nest<spirv::ModuleOp>();
-  modulePM.addPass(spirv::createLowerABIAttributesPass());
-  modulePM.addPass(spirv::createUpdateVersionCapabilityExtensionPass());
+  modulePM.addPass(spirv::createSPIRVLowerABIAttributesPass());
+  modulePM.addPass(spirv::createSPIRVUpdateVCEPass());
   if (options.spirvWebGPUPrepare)
     modulePM.addPass(spirv::createSPIRVWebGPUPreparePass());