================
@@ -108,6 +138,25 @@ void GPUToSPIRVPass::runOnOperation() {
     if (failed(applyFullConversion(gpuModule, *target, std::move(patterns))))
       return signalPassFailure();
   }
+
+  // For OpenCL, the gpu.func op in the original gpu.module op needs to be
----------------
silee2 wrote:

Keeping the original gpu.func causes legality check error later in the gpu 
compile pipeline. 
If target attr is set for a gpu.module, gpu-to-llvm pass doesn't lower 
gpu.launch_func 
Instead, it is replaced with another gpu.launch_func that has lowered argument 
types (llvm ptrs).
If a gpu.func remains as an input to gpu-to-llvm pass, there is an argument 
mismatch between the new gpu.launch_func and the gpu.func. And a error is fired.
The reason for putting a dummy func.func here is to work around that check.
For func types other than gpu.func, argument types are not checked against 
gpu.launch_func.
But a func.func is still need as there will be a symbol check.


https://github.com/llvm/llvm-project/pull/69941
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to