@@ -3554,27 +3554,27 @@ emitUserDefinedMapper(Operation *declMapperOp, llvm::IRBuilderBase &builder,
35543554 LLVM::ModuleTranslation &moduleTranslation);
35553555
35563556static llvm::Expected<llvm::Function *>
3557- getOrCreateUserDefinedMapperFunc (Operation *declMapperOp,
3558- llvm::IRBuilderBase &builder,
3557+ getOrCreateUserDefinedMapperFunc (Operation *op, llvm::IRBuilderBase &builder,
35593558 LLVM::ModuleTranslation &moduleTranslation) {
3560- static llvm::DenseMap<const Operation *, llvm::Function *> userDefMapperMap;
3561- auto iter = userDefMapperMap.find (declMapperOp);
3562- if (iter != userDefMapperMap.end ())
3563- return iter->second ;
3559+ auto declMapperOp = cast<omp::DeclareMapperOp>(op);
3560+ std::string mapperFuncName =
3561+ moduleTranslation.getOpenMPBuilder ()->createPlatformSpecificName (
3562+ {" omp_mapper" , declMapperOp.getSymName ()});
3563+ if (auto *lookupFunc = moduleTranslation.lookupFunction (mapperFuncName))
3564+ return lookupFunc;
3565+
35643566 llvm::Expected<llvm::Function *> mapperFunc =
35653567 emitUserDefinedMapper (declMapperOp, builder, moduleTranslation);
35663568 if (!mapperFunc)
35673569 return mapperFunc.takeError ();
3568- userDefMapperMap.try_emplace (declMapperOp, *mapperFunc);
35693570 return mapperFunc;
35703571}
35713572
35723573static llvm::Expected<llvm::Function *>
35733574emitUserDefinedMapper (Operation *op, llvm::IRBuilderBase &builder,
35743575 LLVM::ModuleTranslation &moduleTranslation) {
35753576 auto declMapperOp = cast<omp::DeclareMapperOp>(op);
3576- auto declMapperInfoOp =
3577- *declMapperOp.getOps <omp::DeclareMapperInfoOp>().begin ();
3577+ auto declMapperInfoOp = declMapperOp.getDeclareMapperInfo ();
35783578 DataLayout dl = DataLayout (declMapperOp->getParentOfType <ModuleOp>());
35793579 llvm::OpenMPIRBuilder *ompBuilder = moduleTranslation.getOpenMPBuilder ();
35803580 llvm::Type *varType = moduleTranslation.convertType (declMapperOp.getType ());
@@ -3590,7 +3590,7 @@ emitUserDefinedMapper(Operation *op, llvm::IRBuilderBase &builder,
35903590 [&](InsertPointTy codeGenIP, llvm::Value *ptrPHI,
35913591 llvm::Value *unused2) -> llvm::OpenMPIRBuilder::MapInfosOrErrorTy {
35923592 builder.restoreIP (codeGenIP);
3593- moduleTranslation.mapValue (declMapperOp.getRegion (). getArgument ( 0 ), ptrPHI);
3593+ moduleTranslation.mapValue (declMapperOp.getSymVal ( ), ptrPHI);
35943594 moduleTranslation.mapBlock (&declMapperOp.getRegion ().front (),
35953595 builder.GetInsertBlock ());
35963596 if (failed (moduleTranslation.convertBlock (declMapperOp.getRegion ().front (),
@@ -3857,10 +3857,11 @@ convertOmpTargetData(Operation *op, llvm::IRBuilderBase &builder,
38573857 findAllocaInsertPoint (builder, moduleTranslation);
38583858 llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP = [&]() {
38593859 if (isa<omp::TargetDataOp>(op))
3860- return ompBuilder->createTargetData (
3861- ompLoc, allocaIP, builder.saveIP (), builder.getInt64 (deviceID),
3862- ifCond, info, genMapInfoCB, customMapperCB, nullptr , bodyGenCB,
3863- /* DeviceAddrCB=*/ nullptr );
3860+ return ompBuilder->createTargetData (ompLoc, allocaIP, builder.saveIP (),
3861+ builder.getInt64 (deviceID), ifCond,
3862+ info, genMapInfoCB, customMapperCB,
3863+ /* MapperFunc=*/ nullptr , bodyGenCB,
3864+ /* DeviceAddrCB=*/ nullptr );
38643865 return ompBuilder->createTargetData (
38653866 ompLoc, allocaIP, builder.saveIP (), builder.getInt64 (deviceID), ifCond,
38663867 info, genMapInfoCB, customMapperCB, &RTLFn);
@@ -4546,25 +4547,6 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
45464547 findAllocaInsertPoint (builder, moduleTranslation);
45474548 llvm::OpenMPIRBuilder::LocationDescription ompLoc (builder);
45484549
4549- llvm::OpenMPIRBuilder::TargetDataInfo info (
4550- /* RequiresDevicePointerInfo=*/ false ,
4551- /* SeparateBeginEndCalls=*/ true );
4552- llvm::Value *ifCond = nullptr ;
4553- if (Value targetIfCond = targetOp.getIfExpr ())
4554- ifCond = moduleTranslation.lookupValue (targetIfCond);
4555-
4556- auto customMapperCB = [&](unsigned int i) {
4557- llvm::Value *mapperFunc = nullptr ;
4558- if (combinedInfos.Mappers [i]) {
4559- info.HasMapper = true ;
4560- llvm::Expected<llvm::Function *> newFn = getOrCreateUserDefinedMapperFunc (
4561- combinedInfos.Mappers [i], builder, moduleTranslation);
4562- assert (newFn && " Expect a valid mapper function is available" );
4563- mapperFunc = *newFn;
4564- }
4565- return mapperFunc;
4566- };
4567-
45684550 llvm::OpenMPIRBuilder::TargetDataInfo info (
45694551 /* RequiresDevicePointerInfo=*/ false ,
45704552 /* SeparateBeginEndCalls=*/ true );
@@ -4588,8 +4570,8 @@ convertOmpTarget(Operation &opInst, llvm::IRBuilderBase &builder,
45884570 llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP =
45894571 moduleTranslation.getOpenMPBuilder ()->createTarget (
45904572 ompLoc, isOffloadEntry, allocaIP, builder.saveIP (), info, entryInfo,
4591- defaultValTeams, defaultValThreads , kernelInput, genMapInfoCB, bodyCB,
4592- argAccessorCB, dds, targetOp.getNowait ());
4573+ defaultAttrs, runtimeAttrs, ifCond , kernelInput, genMapInfoCB, bodyCB,
4574+ argAccessorCB, customMapperCB, dds, targetOp.getNowait ());
45934575
45944576 if (failed (handleError (afterIP, opInst)))
45954577 return failure ();
0 commit comments