Skip to content

[OMPIRBuilder] Introduce struct to hold default kernel teams/threads #116050

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions clang/lib/CodeGen/CGOpenMPRuntime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5880,10 +5880,13 @@ void CGOpenMPRuntime::emitUsesAllocatorsFini(CodeGenFunction &CGF,

void CGOpenMPRuntime::computeMinAndMaxThreadsAndTeams(
const OMPExecutableDirective &D, CodeGenFunction &CGF,
int32_t &MinThreadsVal, int32_t &MaxThreadsVal, int32_t &MinTeamsVal,
int32_t &MaxTeamsVal) {
llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs &Attrs) {
assert(Attrs.MaxTeams.size() == 1 && Attrs.MaxThreads.size() == 1 &&
"invalid default attrs structure");
int32_t &MaxTeamsVal = Attrs.MaxTeams.front();
int32_t &MaxThreadsVal = Attrs.MaxThreads.front();

getNumTeamsExprForTargetDirective(CGF, D, MinTeamsVal, MaxTeamsVal);
getNumTeamsExprForTargetDirective(CGF, D, Attrs.MinTeams, MaxTeamsVal);
getNumThreadsExprForTargetDirective(CGF, D, MaxThreadsVal,
/*UpperBoundOnly=*/true);

Expand All @@ -5901,12 +5904,12 @@ void CGOpenMPRuntime::computeMinAndMaxThreadsAndTeams(
else
continue;

MinThreadsVal = std::max(MinThreadsVal, AttrMinThreadsVal);
Attrs.MinThreads = std::max(Attrs.MinThreads, AttrMinThreadsVal);
if (AttrMaxThreadsVal > 0)
MaxThreadsVal = MaxThreadsVal > 0
? std::min(MaxThreadsVal, AttrMaxThreadsVal)
: AttrMaxThreadsVal;
MinTeamsVal = std::max(MinTeamsVal, AttrMinBlocksVal);
Attrs.MinTeams = std::max(Attrs.MinTeams, AttrMinBlocksVal);
if (AttrMaxBlocksVal > 0)
MaxTeamsVal = MaxTeamsVal > 0 ? std::min(MaxTeamsVal, AttrMaxBlocksVal)
: AttrMaxBlocksVal;
Expand Down
9 changes: 3 additions & 6 deletions clang/lib/CodeGen/CGOpenMPRuntime.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,9 @@ class CGOpenMPRuntime {
llvm::OpenMPIRBuilder OMPBuilder;

/// Helper to determine the min/max number of threads/teams for \p D.
void computeMinAndMaxThreadsAndTeams(const OMPExecutableDirective &D,
CodeGenFunction &CGF,
int32_t &MinThreadsVal,
int32_t &MaxThreadsVal,
int32_t &MinTeamsVal,
int32_t &MaxTeamsVal);
void computeMinAndMaxThreadsAndTeams(
const OMPExecutableDirective &D, CodeGenFunction &CGF,
llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs &Attrs);

/// Helper to emit outlined function for 'target' directive.
/// \param D Directive to emit.
Expand Down
10 changes: 4 additions & 6 deletions clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -744,14 +744,12 @@ void CGOpenMPRuntimeGPU::emitNonSPMDKernel(const OMPExecutableDirective &D,
void CGOpenMPRuntimeGPU::emitKernelInit(const OMPExecutableDirective &D,
CodeGenFunction &CGF,
EntryFunctionState &EST, bool IsSPMD) {
int32_t MinThreadsVal = 1, MaxThreadsVal = -1, MinTeamsVal = 1,
MaxTeamsVal = -1;
computeMinAndMaxThreadsAndTeams(D, CGF, MinThreadsVal, MaxThreadsVal,
MinTeamsVal, MaxTeamsVal);
llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs Attrs;
Attrs.IsSPMD = IsSPMD;
computeMinAndMaxThreadsAndTeams(D, CGF, Attrs);

CGBuilderTy &Bld = CGF.Builder;
Bld.restoreIP(OMPBuilder.createTargetInit(
Bld, IsSPMD, MinThreadsVal, MaxThreadsVal, MinTeamsVal, MaxTeamsVal));
Bld.restoreIP(OMPBuilder.createTargetInit(Bld, Attrs));
if (!IsSPMD)
emitGenericVarsProlog(CGF, EST.Loc);
}
Expand Down
41 changes: 26 additions & 15 deletions llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2225,6 +2225,21 @@ class OpenMPIRBuilder {
MapNamesArray(MapNamesArray) {}
};

/// Container to pass the default attributes with which a kernel must be
/// launched, used to set kernel attributes and populate associated static
/// structures.
///
/// For max values, < 0 means unset, == 0 means set but unknown at compile
/// time. The number of max values will be 1 except for the case where
/// ompx_bare is set.
struct TargetKernelDefaultAttrs {
bool IsSPMD = false;
SmallVector<int32_t, 3> MaxTeams = {-1};
int32_t MinTeams = 1;
SmallVector<int32_t, 3> MaxThreads = {-1};
int32_t MinThreads = 1;
};

/// Data structure that contains the needed information to construct the
/// kernel args vector.
struct TargetKernelArgs {
Expand Down Expand Up @@ -2727,16 +2742,11 @@ class OpenMPIRBuilder {
/// Create a runtime call for kmpc_target_init
///
/// \param Loc The insert and source location description.
/// \param IsSPMD Flag to indicate if the kernel is an SPMD kernel or not.
/// \param MinThreads Minimal number of threads, or 0.
/// \param MaxThreads Maximal number of threads, or 0.
/// \param MinTeams Minimal number of teams, or 0.
/// \param MaxTeams Maximal number of teams, or 0.
InsertPointTy createTargetInit(const LocationDescription &Loc, bool IsSPMD,
int32_t MinThreadsVal = 0,
int32_t MaxThreadsVal = 0,
int32_t MinTeamsVal = 0,
int32_t MaxTeamsVal = 0);
/// \param Attrs Structure containing the default attributes, including
/// numbers of threads and teams to launch the kernel with.
InsertPointTy createTargetInit(
const LocationDescription &Loc,
const llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs &Attrs);

/// Create a runtime call for kmpc_target_deinit
///
Expand Down Expand Up @@ -2961,8 +2971,8 @@ class OpenMPIRBuilder {
/// \param CodeGenIP The insertion point where the call to the outlined
/// function should be emitted.
/// \param EntryInfo The entry information about the function.
/// \param NumTeams Number of teams specified in the num_teams clause.
/// \param NumThreads Number of teams specified in the thread_limit clause.
/// \param DefaultAttrs Structure containing the default numbers of threads
/// and teams to launch the kernel with.
/// \param Inputs The input values to the region that will be passed.
/// as arguments to the outlined function.
/// \param BodyGenCB Callback that will generate the region code.
Expand All @@ -2975,9 +2985,10 @@ class OpenMPIRBuilder {
const LocationDescription &Loc, bool IsOffloadEntry,
OpenMPIRBuilder::InsertPointTy AllocaIP,
OpenMPIRBuilder::InsertPointTy CodeGenIP,
TargetRegionEntryInfo &EntryInfo, ArrayRef<int32_t> NumTeams,
ArrayRef<int32_t> NumThreads, SmallVectorImpl<Value *> &Inputs,
GenMapInfoCallbackTy GenMapInfoCB, TargetBodyGenCallbackTy BodyGenCB,
TargetRegionEntryInfo &EntryInfo,
const TargetKernelDefaultAttrs &DefaultAttrs,
SmallVectorImpl<Value *> &Inputs, GenMapInfoCallbackTy GenMapInfoCB,
TargetBodyGenCallbackTy BodyGenCB,
TargetGenArgAccessorsCallbackTy ArgAccessorFuncCB,
SmallVector<DependData> Dependencies = {}, bool HasNowait = false);

Expand Down
75 changes: 42 additions & 33 deletions llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6119,19 +6119,22 @@ CallInst *OpenMPIRBuilder::createCachedThreadPrivate(
return Builder.CreateCall(Fn, Args);
}

OpenMPIRBuilder::InsertPointTy
OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD,
int32_t MinThreadsVal, int32_t MaxThreadsVal,
int32_t MinTeamsVal, int32_t MaxTeamsVal) {
OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createTargetInit(
const LocationDescription &Loc,
const llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs &Attrs) {
assert(!Attrs.MaxThreads.empty() && !Attrs.MaxTeams.empty() &&
"expected num_threads and num_teams to be specified");

if (!updateToLocation(Loc))
return Loc.IP;

uint32_t SrcLocStrSize;
Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize);
Constant *Ident = getOrCreateIdent(SrcLocStr, SrcLocStrSize);
Constant *IsSPMDVal = ConstantInt::getSigned(
Int8, IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
Constant *UseGenericStateMachineVal = ConstantInt::getSigned(Int8, !IsSPMD);
Int8, Attrs.IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
Constant *UseGenericStateMachineVal =
ConstantInt::getSigned(Int8, !Attrs.IsSPMD);
Constant *MayUseNestedParallelismVal = ConstantInt::getSigned(Int8, true);
Constant *DebugIndentionLevelVal = ConstantInt::getSigned(Int16, 0);

Expand All @@ -6149,21 +6152,23 @@ OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD,

// Manifest the launch configuration in the metadata matching the kernel
// environment.
if (MinTeamsVal > 1 || MaxTeamsVal > 0)
writeTeamsForKernel(T, *Kernel, MinTeamsVal, MaxTeamsVal);
if (Attrs.MinTeams > 1 || Attrs.MaxTeams.front() > 0)
writeTeamsForKernel(T, *Kernel, Attrs.MinTeams, Attrs.MaxTeams.front());

// For max values, < 0 means unset, == 0 means set but unknown.
// If MaxThreads not set, select the maximum between the default workgroup
// size and the MinThreads value.
int32_t MaxThreadsVal = Attrs.MaxThreads.front();
if (MaxThreadsVal < 0)
MaxThreadsVal = std::max(
int32_t(getGridValue(T, Kernel).GV_Default_WG_Size), MinThreadsVal);
int32_t(getGridValue(T, Kernel).GV_Default_WG_Size), Attrs.MinThreads);

if (MaxThreadsVal > 0)
writeThreadBoundsForKernel(T, *Kernel, MinThreadsVal, MaxThreadsVal);
writeThreadBoundsForKernel(T, *Kernel, Attrs.MinThreads, MaxThreadsVal);

Constant *MinThreads = ConstantInt::getSigned(Int32, MinThreadsVal);
Constant *MinThreads = ConstantInt::getSigned(Int32, Attrs.MinThreads);
Constant *MaxThreads = ConstantInt::getSigned(Int32, MaxThreadsVal);
Constant *MinTeams = ConstantInt::getSigned(Int32, MinTeamsVal);
Constant *MaxTeams = ConstantInt::getSigned(Int32, MaxTeamsVal);
Constant *MinTeams = ConstantInt::getSigned(Int32, Attrs.MinTeams);
Constant *MaxTeams = ConstantInt::getSigned(Int32, Attrs.MaxTeams.front());
Constant *ReductionDataSize = ConstantInt::getSigned(Int32, 0);
Constant *ReductionBufferLength = ConstantInt::getSigned(Int32, 0);

Expand Down Expand Up @@ -6730,8 +6735,9 @@ FunctionCallee OpenMPIRBuilder::createDispatchDeinitFunction() {
}

static Expected<Function *> createOutlinedFunction(
OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder, StringRef FuncName,
SmallVectorImpl<Value *> &Inputs,
OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
const OpenMPIRBuilder::TargetKernelDefaultAttrs &DefaultAttrs,
StringRef FuncName, SmallVectorImpl<Value *> &Inputs,
OpenMPIRBuilder::TargetBodyGenCallbackTy &CBFunc,
OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy &ArgAccessorFuncCB) {
SmallVector<Type *> ParameterTypes;
Expand Down Expand Up @@ -6798,7 +6804,7 @@ static Expected<Function *> createOutlinedFunction(

// Insert target init call in the device compilation pass.
if (OMPBuilder.Config.isTargetDevice())
Builder.restoreIP(OMPBuilder.createTargetInit(Builder, /*IsSPMD*/ false));
Builder.restoreIP(OMPBuilder.createTargetInit(Builder, DefaultAttrs));

BasicBlock *UserCodeEntryBB = Builder.GetInsertBlock();

Expand Down Expand Up @@ -6997,16 +7003,18 @@ static Function *emitTargetTaskProxyFunction(OpenMPIRBuilder &OMPBuilder,

static Error emitTargetOutlinedFunction(
OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder, bool IsOffloadEntry,
TargetRegionEntryInfo &EntryInfo, Function *&OutlinedFn,
Constant *&OutlinedFnID, SmallVectorImpl<Value *> &Inputs,
TargetRegionEntryInfo &EntryInfo,
const OpenMPIRBuilder::TargetKernelDefaultAttrs &DefaultAttrs,
Function *&OutlinedFn, Constant *&OutlinedFnID,
SmallVectorImpl<Value *> &Inputs,
OpenMPIRBuilder::TargetBodyGenCallbackTy &CBFunc,
OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy &ArgAccessorFuncCB) {

OpenMPIRBuilder::FunctionGenCallback &&GenerateOutlinedFunction =
[&OMPBuilder, &Builder, &Inputs, &CBFunc,
&ArgAccessorFuncCB](StringRef EntryFnName) {
return createOutlinedFunction(OMPBuilder, Builder, EntryFnName, Inputs,
CBFunc, ArgAccessorFuncCB);
[&](StringRef EntryFnName) {
return createOutlinedFunction(OMPBuilder, Builder, DefaultAttrs,
EntryFnName, Inputs, CBFunc,
ArgAccessorFuncCB);
};

return OMPBuilder.emitTargetRegionFunction(
Expand Down Expand Up @@ -7302,9 +7310,10 @@ void OpenMPIRBuilder::emitOffloadingArraysAndArgs(

static void
emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
OpenMPIRBuilder::InsertPointTy AllocaIP, Function *OutlinedFn,
Constant *OutlinedFnID, ArrayRef<int32_t> NumTeams,
ArrayRef<int32_t> NumThreads, SmallVectorImpl<Value *> &Args,
OpenMPIRBuilder::InsertPointTy AllocaIP,
const OpenMPIRBuilder::TargetKernelDefaultAttrs &DefaultAttrs,
Function *OutlinedFn, Constant *OutlinedFnID,
SmallVectorImpl<Value *> &Args,
OpenMPIRBuilder::GenMapInfoCallbackTy GenMapInfoCB,
SmallVector<llvm::OpenMPIRBuilder::DependData> Dependencies = {},
bool HasNoWait = false) {
Expand Down Expand Up @@ -7385,9 +7394,9 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,

SmallVector<Value *, 3> NumTeamsC;
SmallVector<Value *, 3> NumThreadsC;
for (auto V : NumTeams)
for (auto V : DefaultAttrs.MaxTeams)
NumTeamsC.push_back(llvm::ConstantInt::get(Builder.getInt32Ty(), V));
for (auto V : NumThreads)
for (auto V : DefaultAttrs.MaxThreads)
NumThreadsC.push_back(llvm::ConstantInt::get(Builder.getInt32Ty(), V));

unsigned NumTargetItems = Info.NumberOfPtrs;
Expand Down Expand Up @@ -7428,7 +7437,7 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTarget(
const LocationDescription &Loc, bool IsOffloadEntry, InsertPointTy AllocaIP,
InsertPointTy CodeGenIP, TargetRegionEntryInfo &EntryInfo,
ArrayRef<int32_t> NumTeams, ArrayRef<int32_t> NumThreads,
const TargetKernelDefaultAttrs &DefaultAttrs,
SmallVectorImpl<Value *> &Args, GenMapInfoCallbackTy GenMapInfoCB,
OpenMPIRBuilder::TargetBodyGenCallbackTy CBFunc,
OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy ArgAccessorFuncCB,
Expand All @@ -7445,16 +7454,16 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTarget(
// the target region itself is generated using the callbacks CBFunc
// and ArgAccessorFuncCB
if (Error Err = emitTargetOutlinedFunction(
*this, Builder, IsOffloadEntry, EntryInfo, OutlinedFn, OutlinedFnID,
Args, CBFunc, ArgAccessorFuncCB))
*this, Builder, IsOffloadEntry, EntryInfo, DefaultAttrs, OutlinedFn,
OutlinedFnID, Args, CBFunc, ArgAccessorFuncCB))
return Err;

// If we are not on the target device, then we need to generate code
// to make a remote call (offload) to the previously outlined function
// that represents the target region. Do that now.
if (!Config.isTargetDevice())
emitTargetCall(*this, Builder, AllocaIP, OutlinedFn, OutlinedFnID, NumTeams,
NumThreads, Args, GenMapInfoCB, Dependencies, HasNowait);
emitTargetCall(*this, Builder, AllocaIP, DefaultAttrs, OutlinedFn,
OutlinedFnID, Args, GenMapInfoCB, Dependencies, HasNowait);
return Builder.saveIP();
}

Expand Down
22 changes: 15 additions & 7 deletions llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6229,10 +6229,14 @@ TEST_F(OpenMPIRBuilderTest, TargetRegion) {

TargetRegionEntryInfo EntryInfo("func", 42, 4711, 17);
OpenMPIRBuilder::LocationDescription OmpLoc({Builder.saveIP(), DL});
OpenMPIRBuilder::TargetKernelDefaultAttrs DefaultAttrs = {
/*IsSPMD=*/false, /*MaxTeams=*/{-1}, /*MinTeams=*/0, /*MaxThreads=*/{0},
/*MinThreads=*/0};

ASSERT_EXPECTED_INIT(
OpenMPIRBuilder::InsertPointTy, AfterIP,
OMPBuilder.createTarget(OmpLoc, /*IsOffloadEntry=*/true, Builder.saveIP(),
Builder.saveIP(), EntryInfo, -1, 0, Inputs,
Builder.saveIP(), EntryInfo, DefaultAttrs, Inputs,
GenMapInfoCB, BodyGenCB, SimpleArgAccessorCB));
Builder.restoreIP(AfterIP);
OMPBuilder.finalize();
Expand Down Expand Up @@ -6339,13 +6343,15 @@ TEST_F(OpenMPIRBuilderTest, TargetRegionDevice) {
F->getEntryBlock().getFirstInsertionPt());
TargetRegionEntryInfo EntryInfo("parent", /*DeviceID=*/1, /*FileID=*/2,
/*Line=*/3, /*Count=*/0);
OpenMPIRBuilder::TargetKernelDefaultAttrs DefaultAttrs = {
/*IsSPMD=*/false, /*MaxTeams=*/{-1}, /*MinTeams=*/0, /*MaxThreads=*/{0},
/*MinThreads=*/0};

ASSERT_EXPECTED_INIT(
OpenMPIRBuilder::InsertPointTy, AfterIP,
OMPBuilder.createTarget(Loc, /*IsOffloadEntry=*/true, EntryIP, EntryIP,
EntryInfo, /*NumTeams=*/-1,
/*NumThreads=*/0, CapturedArgs, GenMapInfoCB,
BodyGenCB, SimpleArgAccessorCB));
EntryInfo, DefaultAttrs, CapturedArgs,
GenMapInfoCB, BodyGenCB, SimpleArgAccessorCB));
Builder.restoreIP(AfterIP);

Builder.CreateRetVoid();
Expand Down Expand Up @@ -6496,13 +6502,15 @@ TEST_F(OpenMPIRBuilderTest, ConstantAllocaRaise) {
F->getEntryBlock().getFirstInsertionPt());
TargetRegionEntryInfo EntryInfo("parent", /*DeviceID=*/1, /*FileID=*/2,
/*Line=*/3, /*Count=*/0);
OpenMPIRBuilder::TargetKernelDefaultAttrs DefaultAttrs = {
/*IsSPMD=*/false, /*MaxTeams=*/{-1}, /*MinTeams=*/0, /*MaxThreads=*/{0},
/*MinThreads=*/0};

ASSERT_EXPECTED_INIT(
OpenMPIRBuilder::InsertPointTy, AfterIP,
OMPBuilder.createTarget(Loc, /*IsOffloadEntry=*/true, EntryIP, EntryIP,
EntryInfo, /*NumTeams=*/-1,
/*NumThreads=*/0, CapturedArgs, GenMapInfoCB,
BodyGenCB, SimpleArgAccessorCB));
EntryInfo, DefaultAttrs, CapturedArgs,
GenMapInfoCB, BodyGenCB, SimpleArgAccessorCB));
Builder.restoreIP(AfterIP);

Builder.CreateRetVoid();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4084,9 +4084,6 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
if (!getTargetEntryUniqueInfo(entryInfo, targetOp, parentName))
return failure();

int32_t defaultValTeams = -1;
int32_t defaultValThreads = 0;

MapInfoData mapData;
collectMapDataFromMapOperands(mapData, mapVars, moduleTranslation, dl,
builder);
Expand Down Expand Up @@ -4118,6 +4115,11 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
allocaIP, codeGenIP);
};

// TODO: Populate default attributes based on the construct and clauses.
llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs defaultAttrs = {
/*IsSPMD=*/false, /*MaxTeams=*/{-1}, /*MinTeams=*/0, /*MaxThreads=*/{0},
/*MinThreads=*/0};

llvm::SmallVector<llvm::Value *, 4> kernelInput;
for (size_t i = 0; i < mapVars.size(); ++i) {
// declare target arguments are not passed to kernels as arguments
Expand All @@ -4141,8 +4143,8 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP =
moduleTranslation.getOpenMPBuilder()->createTarget(
ompLoc, isOffloadEntry, allocaIP, builder.saveIP(), entryInfo,
defaultValTeams, defaultValThreads, kernelInput, genMapInfoCB, bodyCB,
argAccessorCB, dds, targetOp.getNowait());
defaultAttrs, kernelInput, genMapInfoCB, bodyCB, argAccessorCB, dds,
targetOp.getNowait());

if (failed(handleError(afterIP, opInst)))
return failure();
Expand Down
Loading
Loading