@@ -6555,8 +6555,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTargetData(
65556555 const LocationDescription &Loc, InsertPointTy AllocaIP,
65566556 InsertPointTy CodeGenIP, Value *DeviceID, Value *IfCond,
65576557 TargetDataInfo &Info, GenMapInfoCallbackTy GenMapInfoCB,
6558- function_ref<Value *(unsigned int )> CustomMapperCB,
6559- omp::RuntimeFunction *MapperFunc,
6558+ CustomMapperCallbackTy CustomMapperCB, omp::RuntimeFunction *MapperFunc,
65606559 function_ref<InsertPointOrErrorTy(InsertPointTy CodeGenIP,
65616560 BodyGenTy BodyGenType)>
65626561 BodyGenCB,
@@ -6585,9 +6584,10 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTargetData(
65856584 auto BeginThenGen = [&](InsertPointTy AllocaIP,
65866585 InsertPointTy CodeGenIP) -> Error {
65876586 MapInfo = &GenMapInfoCB (Builder.saveIP ());
6588- emitOffloadingArrays (AllocaIP, Builder.saveIP (), *MapInfo, Info,
6589- CustomMapperCB,
6590- /* IsNonContiguous=*/ true , DeviceAddrCB);
6587+ if (Error Err = emitOffloadingArrays (
6588+ AllocaIP, Builder.saveIP (), *MapInfo, Info, CustomMapperCB,
6589+ /* IsNonContiguous=*/ true , DeviceAddrCB))
6590+ return Err;
65916591
65926592 TargetDataRTArgs RTArgs;
65936593 emitOffloadingArraysArgument (Builder, RTArgs, Info);
@@ -7486,14 +7486,17 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
74867486 return Builder.saveIP ();
74877487}
74887488
7489- void OpenMPIRBuilder::emitOffloadingArraysAndArgs (
7489+ Error OpenMPIRBuilder::emitOffloadingArraysAndArgs (
74907490 InsertPointTy AllocaIP, InsertPointTy CodeGenIP, TargetDataInfo &Info,
74917491 TargetDataRTArgs &RTArgs, MapInfosTy &CombinedInfo,
7492- function_ref<Value *( unsigned int )> CustomMapperCB, bool IsNonContiguous,
7492+ CustomMapperCallbackTy CustomMapperCB, bool IsNonContiguous,
74937493 bool ForEndCall, function_ref<void (unsigned int , Value *)> DeviceAddrCB) {
7494- emitOffloadingArrays (AllocaIP, CodeGenIP, CombinedInfo, Info, CustomMapperCB,
7495- IsNonContiguous, DeviceAddrCB);
7494+ if (Error Err =
7495+ emitOffloadingArrays (AllocaIP, CodeGenIP, CombinedInfo, Info,
7496+ CustomMapperCB, IsNonContiguous, DeviceAddrCB))
7497+ return Err;
74967498 emitOffloadingArraysArgument (Builder, RTArgs, Info, ForEndCall);
7499+ return Error::success ();
74977500}
74987501
74997502static void
@@ -7505,7 +7508,7 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
75057508 Value *IfCond, Function *OutlinedFn, Constant *OutlinedFnID,
75067509 SmallVectorImpl<Value *> &Args,
75077510 OpenMPIRBuilder::GenMapInfoCallbackTy GenMapInfoCB,
7508- function_ref<Value *( unsigned int )> CustomMapperCB,
7511+ OpenMPIRBuilder::CustomMapperCallbackTy CustomMapperCB,
75097512 SmallVector<llvm::OpenMPIRBuilder::DependData> Dependencies,
75107513 bool HasNoWait) {
75117514 // Generate a function call to the host fallback implementation of the target
@@ -7580,10 +7583,11 @@ emitTargetCall(OpenMPIRBuilder &OMPBuilder, IRBuilderBase &Builder,
75807583 OpenMPIRBuilder::InsertPointTy CodeGenIP) -> Error {
75817584 OpenMPIRBuilder::MapInfosTy &MapInfo = GenMapInfoCB (Builder.saveIP ());
75827585 OpenMPIRBuilder::TargetDataRTArgs RTArgs;
7583- OMPBuilder.emitOffloadingArraysAndArgs (AllocaIP, Builder.saveIP (), Info,
7584- RTArgs, MapInfo, CustomMapperCB,
7585- /* IsNonContiguous=*/ true ,
7586- /* ForEndCall=*/ false );
7586+ if (Error Err = OMPBuilder.emitOffloadingArraysAndArgs (
7587+ AllocaIP, Builder.saveIP (), Info, RTArgs, MapInfo, CustomMapperCB,
7588+ /* IsNonContiguous=*/ true ,
7589+ /* ForEndCall=*/ false ))
7590+ return Err;
75877591
75887592 SmallVector<Value *, 3 > NumTeamsC;
75897593 for (auto [DefaultVal, RuntimeVal] :
@@ -7692,8 +7696,8 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTarget(
76927696 SmallVectorImpl<Value *> &Inputs, GenMapInfoCallbackTy GenMapInfoCB,
76937697 OpenMPIRBuilder::TargetBodyGenCallbackTy CBFunc,
76947698 OpenMPIRBuilder::TargetGenArgAccessorsCallbackTy ArgAccessorFuncCB,
7695- function_ref<Value *( unsigned int )> CustomMapperCB ,
7696- SmallVector<DependData> Dependencies, bool HasNowait) {
7699+ CustomMapperCallbackTy CustomMapperCB, SmallVector<DependData> Dependencies ,
7700+ bool HasNowait) {
76977701
76987702 if (!updateToLocation (Loc))
76997703 return InsertPointTy ();
@@ -8045,8 +8049,7 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
80458049 function_ref<MapInfosOrErrorTy(InsertPointTy CodeGenIP, llvm::Value *PtrPHI,
80468050 llvm::Value *BeginArg)>
80478051 GenMapInfoCB,
8048- Type *ElemTy, StringRef FuncName,
8049- function_ref<bool(unsigned int , Function **)> CustomMapperCB) {
8052+ Type *ElemTy, StringRef FuncName, CustomMapperCallbackTy CustomMapperCB) {
80508053 SmallVector<Type *> Params;
80518054 Params.emplace_back (Builder.getPtrTy ());
80528055 Params.emplace_back (Builder.getPtrTy ());
@@ -8226,17 +8229,19 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
82268229
82278230 Value *OffloadingArgs[] = {MapperHandle, CurBaseArg, CurBeginArg,
82288231 CurSizeArg, CurMapType, CurNameArg};
8229- Function *ChildMapperFn = nullptr ;
8230- if (CustomMapperCB && CustomMapperCB (I, &ChildMapperFn)) {
8232+
8233+ auto ChildMapperFn = CustomMapperCB (I);
8234+ if (!ChildMapperFn)
8235+ return ChildMapperFn.takeError ();
8236+ if (*ChildMapperFn)
82318237 // Call the corresponding mapper function.
8232- Builder.CreateCall (ChildMapperFn, OffloadingArgs)->setDoesNotThrow ();
8233- } else {
8238+ Builder.CreateCall (* ChildMapperFn, OffloadingArgs)->setDoesNotThrow ();
8239+ else
82348240 // Call the runtime API __tgt_push_mapper_component to fill up the runtime
82358241 // data structure.
82368242 Builder.CreateCall (
82378243 getOrCreateRuntimeFunction (M, OMPRTL___tgt_push_mapper_component),
82388244 OffloadingArgs);
8239- }
82408245 }
82418246
82428247 // Update the pointer to point to the next element that needs to be mapped,
@@ -8263,9 +8268,9 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
82638268 return MapperFn;
82648269}
82658270
8266- void OpenMPIRBuilder::emitOffloadingArrays (
8271+ Error OpenMPIRBuilder::emitOffloadingArrays (
82678272 InsertPointTy AllocaIP, InsertPointTy CodeGenIP, MapInfosTy &CombinedInfo,
8268- TargetDataInfo &Info, function_ref<Value *( unsigned int )> CustomMapperCB,
8273+ TargetDataInfo &Info, CustomMapperCallbackTy CustomMapperCB,
82698274 bool IsNonContiguous,
82708275 function_ref<void (unsigned int , Value *)> DeviceAddrCB) {
82718276
@@ -8274,7 +8279,7 @@ void OpenMPIRBuilder::emitOffloadingArrays(
82748279 Info.NumberOfPtrs = CombinedInfo.BasePointers .size ();
82758280
82768281 if (Info.NumberOfPtrs == 0 )
8277- return ;
8282+ return Error::success () ;
82788283
82798284 Builder.restoreIP (AllocaIP);
82808285 // Detect if we have any capture size requiring runtime evaluation of the
@@ -8438,9 +8443,13 @@ void OpenMPIRBuilder::emitOffloadingArrays(
84388443 // Fill up the mapper array.
84398444 unsigned IndexSize = M.getDataLayout ().getIndexSizeInBits (0 );
84408445 Value *MFunc = ConstantPointerNull::get (PtrTy);
8441- if (CustomMapperCB)
8442- if (Value *CustomMFunc = CustomMapperCB (I))
8443- MFunc = Builder.CreatePointerCast (CustomMFunc, PtrTy);
8446+
8447+ auto CustomMFunc = CustomMapperCB (I);
8448+ if (!CustomMFunc)
8449+ return CustomMFunc.takeError ();
8450+ if (*CustomMFunc)
8451+ MFunc = Builder.CreatePointerCast (*CustomMFunc, PtrTy);
8452+
84448453 Value *MAddr = Builder.CreateInBoundsGEP (
84458454 MappersArray->getAllocatedType (), MappersArray,
84468455 {Builder.getIntN (IndexSize, 0 ), Builder.getIntN (IndexSize, I)});
@@ -8450,8 +8459,9 @@ void OpenMPIRBuilder::emitOffloadingArrays(
84508459
84518460 if (!IsNonContiguous || CombinedInfo.NonContigInfo .Offsets .empty () ||
84528461 Info.NumberOfPtrs == 0 )
8453- return ;
8462+ return Error::success () ;
84548463 emitNonContiguousDescriptor (AllocaIP, CodeGenIP, CombinedInfo, Info);
8464+ return Error::success ();
84558465}
84568466
84578467void OpenMPIRBuilder::emitBranch (BasicBlock *Target) {
0 commit comments