yxsamliu wrote: > @lalaniket8 @arsenm I don't have a strong opinion, but shouldn't this > transformation be done during lowering to the target? Current version of the > patch brings odd behavior for LLVM IR to SPIR-V lowering for OpenCL kernels. > SPIR-V don't allow one EntryPoint to refer another EntryPoint, so during such > lowering the translator moves kernel's body to impl function (just like this > patch does). Together they result in quite odd behavior: > [KhronosGroup/SPIRV-LLVM-Translator#3115](https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/3115)
My understanding is that for most targets kernel and non-kernel functions have different calling conventions which affects how struct-type arguments are passed. Allowing kernel functions callable in IR could cause issues in mid-end, that is why for any kernel a non-kernel `__clang_ocl_kern_imp*` function is created and used where the kernel function is called. This is necessary to have the proper IR. For LLVM/SPIRV translator, this change should be transparent. `__clang_ocl_kern_imp*` should behave like a common non-kernel function called by a kernel function. @arsenm https://github.com/llvm/llvm-project/pull/115821 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits