[llvm] [mlir] [mlir][spirv] Integrate `convert-to-spirv` into `mlir-vulkan-runner` (PR #106082)
Jakub Kuderski via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 26 08:06:51 PDT 2024
================
@@ -64,31 +94,32 @@ struct ConvertToSPIRVPass final
RewritePatternSet patterns(context);
ScfToSPIRVContext scfToSPIRVContext;
- // Map MemRef memory space to SPIR-V storage class.
- spirv::TargetEnv targetEnv(targetAttr);
- bool targetEnvSupportsKernelCapability =
- targetEnv.allows(spirv::Capability::Kernel);
- spirv::MemorySpaceToStorageClassMap memorySpaceMap =
- targetEnvSupportsKernelCapability
- ? spirv::mapMemorySpaceToOpenCLStorageClass
- : spirv::mapMemorySpaceToVulkanStorageClass;
- spirv::MemorySpaceToStorageClassConverter converter(memorySpaceMap);
- spirv::convertMemRefTypesAndAttrs(op, converter);
-
- // Populate patterns for each dialect.
- arith::populateCeilFloorDivExpandOpsPatterns(patterns);
- arith::populateArithToSPIRVPatterns(typeConverter, patterns);
- populateBuiltinFuncToSPIRVPatterns(typeConverter, patterns);
- populateFuncToSPIRVPatterns(typeConverter, patterns);
- populateGPUToSPIRVPatterns(typeConverter, patterns);
- index::populateIndexToSPIRVPatterns(typeConverter, patterns);
- populateMemRefToSPIRVPatterns(typeConverter, patterns);
- populateVectorToSPIRVPatterns(typeConverter, patterns);
- populateSCFToSPIRVPatterns(typeConverter, scfToSPIRVContext, patterns);
- ub::populateUBToSPIRVConversionPatterns(typeConverter, patterns);
-
- if (failed(applyPartialConversion(op, *target, std::move(patterns))))
- return signalPassFailure();
+ if (runOnGPUModules) {
+ SmallVector<Operation *, 1> gpuModules;
+ OpBuilder builder(context);
+ op->walk([&](gpu::GPUModuleOp gpuModule) {
+ builder.setInsertionPoint(gpuModule);
+ gpuModules.push_back(builder.clone(*gpuModule));
+ });
----------------
kuhar wrote:
Could you explain why we do the cloning here?
https://github.com/llvm/llvm-project/pull/106082
More information about the llvm-commits
mailing list