diff --git a/mlir/include/mlir/CMakeLists.txt b/mlir/include/mlir/CMakeLists.txt --- a/mlir/include/mlir/CMakeLists.txt +++ b/mlir/include/mlir/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(Conversion) add_subdirectory(Dialect) add_subdirectory(IR) add_subdirectory(Interfaces) diff --git a/mlir/include/mlir/Conversion/CMakeLists.txt b/mlir/include/mlir/Conversion/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/include/mlir/Conversion/CMakeLists.txt @@ -0,0 +1,4 @@ + +set(LLVM_TARGET_DEFINITIONS Passes.td) +mlir_tablegen(Passes.h.inc -gen-pass-decls) +add_public_tablegen_target(MLIRConversionPassIncGen) diff --git a/mlir/include/mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h b/mlir/include/mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h --- a/mlir/include/mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h +++ b/mlir/include/mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h @@ -27,6 +27,7 @@ /// calling the conversion. std::unique_ptr> createSimpleLoopsToGPUPass(unsigned numBlockDims, unsigned numThreadDims); +std::unique_ptr> createSimpleLoopsToGPUPass(); /// Create a pass that converts every loop operation within the body of the /// FuncOp into a GPU launch. The number of workgroups and workgroup size for @@ -37,6 +38,7 @@ std::unique_ptr> createLoopToGPUPass(ArrayRef numWorkGroups, ArrayRef workGroupSize); +std::unique_ptr> createLoopToGPUPass(); /// Creates a pass that converts loop.parallel operations into a gpu.launch /// operation. The mapping of loop dimensions to launch dimensions is derived diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td new file mode 100644 --- /dev/null +++ b/mlir/include/mlir/Conversion/Passes.td @@ -0,0 +1,168 @@ +//===-- Passes.td - Conversion pass definition file --------*- tablegen -*-===// +// +// 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_CONVERSION_PASSES +#define MLIR_CONVERSION_PASSES + +include "mlir/Pass/PassBase.td" + +//===----------------------------------------------------------------------===// +// AffineToStandard +//===----------------------------------------------------------------------===// + +def ConvertAffineToStandard : Pass<"lower-affine"> { + let summary = "Lower Affine operations to a combination of Standard and Loop " + "operations"; + let constructor = "mlir::createLowerAffinePass()"; +} + +//===----------------------------------------------------------------------===// +// AVX512ToLLVM +//===----------------------------------------------------------------------===// + +def ConvertAVX512ToLLVM : Pass<"convert-avx512-to-llvm"> { + let summary = "Convert the operations from the avx512 dialect into the LLVM " + "dialect"; + let constructor = "mlir::createConvertAVX512ToLLVMPass()"; +} + +//===----------------------------------------------------------------------===// +// GPUToCUDA +//===----------------------------------------------------------------------===// + +def ConvertGpuLaunchFuncToCudaCalls : Pass<"launch-func-to-cuda"> { + let summary = "Convert all launch_func ops to CUDA runtime calls"; + let constructor = "mlir::createConvertGpuLaunchFuncToCudaCallsPass()"; +} + +//===----------------------------------------------------------------------===// +// GPUToNVVM +//===----------------------------------------------------------------------===// + +def ConvertGpuOpsToNVVMOps : Pass<"convert-gpu-to-nvvm"> { + let summary = "Generate NVVM operations for gpu operations"; + let constructor = "mlir::createLowerGpuOpsToNVVMOpsPass()"; +} + +//===----------------------------------------------------------------------===// +// GPUToROCDL +//===----------------------------------------------------------------------===// + +def ConvertGpuOpsToROCDLOps : Pass<"convert-gpu-to-rocdl"> { + let summary = "Generate ROCDL operations for gpu operations"; + let constructor = "mlir::createLowerGpuOpsToROCDLOpsPass()"; +} + +//===----------------------------------------------------------------------===// +// GPUToSPIRV +//===----------------------------------------------------------------------===// + +def ConvertGPUToSPIRV : Pass<"convert-gpu-to-spirv"> { + let summary = "Convert GPU dialect to SPIR-V dialect"; + let constructor = "mlir::createConvertGPUToSPIRVPass()"; +} + +//===----------------------------------------------------------------------===// +// GPUToVulkan +//===----------------------------------------------------------------------===// + +def ConvertGpuLaunchFuncToVulkanLaunchFunc + : Pass<"convert-gpu-launch-to-vulkan-launch"> { + let summary = "Convert gpu.launch_func to vulkanLaunch external call"; + let constructor = "mlir::createConvertGpuLaunchFuncToVulkanLaunchFuncPass()"; +} + +def ConvertVulkanLaunchFuncToVulkanCalls : Pass<"launch-func-to-vulkan"> { + let summary = "Convert vulkanLaunch external call to Vulkan runtime external " + "calls"; + let constructor = "mlir::createConvertVulkanLaunchFuncToVulkanCallsPass()"; +} + +//===----------------------------------------------------------------------===// +// LinalgToLLVM +//===----------------------------------------------------------------------===// + +def ConvertLinalgToLLVM : Pass<"convert-linalg-to-llvm"> { + let summary = "Convert the operations from the linalg dialect into the LLVM " + "dialect"; + let constructor = "mlir::createConvertLinalgToLLVMPass()"; +} + +//===----------------------------------------------------------------------===// +// LinalgToSPIRV +//===----------------------------------------------------------------------===// + +def ConvertLinalgToSPIRV : Pass<"convert-linalg-to-spirv"> { + let summary = "Convert Linalg ops to SPIR-V ops"; + let constructor = "mlir::createLinalgToSPIRVPass()"; +} + +//===----------------------------------------------------------------------===// +// LoopToStandard +//===----------------------------------------------------------------------===// + +def ConvertLoopToStandard : Pass<"convert-loop-to-std"> { + let summary = "Convert Loop dialect to Standard dialect, replacing structured" + " control flow with a CFG"; + let constructor = "mlir::createLowerToCFGPass()"; +} + +//===----------------------------------------------------------------------===// +// LoopsToGPU +//===----------------------------------------------------------------------===// + +def ConvertSimpleLoopsToGPU : Pass<"convert-loops-to-gpu"> { + let summary = "Convert top-level loops to GPU kernels"; + let constructor = "mlir::createSimpleLoopsToGPUPass()"; +} + +def ConvertLoopsToGPU : Pass<"convert-loop-op-to-gpu"> { + let summary = "Convert top-level loop::ForOp to GPU kernels"; + let constructor = "mlir::createLoopToGPUPass()"; +} + +def ConvertParallelLoopToGpu : Pass<"convert-parallel-loops-to-gpu"> { + let summary = "Convert mapped loop.parallel ops to gpu launch operations"; + let constructor = "mlir::createParallelLoopToGpuPass()"; +} + +//===----------------------------------------------------------------------===// +// StandardToLLVM +//===----------------------------------------------------------------------===// + +def ConvertStandardToLLVM : Pass<"convert-std-to-llvm"> { + let summary = "Convert scalar and vector operations from the Standard to the " + "LLVM dialect"; + let constructor = "mlir::createLowerToLLVMPass()"; +} + +//===----------------------------------------------------------------------===// +// StandardToSPIRV +//===----------------------------------------------------------------------===// + +def LegalizeStandardForSPIRV : Pass<"legalize-std-for-spirv"> { + let summary = "Legalize standard ops for SPIR-V lowering"; + let constructor = "mlir::createLegalizeStdOpsForSPIRVLoweringPass()"; +} + +def ConvertStandardToSPIRV : Pass<"convert-std-to-spirv"> { + let summary = "Convert Standard Ops to SPIR-V dialect"; + let constructor = "mlir::createConvertStandardToSPIRVPass()"; +} + +//===----------------------------------------------------------------------===// +// VectorToLLVM +//===----------------------------------------------------------------------===// + +def ConvertVectorToLLVM : Pass<"convert-vector-to-llvm"> { + let summary = "Lower the operations from the vector dialect into the LLVM " + "dialect"; + let constructor = "mlir::createConvertVectorToLLVMPass()"; +} + +#endif // MLIR_CONVERSION_PASSES diff --git a/mlir/include/mlir/Conversion/VectorToLoops/ConvertVectorToLoops.h b/mlir/include/mlir/Conversion/VectorToLoops/ConvertVectorToLoops.h --- a/mlir/include/mlir/Conversion/VectorToLoops/ConvertVectorToLoops.h +++ b/mlir/include/mlir/Conversion/VectorToLoops/ConvertVectorToLoops.h @@ -5,23 +5,18 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + #ifndef MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLOOPS_H_ #define MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLOOPS_H_ -#include "mlir/Transforms/DialectConversion.h" - namespace mlir { class MLIRContext; -class ModuleOp; -template class OpPassBase; +class OwningRewritePatternList; /// Collect a set of patterns to convert from the Vector dialect to loops + std. void populateVectorToAffineLoopsConversionPatterns( MLIRContext *context, OwningRewritePatternList &patterns); -/// Create a pass to convert vector operations to affine loops + std dialect. -OpPassBase *createLowerVectorToLoopsPass(); - } // namespace mlir #endif // MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLOOPS_H_ diff --git a/mlir/include/mlir/InitAllPasses.h b/mlir/include/mlir/InitAllPasses.h --- a/mlir/include/mlir/InitAllPasses.h +++ b/mlir/include/mlir/InitAllPasses.h @@ -22,8 +22,11 @@ #include "mlir/Conversion/GPUToVulkan/ConvertGPUToVulkanPass.h" #include "mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h" #include "mlir/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.h" +#include "mlir/Conversion/LoopToStandard/ConvertLoopToStandard.h" #include "mlir/Conversion/LoopsToGPU/LoopsToGPUPass.h" +#include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.h" +#include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/FxpMathOps/Passes.h" #include "mlir/Dialect/GPU/Passes.h" @@ -54,6 +57,10 @@ #define GEN_PASS_REGISTRATION #include "mlir/Transforms/Passes.h.inc" + // Conversion passes +#define GEN_PASS_REGISTRATION +#include "mlir/Conversion/Passes.h.inc" + // Affine #define GEN_PASS_REGISTRATION #include "mlir/Dialect/Affine/Passes.h.inc" @@ -87,45 +94,6 @@ // SPIR-V #define GEN_PASS_REGISTRATION #include "mlir/Dialect/SPIRV/Passes.h.inc" - - // At the moment we still rely on global initializers for registering passes, - // but we may not do it in the future. - // We must reference the passes in such a way that compilers will not - // delete it all as dead code, even with whole program optimization, - // yet is effectively a NO-OP. As the compiler isn't smart enough - // to know that getenv() never returns -1, this will do the job. - if (std::getenv("bar") != (char *)-1) - return; - - // Affine - createLowerAffinePass(); - - // AVX512 - createConvertAVX512ToLLVMPass(); - - // GPUtoRODCLPass - createLowerGpuOpsToROCDLOpsPass(); - - // GPU - createSimpleLoopsToGPUPass(0, 0); - createLoopToGPUPass({}, {}); - - // CUDA - createConvertGpuLaunchFuncToCudaCallsPass(); - createLowerGpuOpsToNVVMOpsPass(); - - // Linalg - createConvertLinalgToLLVMPass(); - - // SPIR-V - createConvertGPUToSPIRVPass(); - createConvertStandardToSPIRVPass(); - createLegalizeStdOpsForSPIRVLoweringPass(); - createLinalgToSPIRVPass(); - - // Vulkan - createConvertGpuLaunchFuncToVulkanLaunchFuncPass(); - createConvertVulkanLaunchFuncToVulkanCallsPass(); } } // namespace mlir diff --git a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/AVX512ToLLVM/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/AVX512ToLLVM + + DEPENDS + MLIRConversionPassIncGen ) set(LIBS diff --git a/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp b/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp --- a/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp +++ b/mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp @@ -191,7 +191,3 @@ std::unique_ptr> mlir::createConvertAVX512ToLLVMPass() { return std::make_unique(); } - -static PassRegistration pass( - "convert-avx512-to-llvm", - "Convert the operations from the avx512 dialect into the LLVM dialect"); 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 @@ -594,7 +594,3 @@ std::unique_ptr> mlir::createLowerAffinePass() { return std::make_unique(); } - -static PassRegistration - pass("lower-affine", - "Lower affine dialect operations to loop/standard dialect ones"); diff --git a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt --- a/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt +++ b/mlir/lib/Conversion/AffineToStandard/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/AffineToStandard + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries( MLIRAffineToStandard diff --git a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToCUDA/CMakeLists.txt @@ -15,7 +15,12 @@ ) endif() -add_mlir_conversion_library(MLIRGPUtoCUDATransforms ${SOURCES}) +add_mlir_conversion_library(MLIRGPUtoCUDATransforms + ${SOURCES} + + DEPENDS + MLIRConversionPassIncGen +) target_link_libraries(MLIRGPUtoCUDATransforms PUBLIC ${NVPTX_LIBS} diff --git a/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp b/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp --- a/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp +++ b/mlir/lib/Conversion/GPUToCUDA/ConvertLaunchFuncToCudaCalls.cpp @@ -465,7 +465,3 @@ mlir::createConvertGpuLaunchFuncToCudaCallsPass() { return std::make_unique(); } - -static PassRegistration - pass("launch-func-to-cuda", - "Convert all launch_func ops to CUDA runtime calls"); diff --git a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToNVVM/CMakeLists.txt @@ -6,6 +6,7 @@ LowerGpuOpsToNVVMOps.cpp DEPENDS + MLIRConversionPassIncGen MLIRGPUToNVVMIncGen ) 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 @@ -324,6 +324,3 @@ mlir::createLowerGpuOpsToNVVMOpsPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-gpu-to-nvvm", "Generate NVVM operations for gpu operations"); diff --git a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt @@ -1,5 +1,8 @@ add_mlir_conversion_library(MLIRGPUtoROCDLTransforms LowerGpuOpsToROCDLOps.cpp + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries(MLIRGPUtoROCDLTransforms PUBLIC 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 @@ -84,6 +84,3 @@ return std::make_unique(); } -static PassRegistration - pass("convert-gpu-to-rocdl", - "Generate ROCDL operations for gpu operations"); diff --git a/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToSPIRV/CMakeLists.txt @@ -7,6 +7,7 @@ ConvertGPUToSPIRVPass.cpp DEPENDS + MLIRConversionPassIncGen MLIRGPUToSPIRVIncGen ) diff --git a/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp b/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp --- a/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp +++ b/mlir/lib/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.cpp @@ -10,6 +10,7 @@ // into a spv.module operation // //===----------------------------------------------------------------------===// + #include "mlir/Conversion/GPUToSPIRV/ConvertGPUToSPIRVPass.h" #include "mlir/Conversion/GPUToSPIRV/ConvertGPUToSPIRV.h" #include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.h" @@ -19,7 +20,6 @@ #include "mlir/Dialect/SPIRV/SPIRVLowering.h" #include "mlir/Dialect/SPIRV/SPIRVOps.h" #include "mlir/Pass/Pass.h" -#include "mlir/Pass/PassRegistry.h" using namespace mlir; @@ -70,6 +70,3 @@ std::unique_ptr> mlir::createConvertGPUToSPIRVPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-gpu-to-spirv", "Convert GPU dialect to SPIR-V dialect"); diff --git a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt --- a/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUToVulkan/CMakeLists.txt @@ -1,6 +1,9 @@ add_mlir_conversion_library(MLIRGPUtoVulkanTransforms ConvertLaunchFuncToVulkanCalls.cpp ConvertGPULaunchFuncToVulkanLaunchFunc.cpp + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries(MLIRGPUtoVulkanTransforms 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 @@ -169,7 +169,3 @@ mlir::createConvertGpuLaunchFuncToVulkanLaunchFuncPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-gpu-launch-to-vulkan-launch", - "Convert gpu.launch_func to vulkanLaunch external call"); 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 @@ -428,7 +428,3 @@ mlir::createConvertVulkanLaunchFuncToVulkanCallsPass() { return std::make_unique(); } - -static PassRegistration - pass("launch-func-to-vulkan", - "Convert vulkanLaunch external call to Vulkan runtime external calls"); diff --git a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/LinalgToLLVM + + DEPENDS + MLIRConversionPassIncGen ) set(LIBS MLIRAffineToStandard 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 @@ -587,7 +587,3 @@ std::unique_ptr> mlir::createConvertLinalgToLLVMPass() { return std::make_unique(); } - -static PassRegistration pass( - "convert-linalg-to-llvm", - "Convert the operations from the linalg dialect into the LLVM dialect"); diff --git a/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt --- a/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt +++ b/mlir/lib/Conversion/LinalgToSPIRV/CMakeLists.txt @@ -5,6 +5,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SPIRV ${MLIR_MAIN_INCLUDE_DIR}/mlir/IR + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries(MLIRLinalgToSPIRVTransforms 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 @@ -46,6 +46,3 @@ std::unique_ptr> mlir::createLinalgToSPIRVPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-linalg-to-spirv", "Convert Linalg ops to SPIR-V ops"); diff --git a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt --- a/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt +++ b/mlir/lib/Conversion/LoopToStandard/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/LoopToStandard + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries( MLIRLoopToStandard diff --git a/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp b/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp --- a/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp +++ b/mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp @@ -364,7 +364,3 @@ std::unique_ptr mlir::createLowerToCFGPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-loop-to-std", "Convert Loop dialect to Standard dialect, " - "replacing structured control flow with a CFG"); diff --git a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt --- a/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt +++ b/mlir/lib/Conversion/LoopsToGPU/CMakeLists.txt @@ -4,6 +4,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/LoopsToGPU + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries(MLIRLoopsToGPU PUBLIC diff --git a/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp b/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp --- a/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp +++ b/mlir/lib/Conversion/LoopsToGPU/LoopsToGPUPass.cpp @@ -135,6 +135,9 @@ unsigned numThreadDims) { return std::make_unique(numBlockDims, numThreadDims); } +std::unique_ptr> mlir::createSimpleLoopsToGPUPass() { + return std::make_unique(); +} std::unique_ptr> mlir::createLoopToGPUPass(ArrayRef numWorkGroups, @@ -142,18 +145,10 @@ return std::make_unique(numWorkGroups, workGroupSize); } +std::unique_ptr> mlir::createLoopToGPUPass() { + return std::make_unique(); +} std::unique_ptr mlir::createParallelLoopToGpuPass() { return std::make_unique(); } - -static PassRegistration - registration(PASS_NAME, "Convert top-level loops to GPU kernels"); - -static PassRegistration - loopOpToGPU(LOOPOP_TO_GPU_PASS_NAME, - "Convert top-level loop::ForOp to GPU kernels"); - -static PassRegistration - pass("convert-parallel-loops-to-gpu", "Convert mapped loop.parallel ops" - " to gpu launch operations."); diff --git a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/StandardToLLVM/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/StandardToLLVM + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries( MLIRStandardToLLVM diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -2881,7 +2881,3 @@ return std::make_unique(useAlloca, useBarePtrCallConv, emitCWrappers, indexBitwidth); } - -static PassRegistration - pass(PASS_NAME, "Convert scalar and vector operations from the " - "Standard to the LLVM dialect"); diff --git a/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt b/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt --- a/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt +++ b/mlir/lib/Conversion/StandardToSPIRV/CMakeLists.txt @@ -6,6 +6,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/SPIRV ${MLIR_MAIN_INCLUDE_DIR}/mlir/IR + + DEPENDS + MLIRConversionPassIncGen ) target_link_libraries(MLIRStandardToSPIRVTransforms diff --git a/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp b/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp --- a/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp +++ b/mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.cpp @@ -48,6 +48,3 @@ std::unique_ptr> mlir::createConvertStandardToSPIRVPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-std-to-spirv", "Convert Standard Ops to SPIR-V dialect"); diff --git a/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp b/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp --- a/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp +++ b/mlir/lib/Conversion/StandardToSPIRV/LegalizeStandardForSPIRV.cpp @@ -175,6 +175,3 @@ std::unique_ptr mlir::createLegalizeStdOpsForSPIRVLoweringPass() { return std::make_unique(); } - -static PassRegistration - pass("legalize-std-for-spirv", "Legalize standard ops for SPIR-V lowering"); diff --git a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt @@ -3,6 +3,9 @@ ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLLVM + + DEPENDS + MLIRConversionPassIncGen ) set(LIBS MLIRLLVMIR diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp --- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp +++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp @@ -1153,7 +1153,3 @@ std::unique_ptr> mlir::createConvertVectorToLLVMPass() { return std::make_unique(); } - -static PassRegistration - pass("convert-vector-to-llvm", - "Lower the operations from the vector dialect into the LLVM dialect");