llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-mlir-llvm Author: Nick Sarnie (sarnex) <details> <summary>Changes</summary> Some targets have a specific calling convention that should be used for generated calls to runtime functions. Pass that down and use it. --- Patch is 42.09 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/168608.diff 7 Files Affected: - (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+1) - (modified) clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp (+2) - (modified) clang/test/OpenMP/spirv_target_codegen_basic.cpp (+2-1) - (modified) llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h (+10) - (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+120-109) - (modified) mlir/lib/Target/LLVMIR/ModuleTranslation.cpp (+4-1) - (added) mlir/test/Target/LLVMIR/omptarget-runtimecc.mlir (+12) ``````````diff diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 1224fa681cdc0..a8255ac74cfcf 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1039,6 +1039,7 @@ CGOpenMPRuntime::CGOpenMPRuntime(CodeGenModule &CGM) hasRequiresUnifiedSharedMemory(), /*HasRequiresDynamicAllocators*/ false); Config.setDefaultTargetAS( CGM.getContext().getTargetInfo().getTargetAddressSpace(LangAS::Default)); + Config.setRuntimeCC(CGM.getRuntimeCC()); OMPBuilder.setConfig(Config); OMPBuilder.initialize(); diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp index fddeba98adccc..2f69a53787f0c 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp @@ -871,6 +871,8 @@ CGOpenMPRuntimeGPU::CGOpenMPRuntimeGPU(CodeGenModule &CGM) hasRequiresUnifiedSharedMemory(), /*HasRequiresDynamicAllocators*/ false); Config.setDefaultTargetAS( CGM.getContext().getTargetInfo().getTargetAddressSpace(LangAS::Default)); + Config.setRuntimeCC(CGM.getRuntimeCC()); + OMPBuilder.setConfig(Config); if (!CGM.getLangOpts().OpenMPIsTargetDevice) diff --git a/clang/test/OpenMP/spirv_target_codegen_basic.cpp b/clang/test/OpenMP/spirv_target_codegen_basic.cpp index 6e029fb93644d..ad0e110c0532a 100644 --- a/clang/test/OpenMP/spirv_target_codegen_basic.cpp +++ b/clang/test/OpenMP/spirv_target_codegen_basic.cpp @@ -9,9 +9,10 @@ // CHECK: @"_gomp_critical_user_$var" = common addrspace(1) global [8 x i32] zeroinitializer, align 8 // CHECK: define weak_odr protected spir_kernel void @__omp_offloading_{{.*}} - +// CHECK: call spir_func addrspace(9) i32 @__kmpc_target_init( // CHECK: call spir_func addrspace(9) void @__kmpc_critical(ptr addrspace(4) addrspacecast (ptr addrspace(1) @{{.*}} to ptr addrspace(4)), i32 %{{.*}}, ptr addrspace(4) addrspacecast (ptr addrspace(1) @"_gomp_critical_user_$var" to ptr addrspace(4))) // CHECK: call spir_func addrspace(9) void @__kmpc_end_critical(ptr addrspace(4) addrspacecast (ptr addrspace(1) @{{.*}} to ptr addrspace(4)), i32 %{{.*}}, ptr addrspace(4) addrspacecast (ptr addrspace(1) @"_gomp_critical_user_$var" to ptr addrspace(4))) +// CHECK: call spir_func addrspace(9) void @__kmpc_target_deinit( int main() { int ret = 0; diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h index 9f77c24d0b27b..f864a895a1259 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h +++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h @@ -17,6 +17,7 @@ #include "llvm/Frontend/Atomic/Atomic.h" #include "llvm/Frontend/OpenMP/OMPConstants.h" #include "llvm/Frontend/OpenMP/OMPGridValues.h" +#include "llvm/IR/CallingConv.h" #include "llvm/IR/DebugLoc.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Module.h" @@ -138,6 +139,8 @@ class OpenMPIRBuilderConfig { // Default address space for the target. unsigned DefaultTargetAS = 0; + CallingConv::ID RuntimeCC = llvm::CallingConv::C; + LLVM_ABI OpenMPIRBuilderConfig(); LLVM_ABI OpenMPIRBuilderConfig(bool IsTargetDevice, bool IsGPU, bool OpenMPOffloadMandatory, @@ -170,6 +173,8 @@ class OpenMPIRBuilderConfig { unsigned getDefaultTargetAS() const { return DefaultTargetAS; } + CallingConv::ID getRuntimeCC() const { return RuntimeCC; } + bool hasRequiresFlags() const { return RequiresFlags; } LLVM_ABI bool hasRequiresReverseOffload() const; LLVM_ABI bool hasRequiresUnifiedAddress() const; @@ -208,6 +213,7 @@ class OpenMPIRBuilderConfig { void setSeparator(StringRef S) { Separator = S; } void setGridValue(omp::GV G) { GridValue = G; } void setDefaultTargetAS(unsigned AS) { DefaultTargetAS = AS; } + void setRuntimeCC(CallingConv::ID CC) { RuntimeCC = CC; } LLVM_ABI void setHasRequiresReverseOffload(bool Value); LLVM_ABI void setHasRequiresUnifiedAddress(bool Value); @@ -2132,6 +2138,10 @@ class OpenMPIRBuilder { LLVM_ABI Function *getOrCreateRuntimeFunctionPtr(omp::RuntimeFunction FnID); + CallInst *createRuntimeFunctionCall(FunctionCallee Callee, + ArrayRef<Value *> Args, + StringRef Name = ""); + /// Return the (LLVM-IR) string describing the source location \p LocStr. LLVM_ABI Constant *getOrCreateSrcLocStr(StringRef LocStr, uint32_t &SrcLocStrSize); diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp index ac86fa859967e..5101717526263 100644 --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -643,7 +643,7 @@ OpenMPIRBuilder::getOrCreateRuntimeFunction(Module &M, RuntimeFunction FnID) { break; #include "llvm/Frontend/OpenMP/OMPKinds.def" } - + Fn->setCallingConv(Config.getRuntimeCC()); // Add information if the runtime function takes a callback function if (FnID == OMPRTL___kmpc_fork_call || FnID == OMPRTL___kmpc_fork_teams) { if (!Fn->hasMetadata(LLVMContext::MD_callback)) { @@ -682,6 +682,14 @@ Function *OpenMPIRBuilder::getOrCreateRuntimeFunctionPtr(RuntimeFunction FnID) { return Fn; } +CallInst *OpenMPIRBuilder::createRuntimeFunctionCall(FunctionCallee Callee, + ArrayRef<Value *> Args, + StringRef Name) { + CallInst *Call = Builder.CreateCall(Callee, Args, Name); + Call->setCallingConv(Config.getRuntimeCC()); + return Call; +} + void OpenMPIRBuilder::initialize() { initializeTypes(M); } static void raiseUserConstantDataAllocasToEntryBlock(IRBuilderBase &Builder, @@ -1024,7 +1032,7 @@ Constant *OpenMPIRBuilder::getOrCreateSrcLocStr(const LocationDescription &Loc, } Value *OpenMPIRBuilder::getOrCreateThreadID(Value *Ident) { - return Builder.CreateCall( + return createRuntimeFunctionCall( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_global_thread_num), Ident, "omp_global_thread_num"); } @@ -1069,11 +1077,11 @@ OpenMPIRBuilder::createBarrier(const LocationDescription &Loc, Directive Kind, bool UseCancelBarrier = !ForceSimpleCall && isLastFinalizationInfoCancellable(OMPD_parallel); - Value *Result = - Builder.CreateCall(getOrCreateRuntimeFunctionPtr( - UseCancelBarrier ? OMPRTL___kmpc_cancel_barrier - : OMPRTL___kmpc_barrier), - Args); + Value *Result = createRuntimeFunctionCall( + getOrCreateRuntimeFunctionPtr(UseCancelBarrier + ? OMPRTL___kmpc_cancel_barrier + : OMPRTL___kmpc_barrier), + Args); if (UseCancelBarrier && CheckCancelFlag) if (Error Err = emitCancelationCheckImpl(Result, OMPD_parallel)) @@ -1112,7 +1120,7 @@ OpenMPIRBuilder::createCancel(const LocationDescription &Loc, Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize); Value *Ident = getOrCreateIdent(SrcLocStr, SrcLocStrSize); Value *Args[] = {Ident, getOrCreateThreadID(Ident), CancelKind}; - Value *Result = Builder.CreateCall( + Value *Result = createRuntimeFunctionCall( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_cancel), Args); auto ExitCB = [this, CanceledDirective, Loc](InsertPointTy IP) -> Error { if (CanceledDirective == OMPD_parallel) { @@ -1163,7 +1171,7 @@ OpenMPIRBuilder::createCancellationPoint(const LocationDescription &Loc, Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize); Value *Ident = getOrCreateIdent(SrcLocStr, SrcLocStrSize); Value *Args[] = {Ident, getOrCreateThreadID(Ident), CancelKind}; - Value *Result = Builder.CreateCall( + Value *Result = createRuntimeFunctionCall( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_cancellationpoint), Args); auto ExitCB = [this, CanceledDirective, Loc](InsertPointTy IP) -> Error { if (CanceledDirective == OMPD_parallel) { @@ -1212,7 +1220,7 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::emitTargetKernel( SmallVector<Value *> OffloadingArgs{Ident, DeviceID, NumTeams, NumThreads, HostPtr, KernelArgsPtr}; - Return = Builder.CreateCall( + Return = createRuntimeFunctionCall( getOrCreateRuntimeFunction(M, OMPRTL___tgt_target_kernel), OffloadingArgs); @@ -1392,7 +1400,7 @@ static void targetParallelCallback( FunctionCallee RTLFn = OMPIRBuilder->getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_parallel_51); - Builder.CreateCall(RTLFn, Parallel51CallArgs); + OMPIRBuilder->createRuntimeFunctionCall(RTLFn, Parallel51CallArgs); LLVM_DEBUG(dbgs() << "With kmpc_parallel_51 placed: " << *Builder.GetInsertBlock()->getParent() << "\n"); @@ -1477,7 +1485,7 @@ hostParallelCallback(OpenMPIRBuilder *OMPIRBuilder, Function &OutlinedFn, RealArgs.push_back(NullPtrValue); } - Builder.CreateCall(RTLFn, RealArgs); + OMPIRBuilder->createRuntimeFunctionCall(RTLFn, RealArgs); LLVM_DEBUG(dbgs() << "With fork_call placed: " << *Builder.GetInsertBlock()->getParent() << "\n"); @@ -1523,7 +1531,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createParallel( Value *Args[] = { Ident, ThreadID, Builder.CreateIntCast(NumThreads, Int32, /*isSigned*/ false)}; - Builder.CreateCall( + createRuntimeFunctionCall( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_threads), Args); } @@ -1532,7 +1540,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createParallel( Value *Args[] = { Ident, ThreadID, ConstantInt::get(Int32, unsigned(ProcBind), /*isSigned=*/true)}; - Builder.CreateCall( + createRuntimeFunctionCall( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_proc_bind), Args); } @@ -1824,7 +1832,8 @@ void OpenMPIRBuilder::emitFlush(const LocationDescription &Loc) { Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize); Value *Args[] = {getOrCreateIdent(SrcLocStr, SrcLocStrSize)}; - Builder.CreateCall(getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_flush), Args); + createRuntimeFunctionCall(getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_flush), + Args); } void OpenMPIRBuilder::createFlush(const LocationDescription &Loc) { @@ -1842,8 +1851,8 @@ void OpenMPIRBuilder::emitTaskwaitImpl(const LocationDescription &Loc) { Value *Args[] = {Ident, getOrCreateThreadID(Ident)}; // Ignore return result until untied tasks are supported. - Builder.CreateCall(getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_taskwait), - Args); + createRuntimeFunctionCall( + getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_taskwait), Args); } void OpenMPIRBuilder::createTaskwait(const LocationDescription &Loc) { @@ -1860,8 +1869,8 @@ void OpenMPIRBuilder::emitTaskyieldImpl(const LocationDescription &Loc) { Constant *I32Null = ConstantInt::getNullValue(Int32); Value *Args[] = {Ident, getOrCreateThreadID(Ident), I32Null}; - Builder.CreateCall(getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_taskyield), - Args); + createRuntimeFunctionCall( + getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_taskyield), Args); } void OpenMPIRBuilder::createTaskyield(const LocationDescription &Loc) { @@ -2059,7 +2068,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask( // Emit the @__kmpc_omp_task_alloc runtime call // The runtime call returns a pointer to an area where the task captured // variables must be copied before the task is run (TaskData) - CallInst *TaskData = Builder.CreateCall( + CallInst *TaskData = createRuntimeFunctionCall( TaskAllocFn, {/*loc_ref=*/Ident, /*gtid=*/ThreadID, /*flags=*/Flags, /*sizeof_task=*/TaskSize, /*sizeof_shared=*/SharedsSize, /*task_func=*/&OutlinedFn}); @@ -2071,7 +2080,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask( Function *TaskDetachFn = getOrCreateRuntimeFunctionPtr( OMPRTL___kmpc_task_allow_completion_event); llvm::Value *EventVal = - Builder.CreateCall(TaskDetachFn, {Ident, ThreadID, TaskData}); + createRuntimeFunctionCall(TaskDetachFn, {Ident, ThreadID, TaskData}); llvm::Value *EventHandleAddr = Builder.CreatePointerBitCastOrAddrSpaceCast(EventHandle, Builder.getPtrTy(0)); @@ -2148,7 +2157,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask( if (Dependencies.size()) { Function *TaskWaitFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_wait_deps); - Builder.CreateCall( + createRuntimeFunctionCall( TaskWaitFn, {Ident, ThreadID, Builder.getInt32(Dependencies.size()), DepArray, ConstantInt::get(Builder.getInt32Ty(), 0), @@ -2158,21 +2167,21 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask( getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_task_begin_if0); Function *TaskCompleteFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_task_complete_if0); - Builder.CreateCall(TaskBeginFn, {Ident, ThreadID, TaskData}); + createRuntimeFunctionCall(TaskBeginFn, {Ident, ThreadID, TaskData}); CallInst *CI = nullptr; if (HasShareds) - CI = Builder.CreateCall(&OutlinedFn, {ThreadID, TaskData}); + CI = createRuntimeFunctionCall(&OutlinedFn, {ThreadID, TaskData}); else - CI = Builder.CreateCall(&OutlinedFn, {ThreadID}); + CI = createRuntimeFunctionCall(&OutlinedFn, {ThreadID}); CI->setDebugLoc(StaleCI->getDebugLoc()); - Builder.CreateCall(TaskCompleteFn, {Ident, ThreadID, TaskData}); + createRuntimeFunctionCall(TaskCompleteFn, {Ident, ThreadID, TaskData}); Builder.SetInsertPoint(ThenTI); } if (Dependencies.size()) { Function *TaskFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_task_with_deps); - Builder.CreateCall( + createRuntimeFunctionCall( TaskFn, {Ident, ThreadID, TaskData, Builder.getInt32(Dependencies.size()), DepArray, ConstantInt::get(Builder.getInt32Ty(), 0), @@ -2181,7 +2190,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask( } else { // Emit the @__kmpc_omp_task runtime call to spawn the task Function *TaskFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_omp_task); - Builder.CreateCall(TaskFn, {Ident, ThreadID, TaskData}); + createRuntimeFunctionCall(TaskFn, {Ident, ThreadID, TaskData}); } StaleCI->eraseFromParent(); @@ -2218,7 +2227,7 @@ OpenMPIRBuilder::createTaskgroup(const LocationDescription &Loc, // Emit the @__kmpc_taskgroup runtime call to start the taskgroup Function *TaskgroupFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_taskgroup); - Builder.CreateCall(TaskgroupFn, {Ident, ThreadID}); + createRuntimeFunctionCall(TaskgroupFn, {Ident, ThreadID}); BasicBlock *TaskgroupExitBB = splitBB(Builder, true, "taskgroup.exit"); if (Error Err = BodyGenCB(AllocaIP, Builder.saveIP())) @@ -2228,7 +2237,7 @@ OpenMPIRBuilder::createTaskgroup(const LocationDescription &Loc, // Emit the @__kmpc_end_taskgroup runtime call to end the taskgroup Function *EndTaskgroupFn = getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_end_taskgroup); - Builder.CreateCall(EndTaskgroupFn, {Ident, ThreadID}); + createRuntimeFunctionCall(EndTaskgroupFn, {Ident, ThreadID}); return Builder.saveIP(); } @@ -2384,14 +2393,14 @@ static OpenMPIRBuilder::InsertPointTy getInsertPointAfterInstr(Instruction *I) { } Value *OpenMPIRBuilder::getGPUThreadID() { - return Builder.CreateCall( + return createRuntimeFunctionCall( getOrCreateRuntimeFunction(M, OMPRTL___kmpc_get_hardware_thread_id_in_block), {}); } Value *OpenMPIRBuilder::getGPUWarpSize() { - return Builder.CreateCall( + return createRuntimeFunctionCall( getOrCreateRuntimeFunction(M, OMPRTL___kmpc_get_warp_size), {}); } @@ -2450,7 +2459,7 @@ Value *OpenMPIRBuilder::createRuntimeShuffleFunction(InsertPointTy AllocaIP, Value *WarpSizeCast = Builder.CreateIntCast(WarpSize, Builder.getInt16Ty(), /*isSigned=*/true); Value *ShuffleCall = - Builder.CreateCall(ShuffleFunc, {ElemCast, Offset, WarpSizeCast}); + createRuntimeFunctionCall(ShuffleFunc, {ElemCast, Offset, WarpSizeCast}); return castValueToType(AllocaIP, ShuffleCall, CastTy); } @@ -3016,7 +3025,7 @@ Function *OpenMPIRBuilder::emitShuffleAndReduceFunction( ReduceList, Builder.getPtrTy()); Value *RemoteReduceListPtr = Builder.CreatePointerBitCastOrAddrSpaceCast( RemoteListAddrCast, Builder.getPtrTy()); - Builder.CreateCall(ReduceFn, {LocalReduceListPtr, RemoteReduceListPtr}) + createRuntimeFunctionCall(ReduceFn, {LocalReduceListPtr, RemoteReduceListPtr}) ->addFnAttr(Attribute::NoUnwind); Builder.CreateBr(MergeBB); @@ -3237,7 +3246,7 @@ Function *OpenMPIRBuilder::emitListToGlobalReduceFunction( // Call reduce_function(GlobalReduceList, ReduceList) Value *ReduceList = Builder.CreateLoad(Builder.getPtrTy(), ReduceListArgAddrCast); - Builder.CreateCall(ReduceFn, {LocalReduceListAddrCast, ReduceList}) + createRuntimeFunctionCall(ReduceFn, {LocalReduceListAddrCast, ReduceList}) ->addFnAttr(Attribute::NoUnwind); Builder.CreateRetVoid(); Builder.restoreIP(OldIP); @@ -3428,7 +3437,7 @@ Function *OpenMPIRBuilder::emitGlobalToListReduceFunction( // Call reduce_function(ReduceList, GlobalReduceList) Value *ReduceList = Builder.CreateLoad(Builder.getPtrTy(), ReduceListArgAddrCast); - Builder.CreateCall(ReduceFn, {ReduceList, ReductionList}) + createRuntimeFunctionCall(ReduceFn, {ReduceList, ReductionList}) ->addFnAttr(Attribute::NoUnwind); Builder.CreateRetVoid(); Builder.restoreIP(OldIP); @@ -3682,7 +3691,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createReductionsGPU( WcFuncCast}; Function *Pv2Ptr = getOrCreateRuntimeFunctionPtr( RuntimeFunction::OMPRTL___kmpc_nvptx_parallel_reduce_nowait_v2); - Res = Builder.CreateCall(Pv2Ptr, Args); + Res = createRuntimeFunctionCall(Pv2Ptr, Args); } else { CodeGenIP = Builder.saveIP(); StructType *ReductionsBufferTy = StructType::create( @@ -3699,7 +3708,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createReductionsGPU( ReductionInfos, ReductionFunc, ReductionsBufferTy, FuncAttrs); Builder.restoreIP(CodeGenIP); - Value *KernelTeamsReductionPtr = Builder.CreateCall( + Value *KernelTeamsReductionPtr = createRuntimeFunctionCall( RedFixedBuferFn, {}, "_openmp_teams_reductions_buffer_$_$ptr"); Value *Args3[] = {SrcLocInfo, @@ -3716,7 +3725,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createReductionsGPU( Function *TeamsReduceFn = getOrCreateRuntimeFunctionPtr( RuntimeFunction::OMPRTL___kmpc_nvptx_teams_reduce_nowait_v2); - Res = Builder.CreateCall(TeamsReduceFn, Args3); + Res = createRuntimeFunctionCall(TeamsReduceFn, Args3); } // 5. Build if (res == 1) @@ -3921,10 +3930,10 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createReductions( IsNoWait ? RuntimeFunction::OMPRTL___kmpc_reduce_nowait : RuntimeFunction::OMPRTL___kmpc_reduce); CallInst *ReduceCall = - Builder.CreateCall(ReduceFunc, - {Ident, ThreadId, NumVariables, RedArraySize, RedArray, - ReductionFunc, Lock}, - "reduce"); + createRuntimeFunctionCall(ReduceFunc, + {Ident, ThreadId, NumVariables, RedArraySize, + RedArray, ReductionFunc, Lock}, + "reduce"); // Create final reduction entry blocks for the atomic and non-atomic case. // Emit IR that dispatches control flow to one of the blocks based on the @@ -3971,7 +3980,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenM... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/168608 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
