[clang] [llvm] [mlir] [OpenMP][OMPIRBuilder] Use runtime CC for runtime calls (PR #168608)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 19 07:12:32 PST 2025
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
More information about the llvm-commits
mailing list