@@ -48,19 +48,38 @@ struct GPUToSPIRVPass final : impl::ConvertGPUToSPIRVBase<GPUToSPIRVPass> {
48
48
void runOnOperation () override ;
49
49
50
50
private:
51
+ spirv::TargetEnvAttr lookupTargetEnvInTargets (gpu::GPUModuleOp moduleOp);
52
+ spirv::TargetEnvAttr lookupTargetEnvOrDefault (gpu::GPUModuleOp moduleOp);
51
53
bool mapMemorySpace;
52
54
};
53
55
56
+ spirv::TargetEnvAttr
57
+ GPUToSPIRVPass::lookupTargetEnvInTargets (gpu::GPUModuleOp moduleOp) {
58
+ for (auto &targetAttr : moduleOp.getTargetsAttr ())
59
+ if (auto spirvTargetEnvAttr =
60
+ llvm::dyn_cast<spirv::TargetEnvAttr>(targetAttr))
61
+ return spirvTargetEnvAttr;
62
+
63
+ return {};
64
+ }
65
+
66
+ spirv::TargetEnvAttr
67
+ GPUToSPIRVPass::lookupTargetEnvOrDefault (gpu::GPUModuleOp moduleOp) {
68
+ if (auto targetEnvAttr = lookupTargetEnvInTargets (moduleOp))
69
+ return targetEnvAttr;
70
+
71
+ return spirv::lookupTargetEnvOrDefault (moduleOp);
72
+ }
73
+
54
74
void GPUToSPIRVPass::runOnOperation () {
55
75
MLIRContext *context = &getContext ();
56
76
ModuleOp module = getOperation ();
57
77
58
78
SmallVector<Operation *, 1 > gpuModules;
59
79
OpBuilder builder (context);
60
80
61
- auto targetEnvSupportsKernelCapability = [](gpu::GPUModuleOp moduleOp) {
62
- Operation *gpuModule = moduleOp.getOperation ();
63
- auto targetAttr = spirv::lookupTargetEnvOrDefault (gpuModule);
81
+ auto targetEnvSupportsKernelCapability = [this ](gpu::GPUModuleOp moduleOp) {
82
+ auto targetAttr = lookupTargetEnvOrDefault (moduleOp);
64
83
spirv::TargetEnv targetEnv (targetAttr);
65
84
return targetEnv.allows (spirv::Capability::Kernel);
66
85
};
@@ -86,7 +105,7 @@ void GPUToSPIRVPass::runOnOperation() {
86
105
// TargetEnv attributes.
87
106
for (Operation *gpuModule : gpuModules) {
88
107
spirv::TargetEnvAttr targetAttr =
89
- spirv::lookupTargetEnvOrDefault (gpuModule);
108
+ lookupTargetEnvOrDefault (llvm::cast<gpu::GPUModuleOp> (gpuModule) );
90
109
91
110
// Map MemRef memory space to SPIR-V storage class first if requested.
92
111
if (mapMemorySpace) {
0 commit comments