================
@@ -1217,11 +1217,13 @@ void 
CGOpenMPRuntimeGPU::emitParallelCall(CodeGenFunction &CGF,
     CGBuilderTy &Bld = CGF.Builder;
     llvm::Value *NumThreadsVal = NumThreads;
     llvm::Function *WFn = WrapperFunctionsMap[OutlinedFn];
+    llvm::FunctionCallee RuntimeFn = OMPBuilder.getOrCreateRuntimeFunction(
+        CGM.getModule(), OMPRTL___kmpc_parallel_51);
     llvm::Value *ID = llvm::ConstantPointerNull::get(CGM.Int8PtrTy);
     if (WFn)
       ID = Bld.CreateBitOrPointerCast(WFn, CGM.Int8PtrTy);
-    llvm::Value *FnPtr = Bld.CreateBitOrPointerCast(OutlinedFn, CGM.Int8PtrTy);
-
+    llvm::Value *FnPtr = Bld.CreateAddrSpaceCast(OutlinedFn, CGM.Int8PtrTy);
+    FnPtr = Bld.CreateBitOrPointerCast(FnPtr, CGM.Int8PtrTy);
----------------
AlexVlx wrote:

Well the bitcast won't do anything in IR with opaque pointers, at this point 
(and would also be a NOP with untyped ptrs in SPIRV), I believe, so we could 
just start cleaning some up. I was not suggesting that the AS cast be removed, 
but rather that it be made unnecessary by emitting OutlinedFn in the "right" AS 
from the get-go (which, in this case, might simply boil down to defining P4 in 
the DataLayout string?). However, that runs afoul of something that I 
personally find odd in the SPIR-V spec, which we might need to discuss 
elsewhere / offline, which is the fact that it appears that a choice was made 
to put pointers to function in private 
(<https://github.com/KhronosGroup/SPIRV-LLVM-Translator/blob/ff7db6ef1c71860772079b7c26c56b3d016e4205/lib/SPIRV/SPIRVReader.cpp#L377>).
 That seems like a recipe for great pain, and rather quaint considering where 
code usually ends up being stored as well as the fact that some targets play 
tricks with pointers to private (e.g. making them 32-bit only).

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

Reply via email to