@@ -6549,8 +6549,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTargetData(
65496549 const LocationDescription &Loc, InsertPointTy AllocaIP,
65506550 InsertPointTy CodeGenIP, Value *DeviceID, Value *IfCond,
65516551 TargetDataInfo &Info, GenMapInfoCallbackTy GenMapInfoCB,
6552- function_ref<Value *(unsigned int )> CustomMapperCB,
6553- omp::RuntimeFunction *MapperFunc,
6552+ CustomMapperCallbackTy CustomMapperCB, omp::RuntimeFunction *MapperFunc,
65546553 function_ref<InsertPointOrErrorTy(InsertPointTy CodeGenIP,
65556554 BodyGenTy BodyGenType)>
65566555 BodyGenCB,
@@ -6579,9 +6578,10 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTargetData(
65796578 auto BeginThenGen = [&](InsertPointTy AllocaIP,
65806579 InsertPointTy CodeGenIP) -> Error {
65816580 MapInfo = &GenMapInfoCB (Builder.saveIP ());
6582- emitOffloadingArrays (AllocaIP, Builder.saveIP (), *MapInfo, Info,
6583- CustomMapperCB,
6584- /* IsNonContiguous=*/ true , DeviceAddrCB);
6581+ if (Error Err = emitOffloadingArrays (
6582+ AllocaIP, Builder.saveIP (), *MapInfo, Info, CustomMapperCB,
6583+ /* IsNonContiguous=*/ true , DeviceAddrCB))
6584+ return Err;
65856585
65866586 TargetDataRTArgs RTArgs;
65876587 emitOffloadingArraysArgument (Builder, RTArgs, Info);
@@ -7392,14 +7392,17 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
73927392 return Builder.saveIP ();
73937393}
73947394
7395- void OpenMPIRBuilder::emitOffloadingArraysAndArgs (
7395+ Error OpenMPIRBuilder::emitOffloadingArraysAndArgs (
73967396 InsertPointTy AllocaIP, InsertPointTy CodeGenIP, TargetDataInfo &Info,
73977397 TargetDataRTArgs &RTArgs, MapInfosTy &CombinedInfo,
7398- function_ref<Value *( unsigned int )> CustomMapperCB, bool IsNonContiguous,
7398+ CustomMapperCallbackTy CustomMapperCB, bool IsNonContiguous,
73997399 bool ForEndCall, function_ref<void (unsigned int , Value *)> DeviceAddrCB) {
7400- emitOffloadingArrays (AllocaIP, CodeGenIP, CombinedInfo, Info, CustomMapperCB,
7401- IsNonContiguous, DeviceAddrCB);
7400+ if (Error Err =
7401+ emitOffloadingArrays (AllocaIP, CodeGenIP, CombinedInfo, Info,
7402+ CustomMapperCB, IsNonContiguous, DeviceAddrCB))
7403+ return Err;
74027404 emitOffloadingArraysArgument (Builder, RTArgs, Info, ForEndCall);
7405+ return Error::success ();
74037406}
74047407
74057408static void
@@ -7411,7 +7414,7 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
74117414 Value *IfCond, Function *OutlinedFn, Constant *OutlinedFnID,
74127415 SmallVectorImpl<Value *> &Args,
74137416 OpenMPIRBuilder::GenMapInfoCallbackTy GenMapInfoCB,
7414- function_ref<Value *( unsigned int )> CustomMapperCB,
7417+ OpenMPIRBuilder::CustomMapperCallbackTy CustomMapperCB,
74157418 SmallVector<llvm::OpenMPIRBuilder::DependData> Dependencies,
74167419 bool HasNoWait) {
74177420 // Generate a function call to the host fallback implementation of the target
@@ -7486,10 +7489,11 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
74867489 OpenMPIRBuilder::InsertPointTy CodeGenIP) -> Error {
74877490 OpenMPIRBuilder::MapInfosTy &MapInfo = GenMapInfoCB (Builder.saveIP ());
74887491 OpenMPIRBuilder::TargetDataRTArgs RTArgs;
7489- OMPBuilder.emitOffloadingArraysAndArgs (AllocaIP, Builder.saveIP (), Info,
7490- RTArgs, MapInfo, CustomMapperCB,
7491- /* IsNonContiguous=*/ true ,
7492- /* ForEndCall=*/ false );
7492+ if (Error Err = OMPBuilder.emitOffloadingArraysAndArgs (
7493+ AllocaIP, Builder.saveIP (), Info, RTArgs, MapInfo, CustomMapperCB,
7494+ /* IsNonContiguous=*/ true ,
7495+ /* ForEndCall=*/ false ))
7496+ return Err;
74937497
74947498 SmallVector<Value *, 3 > NumTeamsC;
74957499 for (auto [DefaultVal, RuntimeVal] :
@@ -7598,8 +7602,8 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTarget(
75987602 SmallVectorImpl<Value *> &Inputs, GenMapInfoCallbackTy GenMapInfoCB,
75997603 OpenMPIRBuilder::TargetBodyGenCallbackTy CBFunc,
76007604 OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy ArgAccessorFuncCB,
7601- function_ref<Value *( unsigned int )> CustomMapperCB ,
7602- SmallVector<DependData> Dependencies, bool HasNowait) {
7605+ CustomMapperCallbackTy CustomMapperCB, SmallVector<DependData> Dependencies ,
7606+ bool HasNowait) {
76037607
76047608 if (!updateToLocation (Loc))
76057609 return InsertPointTy ();
@@ -7951,8 +7955,7 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
79517955 function_ref<MapInfosOrErrorTy(InsertPointTy CodeGenIP, llvm::Value *PtrPHI,
79527956 llvm::Value *BeginArg)>
79537957 GenMapInfoCB,
7954- Type *ElemTy, StringRef FuncName,
7955- function_ref<bool(unsigned int , Function **)> CustomMapperCB) {
7958+ Type *ElemTy, StringRef FuncName, CustomMapperCallbackTy CustomMapperCB) {
79567959 SmallVector<Type *> Params;
79577960 Params.emplace_back (Builder.getPtrTy ());
79587961 Params.emplace_back (Builder.getPtrTy ());
@@ -8132,17 +8135,19 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
81328135
81338136 Value *OffloadingArgs[] = {MapperHandle, CurBaseArg, CurBeginArg,
81348137 CurSizeArg, CurMapType, CurNameArg};
8135- Function *ChildMapperFn = nullptr ;
8136- if (CustomMapperCB && CustomMapperCB (I, &ChildMapperFn)) {
8138+
8139+ auto ChildMapperFn = CustomMapperCB (I);
8140+ if (!ChildMapperFn)
8141+ return ChildMapperFn.takeError ();
8142+ if (*ChildMapperFn)
81378143 // Call the corresponding mapper function.
8138- Builder.CreateCall (ChildMapperFn, OffloadingArgs)->setDoesNotThrow ();
8139- } else {
8144+ Builder.CreateCall (* ChildMapperFn, OffloadingArgs)->setDoesNotThrow ();
8145+ else
81408146 // Call the runtime API __tgt_push_mapper_component to fill up the runtime
81418147 // data structure.
81428148 Builder.CreateCall (
81438149 getOrCreateRuntimeFunction (M, OMPRTL___tgt_push_mapper_component),
81448150 OffloadingArgs);
8145- }
81468151 }
81478152
81488153 // Update the pointer to point to the next element that needs to be mapped,
@@ -8169,9 +8174,9 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
81698174 return MapperFn;
81708175}
81718176
8172- void OpenMPIRBuilder::emitOffloadingArrays (
8177+ Error OpenMPIRBuilder::emitOffloadingArrays (
81738178 InsertPointTy AllocaIP, InsertPointTy CodeGenIP, MapInfosTy &CombinedInfo,
8174- TargetDataInfo &Info, function_ref<Value *( unsigned int )> CustomMapperCB,
8179+ TargetDataInfo &Info, CustomMapperCallbackTy CustomMapperCB,
81758180 bool IsNonContiguous,
81768181 function_ref<void (unsigned int , Value *)> DeviceAddrCB) {
81778182
@@ -8180,7 +8185,7 @@ void OpenMPIRBuilder::emitOffloadingArrays(
81808185 Info.NumberOfPtrs = CombinedInfo.BasePointers .size ();
81818186
81828187 if (Info.NumberOfPtrs == 0 )
8183- return ;
8188+ return Error::success () ;
81848189
81858190 Builder.restoreIP (AllocaIP);
81868191 // Detect if we have any capture size requiring runtime evaluation of the
@@ -8344,9 +8349,13 @@ void OpenMPIRBuilder::emitOffloadingArrays(
83448349 // Fill up the mapper array.
83458350 unsigned IndexSize = M.getDataLayout ().getIndexSizeInBits (0 );
83468351 Value *MFunc = ConstantPointerNull::get (PtrTy);
8347- if (CustomMapperCB)
8348- if (Value *CustomMFunc = CustomMapperCB (I))
8349- MFunc = Builder.CreatePointerCast (CustomMFunc, PtrTy);
8352+
8353+ auto CustomMFunc = CustomMapperCB (I);
8354+ if (!CustomMFunc)
8355+ return CustomMFunc.takeError ();
8356+ if (*CustomMFunc)
8357+ MFunc = Builder.CreatePointerCast (*CustomMFunc, PtrTy);
8358+
83508359 Value *MAddr = Builder.CreateInBoundsGEP (
83518360 MappersArray->getAllocatedType (), MappersArray,
83528361 {Builder.getIntN (IndexSize, 0 ), Builder.getIntN (IndexSize, I)});
@@ -8356,8 +8365,9 @@ void OpenMPIRBuilder::emitOffloadingArrays(
83568365
83578366 if (!IsNonContiguous || CombinedInfo.NonContigInfo .Offsets .empty () ||
83588367 Info.NumberOfPtrs == 0 )
8359- return ;
8368+ return Error::success () ;
83608369 emitNonContiguousDescriptor (AllocaIP, CodeGenIP, CombinedInfo, Info);
8370+ return Error::success ();
83618371}
83628372
83638373void OpenMPIRBuilder::emitBranch (BasicBlock *Target) {
0 commit comments