aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Optimizer/OpenMP
diff options
context:
space:
mode:
Diffstat (limited to 'flang/lib/Optimizer/OpenMP')
-rw-r--r--flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp23
-rw-r--r--flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp2
-rw-r--r--flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp14
-rw-r--r--flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp26
-rw-r--r--flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp131
-rw-r--r--flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp8
6 files changed, 106 insertions, 98 deletions
diff --git a/flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp b/flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp
index 31076f6..2b3ac16 100644
--- a/flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp
+++ b/flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp
@@ -246,9 +246,9 @@ private:
genParallelOp(mlir::Location loc, mlir::ConversionPatternRewriter &rewriter,
looputils::InductionVariableInfos &ivInfos,
mlir::IRMapping &mapper) const {
- auto parallelOp = rewriter.create<mlir::omp::ParallelOp>(loc);
+ auto parallelOp = mlir::omp::ParallelOp::create(rewriter, loc);
rewriter.createBlock(&parallelOp.getRegion());
- rewriter.setInsertionPoint(rewriter.create<mlir::omp::TerminatorOp>(loc));
+ rewriter.setInsertionPoint(mlir::omp::TerminatorOp::create(rewriter, loc));
genLoopNestIndVarAllocs(rewriter, ivInfos, mapper);
return parallelOp;
@@ -319,8 +319,8 @@ private:
auto firYield =
mlir::cast<fir::YieldOp>(ompRegion.back().getTerminator());
rewriter.setInsertionPoint(firYield);
- rewriter.create<mlir::omp::YieldOp>(firYield.getLoc(),
- firYield.getOperands());
+ mlir::omp::YieldOp::create(rewriter, firYield.getLoc(),
+ firYield.getOperands());
rewriter.eraseOp(firYield);
}
};
@@ -342,8 +342,8 @@ private:
mlir::OpBuilder::InsertionGuard guard(rewriter);
rewriter.setInsertionPointAfter(localizer);
- auto privatizer = rewriter.create<mlir::omp::PrivateClauseOp>(
- localizer.getLoc(), sym.getLeafReference().str() + ".omp",
+ auto privatizer = mlir::omp::PrivateClauseOp::create(
+ rewriter, localizer.getLoc(), sym.getLeafReference().str() + ".omp",
localizer.getTypeAttr().getValue(),
mlir::omp::DataSharingClauseType::Private);
@@ -369,8 +369,9 @@ private:
mlir::OpBuilder::InsertionGuard guard(rewriter);
rewriter.setInsertionPointAfter(firReducer);
- auto ompReducer = rewriter.create<mlir::omp::DeclareReductionOp>(
- firReducer.getLoc(), sym.getLeafReference().str() + ".omp",
+ auto ompReducer = mlir::omp::DeclareReductionOp::create(
+ rewriter, firReducer.getLoc(),
+ sym.getLeafReference().str() + ".omp",
firReducer.getTypeAttr().getValue());
cloneFIRRegionToOMP(firReducer.getAllocRegion(),
@@ -392,7 +393,7 @@ private:
}
auto wsloopOp =
- rewriter.create<mlir::omp::WsloopOp>(loop.getLoc(), wsloopClauseOps);
+ mlir::omp::WsloopOp::create(rewriter, loop.getLoc(), wsloopClauseOps);
wsloopOp.setComposite(isComposite);
Fortran::common::openmp::EntryBlockArgs wsloopArgs;
@@ -402,7 +403,7 @@ private:
wsloopOp.getRegion());
auto loopNestOp =
- rewriter.create<mlir::omp::LoopNestOp>(loop.getLoc(), clauseOps);
+ mlir::omp::LoopNestOp::create(rewriter, loop.getLoc(), clauseOps);
// Clone the loop's body inside the loop nest construct using the
// mapped values.
@@ -410,7 +411,7 @@ private:
loopNestOp.getRegion().begin(), mapper);
rewriter.setInsertionPointToEnd(&loopNestOp.getRegion().back());
- rewriter.create<mlir::omp::YieldOp>(loop->getLoc());
+ mlir::omp::YieldOp::create(rewriter, loop->getLoc());
// `local` region arguments are transferred/cloned from the `do concurrent`
// loop to the loopnest op when the region is cloned above. Instead, these
diff --git a/flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp b/flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp
index 9554808..ae5c0ec 100644
--- a/flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp
+++ b/flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp
@@ -83,7 +83,7 @@ public:
for (Value res : callOp->getResults()) {
opBuilder.setInsertionPoint(callOp);
undefResults.emplace_back(
- opBuilder.create<fir::UndefOp>(res.getLoc(), res.getType()));
+ fir::UndefOp::create(opBuilder, res.getLoc(), res.getType()));
}
callOp->replaceAllUsesWith(undefResults);
}
diff --git a/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp b/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
index 3009746..66593ec 100644
--- a/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
+++ b/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
@@ -280,7 +280,7 @@ private:
args.reduction.vars = clauseOps.reductionVars;
}
- auto wrapperOp = rewriter.create<OpTy>(loopOp.getLoc(), clauseOps);
+ auto wrapperOp = OpTy::create(rewriter, loopOp.getLoc(), clauseOps);
mlir::Block *opBlock = genEntryBlock(rewriter, args, wrapperOp.getRegion());
mlir::IRMapping mapper;
@@ -307,16 +307,16 @@ private:
Fortran::common::openmp::EntryBlockArgs parallelArgs;
parallelArgs.priv.vars = parallelClauseOps.privateVars;
- auto parallelOp = rewriter.create<mlir::omp::ParallelOp>(loopOp.getLoc(),
- parallelClauseOps);
+ auto parallelOp = mlir::omp::ParallelOp::create(rewriter, loopOp.getLoc(),
+ parallelClauseOps);
genEntryBlock(rewriter, parallelArgs, parallelOp.getRegion());
parallelOp.setComposite(true);
rewriter.setInsertionPoint(
- rewriter.create<mlir::omp::TerminatorOp>(loopOp.getLoc()));
+ mlir::omp::TerminatorOp::create(rewriter, loopOp.getLoc()));
mlir::omp::DistributeOperands distributeClauseOps;
- auto distributeOp = rewriter.create<mlir::omp::DistributeOp>(
- loopOp.getLoc(), distributeClauseOps);
+ auto distributeOp = mlir::omp::DistributeOp::create(
+ rewriter, loopOp.getLoc(), distributeClauseOps);
distributeOp.setComposite(true);
rewriter.createBlock(&distributeOp.getRegion());
@@ -326,7 +326,7 @@ private:
wsloopArgs.reduction.vars = wsloopClauseOps.reductionVars;
auto wsloopOp =
- rewriter.create<mlir::omp::WsloopOp>(loopOp.getLoc(), wsloopClauseOps);
+ mlir::omp::WsloopOp::create(rewriter, loopOp.getLoc(), wsloopClauseOps);
wsloopOp.setComposite(true);
genEntryBlock(rewriter, wsloopArgs, wsloopOp.getRegion());
diff --git a/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp b/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp
index 27a57f7..f6af684 100644
--- a/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp
+++ b/flang/lib/Optimizer/OpenMP/LowerWorkshare.cpp
@@ -160,17 +160,17 @@ static mlir::func::FuncOp createCopyFunc(mlir::Location loc, mlir::Type varType,
llvm::SmallVector<mlir::Type> argsTy = {varType, varType};
auto funcType = mlir::FunctionType::get(builder.getContext(), argsTy, {});
mlir::func::FuncOp funcOp =
- modBuilder.create<mlir::func::FuncOp>(loc, copyFuncName, funcType);
+ mlir::func::FuncOp::create(modBuilder, loc, copyFuncName, funcType);
funcOp.setVisibility(mlir::SymbolTable::Visibility::Private);
fir::factory::setInternalLinkage(funcOp);
builder.createBlock(&funcOp.getRegion(), funcOp.getRegion().end(), argsTy,
{loc, loc});
builder.setInsertionPointToStart(&funcOp.getRegion().back());
- Value loaded = builder.create<fir::LoadOp>(loc, funcOp.getArgument(1));
- builder.create<fir::StoreOp>(loc, loaded, funcOp.getArgument(0));
+ Value loaded = fir::LoadOp::create(builder, loc, funcOp.getArgument(1));
+ fir::StoreOp::create(builder, loc, loaded, funcOp.getArgument(0));
- builder.create<mlir::func::ReturnOp>(loc);
+ mlir::func::ReturnOp::create(builder, loc);
return funcOp;
}
@@ -234,9 +234,9 @@ static void parallelizeRegion(Region &sourceRegion, Region &targetRegion,
if (auto reloaded = rootMapping.lookupOrNull(v))
return nullptr;
Type ty = v.getType();
- Value alloc = allocaBuilder.create<fir::AllocaOp>(loc, ty);
- singleBuilder.create<fir::StoreOp>(loc, singleMapping.lookup(v), alloc);
- Value reloaded = parallelBuilder.create<fir::LoadOp>(loc, ty, alloc);
+ Value alloc = fir::AllocaOp::create(allocaBuilder, loc, ty);
+ fir::StoreOp::create(singleBuilder, loc, singleMapping.lookup(v), alloc);
+ Value reloaded = fir::LoadOp::create(parallelBuilder, loc, ty, alloc);
rootMapping.map(v, reloaded);
return alloc;
};
@@ -293,7 +293,7 @@ static void parallelizeRegion(Region &sourceRegion, Region &targetRegion,
allParallelized = false;
}
}
- singleBuilder.create<omp::TerminatorOp>(loc);
+ omp::TerminatorOp::create(singleBuilder, loc);
return {allParallelized, copyPrivate};
};
@@ -370,7 +370,7 @@ static void parallelizeRegion(Region &sourceRegion, Region &targetRegion,
SymbolRefAttr::get(funcOp));
}
omp::SingleOp singleOp =
- rootBuilder.create<omp::SingleOp>(loc, singleOperands);
+ omp::SingleOp::create(rootBuilder, loc, singleOperands);
singleOp.getRegion().push_back(singleBlock);
targetRegion.front().getOperations().splice(
singleOp->getIterator(), allocaBlock->getOperations());
@@ -386,7 +386,7 @@ static void parallelizeRegion(Region &sourceRegion, Region &targetRegion,
if (isLast)
wsloopOperands.nowait = rootBuilder.getUnitAttr();
auto wsloop =
- rootBuilder.create<mlir::omp::WsloopOp>(loc, wsloopOperands);
+ mlir::omp::WsloopOp::create(rootBuilder, loc, wsloopOperands);
auto clonedWslw = cast<omp::WorkshareLoopWrapperOp>(
rootBuilder.clone(*wslw, rootMapping));
wsloop.getRegion().takeBody(clonedWslw.getRegion());
@@ -465,9 +465,9 @@ LogicalResult lowerWorkshare(mlir::omp::WorkshareOp wsOp, DominanceInfo &di) {
// it because our `parallelizeRegion` function works on regions and not
// blocks.
omp::WorkshareOp newOp =
- rootBuilder.create<omp::WorkshareOp>(loc, omp::WorkshareOperands());
+ omp::WorkshareOp::create(rootBuilder, loc, omp::WorkshareOperands());
if (!wsOp.getNowait())
- rootBuilder.create<omp::BarrierOp>(loc);
+ omp::BarrierOp::create(rootBuilder, loc);
parallelizeRegion(wsOp.getRegion(), newOp.getRegion(), rootMapping, loc,
di);
@@ -505,7 +505,7 @@ LogicalResult lowerWorkshare(mlir::omp::WorkshareOp wsOp, DominanceInfo &di) {
omp::SingleOperands operands;
operands.nowait = wsOp.getNowaitAttr();
- omp::SingleOp newOp = rootBuilder.create<omp::SingleOp>(loc, operands);
+ omp::SingleOp newOp = omp::SingleOp::create(rootBuilder, loc, operands);
newOp.getRegion().getBlocks().splice(newOp.getRegion().getBlocks().begin(),
wsOp.getRegion().getBlocks());
diff --git a/flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp b/flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp
index f052cf8..57be863 100644
--- a/flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp
+++ b/flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp
@@ -137,41 +137,50 @@ class MapInfoFinalizationPass
!fir::factory::isOptionalArgument(descriptor.getDefiningOp()))
return descriptor;
- mlir::Value &slot = localBoxAllocas[descriptor.getDefiningOp()];
- if (slot) {
- return slot;
+ mlir::Value &alloca = localBoxAllocas[descriptor.getDefiningOp()];
+ mlir::Location loc = boxMap->getLoc();
+
+ if (!alloca) {
+ // The fir::BoxOffsetOp only works with !fir.ref<!fir.box<...>> types, as
+ // allowing it to access non-reference box operations can cause some
+ // problematic SSA IR. However, in the case of assumed shape's the type
+ // is not a !fir.ref, in these cases to retrieve the appropriate
+ // !fir.ref<!fir.box<...>> to access the data we need to map we must
+ // perform an alloca and then store to it and retrieve the data from the
+ // new alloca.
+ mlir::OpBuilder::InsertPoint insPt = builder.saveInsertionPoint();
+ mlir::Block *allocaBlock = builder.getAllocaBlock();
+ assert(allocaBlock && "No alloca block found for this top level op");
+ builder.setInsertionPointToStart(allocaBlock);
+
+ mlir::Type allocaType = descriptor.getType();
+ if (fir::isBoxAddress(allocaType))
+ allocaType = fir::unwrapRefType(allocaType);
+ alloca = fir::AllocaOp::create(builder, loc, allocaType);
+ builder.restoreInsertionPoint(insPt);
}
- // The fir::BoxOffsetOp only works with !fir.ref<!fir.box<...>> types, as
- // allowing it to access non-reference box operations can cause some
- // problematic SSA IR. However, in the case of assumed shape's the type
- // is not a !fir.ref, in these cases to retrieve the appropriate
- // !fir.ref<!fir.box<...>> to access the data we need to map we must
- // perform an alloca and then store to it and retrieve the data from the new
- // alloca.
- mlir::OpBuilder::InsertPoint insPt = builder.saveInsertionPoint();
- mlir::Block *allocaBlock = builder.getAllocaBlock();
- mlir::Location loc = boxMap->getLoc();
- assert(allocaBlock && "No alloca block found for this top level op");
- builder.setInsertionPointToStart(allocaBlock);
-
- mlir::Type allocaType = descriptor.getType();
- if (fir::isBoxAddress(allocaType))
- allocaType = fir::unwrapRefType(allocaType);
- auto alloca = builder.create<fir::AllocaOp>(loc, allocaType);
- builder.restoreInsertionPoint(insPt);
// We should only emit a store if the passed in data is present, it is
// possible a user passes in no argument to an optional parameter, in which
// case we cannot store or we'll segfault on the emitted memcpy.
+ // TODO: We currently emit a present -> load/store every time we use a
+ // mapped value that requires a local allocation, this isn't the most
+ // efficient, although, it is more correct in a lot of situations. One
+ // such situation is emitting a this series of instructions in separate
+ // segments of a branch (e.g. two target regions in separate else/if branch
+ // mapping the same function argument), however, it would be nice to be able
+ // to optimize these situations e.g. raising the load/store out of the
+ // branch if possible. But perhaps this is best left to lower level
+ // optimisation passes.
auto isPresent =
- builder.create<fir::IsPresentOp>(loc, builder.getI1Type(), descriptor);
+ fir::IsPresentOp::create(builder, loc, builder.getI1Type(), descriptor);
builder.genIfOp(loc, {}, isPresent, false)
.genThen([&]() {
descriptor = builder.loadIfRef(loc, descriptor);
- builder.create<fir::StoreOp>(loc, descriptor, alloca);
+ fir::StoreOp::create(builder, loc, descriptor, alloca);
})
.end();
- return slot = alloca;
+ return alloca;
}
/// Function that generates a FIR operation accessing the descriptor's
@@ -183,8 +192,8 @@ class MapInfoFinalizationPass
int64_t mapType,
fir::FirOpBuilder &builder) {
mlir::Location loc = descriptor.getLoc();
- mlir::Value baseAddrAddr = builder.create<fir::BoxOffsetOp>(
- loc, descriptor, fir::BoxFieldAttr::base_addr);
+ mlir::Value baseAddrAddr = fir::BoxOffsetOp::create(
+ builder, loc, descriptor, fir::BoxFieldAttr::base_addr);
mlir::Type underlyingVarType =
llvm::cast<mlir::omp::PointerLikeType>(
@@ -195,8 +204,8 @@ class MapInfoFinalizationPass
underlyingVarType = seqType.getEleTy();
// Member of the descriptor pointing at the allocated data
- return builder.create<mlir::omp::MapInfoOp>(
- loc, baseAddrAddr.getType(), descriptor,
+ return mlir::omp::MapInfoOp::create(
+ builder, loc, baseAddrAddr.getType(), descriptor,
mlir::TypeAttr::get(underlyingVarType),
builder.getIntegerAttr(builder.getIntegerType(64, false), mapType),
builder.getAttr<mlir::omp::VariableCaptureKindAttr>(
@@ -293,12 +302,12 @@ class MapInfoFinalizationPass
mlir::Value boxChar = op.getVarPtr();
if (mlir::isa<fir::ReferenceType>(op.getVarPtr().getType()))
- boxChar = builder.create<fir::LoadOp>(loc, op.getVarPtr());
+ boxChar = fir::LoadOp::create(builder, loc, op.getVarPtr());
fir::BoxCharType boxCharType =
mlir::dyn_cast<fir::BoxCharType>(boxChar.getType());
- mlir::Value boxAddr = builder.create<fir::BoxOffsetOp>(
- loc, op.getVarPtr(), fir::BoxFieldAttr::base_addr);
+ mlir::Value boxAddr = fir::BoxOffsetOp::create(
+ builder, loc, op.getVarPtr(), fir::BoxFieldAttr::base_addr);
uint64_t mapTypeToImplicit = static_cast<
std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
@@ -310,8 +319,8 @@ class MapInfoFinalizationPass
newMembersAttr = builder.create2DI64ArrayAttr(memberIdx);
mlir::Value varPtr = op.getVarPtr();
- mlir::omp::MapInfoOp memberMapInfoOp = builder.create<mlir::omp::MapInfoOp>(
- op.getLoc(), varPtr.getType(), varPtr,
+ mlir::omp::MapInfoOp memberMapInfoOp = mlir::omp::MapInfoOp::create(
+ builder, op.getLoc(), varPtr.getType(), varPtr,
mlir::TypeAttr::get(boxCharType.getEleTy()),
builder.getIntegerAttr(builder.getIntegerType(64, /*isSigned=*/false),
mapTypeToImplicit),
@@ -324,8 +333,8 @@ class MapInfoFinalizationPass
/*mapperId=*/mlir::FlatSymbolRefAttr(), /*name=*/op.getNameAttr(),
builder.getBoolAttr(false));
- mlir::omp::MapInfoOp newMapInfoOp = builder.create<mlir::omp::MapInfoOp>(
- op.getLoc(), op.getResult().getType(), varPtr,
+ mlir::omp::MapInfoOp newMapInfoOp = mlir::omp::MapInfoOp::create(
+ builder, op.getLoc(), op.getResult().getType(), varPtr,
mlir::TypeAttr::get(
llvm::cast<mlir::omp::PointerLikeType>(varPtr.getType())
.getElementType()),
@@ -425,16 +434,15 @@ class MapInfoFinalizationPass
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ALWAYS);
}
- mlir::omp::MapInfoOp newDescParentMapOp =
- builder.create<mlir::omp::MapInfoOp>(
- op->getLoc(), op.getResult().getType(), descriptor,
- mlir::TypeAttr::get(fir::unwrapRefType(descriptor.getType())),
- builder.getIntegerAttr(builder.getIntegerType(64, false),
- getDescriptorMapType(mapType, target)),
- op.getMapCaptureTypeAttr(), /*varPtrPtr=*/mlir::Value{}, newMembers,
- newMembersAttr, /*bounds=*/mlir::SmallVector<mlir::Value>{},
- /*mapperId*/ mlir::FlatSymbolRefAttr(), op.getNameAttr(),
- /*partial_map=*/builder.getBoolAttr(false));
+ mlir::omp::MapInfoOp newDescParentMapOp = mlir::omp::MapInfoOp::create(
+ builder, op->getLoc(), op.getResult().getType(), descriptor,
+ mlir::TypeAttr::get(fir::unwrapRefType(descriptor.getType())),
+ builder.getIntegerAttr(builder.getIntegerType(64, false),
+ getDescriptorMapType(mapType, target)),
+ op.getMapCaptureTypeAttr(), /*varPtrPtr=*/mlir::Value{}, newMembers,
+ newMembersAttr, /*bounds=*/mlir::SmallVector<mlir::Value>{},
+ /*mapperId*/ mlir::FlatSymbolRefAttr(), op.getNameAttr(),
+ /*partial_map=*/builder.getBoolAttr(false));
op.replaceAllUsesWith(newDescParentMapOp.getResult());
op->erase();
return newDescParentMapOp;
@@ -739,8 +747,8 @@ class MapInfoFinalizationPass
builder.setInsertionPoint(op);
fir::IntOrValue idxConst =
mlir::IntegerAttr::get(builder.getI32Type(), fieldIdx);
- auto fieldCoord = builder.create<fir::CoordinateOp>(
- op.getLoc(), builder.getRefType(memTy), op.getVarPtr(),
+ auto fieldCoord = fir::CoordinateOp::create(
+ builder, op.getLoc(), builder.getRefType(memTy), op.getVarPtr(),
llvm::SmallVector<fir::IntOrValue, 1>{idxConst});
fir::factory::AddrAndBoundsInfo info =
fir::factory::getDataOperandBaseAddr(
@@ -754,21 +762,20 @@ class MapInfoFinalizationPass
.first,
/*dataExvIsAssumedSize=*/false, op.getLoc());
- mlir::omp::MapInfoOp fieldMapOp =
- builder.create<mlir::omp::MapInfoOp>(
- op.getLoc(), fieldCoord.getResult().getType(),
- fieldCoord.getResult(),
- mlir::TypeAttr::get(
- fir::unwrapRefType(fieldCoord.getResult().getType())),
- op.getMapTypeAttr(),
- builder.getAttr<mlir::omp::VariableCaptureKindAttr>(
- mlir::omp::VariableCaptureKind::ByRef),
- /*varPtrPtr=*/mlir::Value{}, /*members=*/mlir::ValueRange{},
- /*members_index=*/mlir::ArrayAttr{}, bounds,
- /*mapperId=*/mlir::FlatSymbolRefAttr(),
- builder.getStringAttr(op.getNameAttr().strref() + "." +
- field + ".implicit_map"),
- /*partial_map=*/builder.getBoolAttr(false));
+ mlir::omp::MapInfoOp fieldMapOp = mlir::omp::MapInfoOp::create(
+ builder, op.getLoc(), fieldCoord.getResult().getType(),
+ fieldCoord.getResult(),
+ mlir::TypeAttr::get(
+ fir::unwrapRefType(fieldCoord.getResult().getType())),
+ op.getMapTypeAttr(),
+ builder.getAttr<mlir::omp::VariableCaptureKindAttr>(
+ mlir::omp::VariableCaptureKind::ByRef),
+ /*varPtrPtr=*/mlir::Value{}, /*members=*/mlir::ValueRange{},
+ /*members_index=*/mlir::ArrayAttr{}, bounds,
+ /*mapperId=*/mlir::FlatSymbolRefAttr(),
+ builder.getStringAttr(op.getNameAttr().strref() + "." + field +
+ ".implicit_map"),
+ /*partial_map=*/builder.getBoolAttr(false));
newMapOpsForFields.emplace_back(fieldMapOp);
fieldIndicies.emplace_back(fieldIdx);
}
diff --git a/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp b/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
index 19566af..3a802ef 100644
--- a/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
+++ b/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
@@ -80,9 +80,9 @@ class MapsForPrivatizedSymbolsPass
mlir::Block *allocaBlock = builder.getAllocaBlock();
assert(allocaBlock && "No allocablock found for a funcOp");
builder.setInsertionPointToStart(allocaBlock);
- auto alloca = builder.create<fir::AllocaOp>(loc, varPtr.getType());
+ auto alloca = fir::AllocaOp::create(builder, loc, varPtr.getType());
builder.restoreInsertionPoint(savedInsPoint);
- builder.create<fir::StoreOp>(loc, varPtr, alloca);
+ fir::StoreOp::create(builder, loc, varPtr, alloca);
varPtr = alloca;
}
assert(mlir::isa<omp::PointerLikeType>(varPtr.getType()) &&
@@ -94,8 +94,8 @@ class MapsForPrivatizedSymbolsPass
if (needsBoundsOps(varPtr))
genBoundsOps(builder, varPtr, boundsOps);
- return builder.create<omp::MapInfoOp>(
- loc, varPtr.getType(), varPtr,
+ return omp::MapInfoOp::create(
+ builder, loc, varPtr.getType(), varPtr,
TypeAttr::get(llvm::cast<omp::PointerLikeType>(varPtr.getType())
.getElementType()),
builder.getIntegerAttr(builder.getIntegerType(64, /*isSigned=*/false),