-
Notifications
You must be signed in to change notification settings - Fork 14.7k
[flang][NFC] Update more FIR op creation to the new APIs #152060
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
Conversation
@llvm/pr-subscribers-flang-fir-hlfir @llvm/pr-subscribers-flang-codegen Author: Valentin Clement (バレンタイン クレメン) (clementval) ChangesSome more updates found in See #147168 I think all FIR operation creations have been updated. There are still some other dialect op creations that need an update. I'll try to submit a patch later for those. Patch is 81.73 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/152060.diff 12 Files Affected:
diff --git a/flang/include/flang/Optimizer/Builder/FIRBuilder.h b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
index 78ee6f00cbdb0..8b4c2f73a84e8 100644
--- a/flang/include/flang/Optimizer/Builder/FIRBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
@@ -530,21 +530,21 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
/// bodies.
IfBuilder genIfOp(mlir::Location loc, mlir::TypeRange results,
mlir::Value cdt, bool withElseRegion) {
- auto op = create<fir::IfOp>(loc, results, cdt, withElseRegion);
+ auto op = fir::IfOp::create(*this, loc, results, cdt, withElseRegion);
return IfBuilder(op, *this);
}
/// Create an IfOp with no "else" region, and no result values.
/// Usage: genIfThen(loc, cdt).genThen(lambda).end();
IfBuilder genIfThen(mlir::Location loc, mlir::Value cdt) {
- auto op = create<fir::IfOp>(loc, mlir::TypeRange(), cdt, false);
+ auto op = fir::IfOp::create(*this, loc, mlir::TypeRange(), cdt, false);
return IfBuilder(op, *this);
}
/// Create an IfOp with an "else" region, and no result values.
/// Usage: genIfThenElse(loc, cdt).genThen(lambda).genElse(lambda).end();
IfBuilder genIfThenElse(mlir::Location loc, mlir::Value cdt) {
- auto op = create<fir::IfOp>(loc, mlir::TypeRange(), cdt, true);
+ auto op = fir::IfOp::create(*this, loc, mlir::TypeRange(), cdt, true);
return IfBuilder(op, *this);
}
diff --git a/flang/include/flang/Optimizer/Builder/Factory.h b/flang/include/flang/Optimizer/Builder/Factory.h
index 4e5c52ac44e07..e67ef457c8b4c 100644
--- a/flang/include/flang/Optimizer/Builder/Factory.h
+++ b/flang/include/flang/Optimizer/Builder/Factory.h
@@ -49,8 +49,8 @@ void genCharacterCopy(mlir::Value src, mlir::Value srcLen, mlir::Value dst,
if (!srcLen && !dstLen && srcTy.getFKind() == dstTy.getFKind() &&
srcTy.getLen() == dstTy.getLen()) {
// same size, so just use load and store
- auto load = builder.template create<fir::LoadOp>(loc, src);
- builder.template create<fir::StoreOp>(loc, load, dst);
+ auto load = fir::LoadOp::create(builder, loc, src);
+ fir::StoreOp::create(builder, loc, load, dst);
return;
}
auto zero = builder.template create<mlir::arith::ConstantIndexOp>(loc, 0);
@@ -70,75 +70,72 @@ void genCharacterCopy(mlir::Value src, mlir::Value srcLen, mlir::Value dst,
if (!srcLen && !dstLen && srcTy.getLen() >= dstTy.getLen()) {
auto upper = builder.template create<mlir::arith::ConstantIndexOp>(
loc, dstTy.getLen() - 1);
- auto loop = builder.template create<fir::DoLoopOp>(loc, zero, upper, one);
+ auto loop = fir::DoLoopOp::create(builder, loc, zero, upper, one);
auto insPt = builder.saveInsertionPoint();
builder.setInsertionPointToStart(loop.getBody());
auto csrcTy = toArrayTy(srcTy);
- auto csrc = builder.template create<fir::ConvertOp>(loc, csrcTy, src);
- auto in = builder.template create<fir::CoordinateOp>(
- loc, toCoorTy(csrcTy), csrc, loop.getInductionVar());
- auto load = builder.template create<fir::LoadOp>(loc, in);
+ auto csrc = fir::ConvertOp::create(builder, loc, csrcTy, src);
+ auto in = fir::CoordinateOp::create(builder, loc, toCoorTy(csrcTy), csrc,
+ loop.getInductionVar());
+ auto load = fir::LoadOp::create(builder, loc, in);
auto cdstTy = toArrayTy(dstTy);
- auto cdst = builder.template create<fir::ConvertOp>(loc, cdstTy, dst);
- auto out = builder.template create<fir::CoordinateOp>(
- loc, toCoorTy(cdstTy), cdst, loop.getInductionVar());
+ auto cdst = fir::ConvertOp::create(builder, loc, cdstTy, dst);
+ auto out = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst,
+ loop.getInductionVar());
mlir::Value cast =
srcTy.getFKind() == dstTy.getFKind()
? load.getResult()
- : builder
- .template create<fir::ConvertOp>(loc, toEleTy(cdstTy), load)
+ : fir::ConvertOp::create(builder, loc, toEleTy(cdstTy), load)
.getResult();
- builder.template create<fir::StoreOp>(loc, cast, out);
+ fir::StoreOp::create(builder, loc, cast, out);
builder.restoreInsertionPoint(insPt);
return;
}
auto minusOne = [&](mlir::Value v) -> mlir::Value {
return builder.template create<mlir::arith::SubIOp>(
- loc, builder.template create<fir::ConvertOp>(loc, one.getType(), v),
- one);
+ loc, fir::ConvertOp::create(builder, loc, one.getType(), v), one);
};
mlir::Value len = dstLen ? minusOne(dstLen)
: builder
.template create<mlir::arith::ConstantIndexOp>(
loc, dstTy.getLen() - 1)
.getResult();
- auto loop = builder.template create<fir::DoLoopOp>(loc, zero, len, one);
+ auto loop = fir::DoLoopOp::create(builder, loc, zero, len, one);
auto insPt = builder.saveInsertionPoint();
builder.setInsertionPointToStart(loop.getBody());
mlir::Value slen =
- srcLen
- ? builder.template create<fir::ConvertOp>(loc, one.getType(), srcLen)
- .getResult()
- : builder
- .template create<mlir::arith::ConstantIndexOp>(loc,
- srcTy.getLen())
- .getResult();
+ srcLen ? fir::ConvertOp::create(builder, loc, one.getType(), srcLen)
+ .getResult()
+ : builder
+ .template create<mlir::arith::ConstantIndexOp>(
+ loc, srcTy.getLen())
+ .getResult();
auto cond = builder.template create<mlir::arith::CmpIOp>(
loc, mlir::arith::CmpIPredicate::slt, loop.getInductionVar(), slen);
- auto ifOp = builder.template create<fir::IfOp>(loc, cond, /*withElse=*/true);
+ auto ifOp = fir::IfOp::create(builder, loc, cond, /*withElse=*/true);
builder.setInsertionPointToStart(&ifOp.getThenRegion().front());
auto csrcTy = toArrayTy(srcTy);
- auto csrc = builder.template create<fir::ConvertOp>(loc, csrcTy, src);
- auto in = builder.template create<fir::CoordinateOp>(
- loc, toCoorTy(csrcTy), csrc, loop.getInductionVar());
- auto load = builder.template create<fir::LoadOp>(loc, in);
+ auto csrc = fir::ConvertOp::create(builder, loc, csrcTy, src);
+ auto in = fir::CoordinateOp::create(builder, loc, toCoorTy(csrcTy), csrc,
+ loop.getInductionVar());
+ auto load = fir::LoadOp::create(builder, loc, in);
auto cdstTy = toArrayTy(dstTy);
- auto cdst = builder.template create<fir::ConvertOp>(loc, cdstTy, dst);
- auto out = builder.template create<fir::CoordinateOp>(
- loc, toCoorTy(cdstTy), cdst, loop.getInductionVar());
+ auto cdst = fir::ConvertOp::create(builder, loc, cdstTy, dst);
+ auto out = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst,
+ loop.getInductionVar());
mlir::Value cast =
srcTy.getFKind() == dstTy.getFKind()
? load.getResult()
- : builder.template create<fir::ConvertOp>(loc, toEleTy(cdstTy), load)
+ : fir::ConvertOp::create(builder, loc, toEleTy(cdstTy), load)
.getResult();
- builder.template create<fir::StoreOp>(loc, cast, out);
+ fir::StoreOp::create(builder, loc, cast, out);
builder.setInsertionPointToStart(&ifOp.getElseRegion().front());
- auto space = builder.template create<fir::StringLitOp>(
- loc, toEleTy(cdstTy), llvm::ArrayRef<char>{' '});
- auto cdst2 = builder.template create<fir::ConvertOp>(loc, cdstTy, dst);
- auto out2 = builder.template create<fir::CoordinateOp>(
- loc, toCoorTy(cdstTy), cdst2, loop.getInductionVar());
- builder.template create<fir::StoreOp>(loc, space, out2);
+ auto space = fir::StringLitOp::create(builder, loc, toEleTy(cdstTy),
+ llvm::ArrayRef<char>{' '});
+ auto cdst2 = fir::ConvertOp::create(builder, loc, cdstTy, dst);
+ auto out2 = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst2,
+ loop.getInductionVar());
+ fir::StoreOp::create(builder, loc, space, out2);
builder.restoreInsertionPoint(insPt);
}
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 1e88431b0eb1f..61476efbee1fc 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -796,7 +796,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
auto empty = fir::factory::createUnallocatedBox(
*builder, loc, new_box->getBoxTy(), box.nonDeferredLenParams(),
{});
- builder->create<fir::StoreOp>(loc, empty, new_box->getAddr());
+ fir::StoreOp::create(*builder, loc, empty, new_box->getAddr());
return;
}
// Copy allocation status of Allocatables, creating new storage if
@@ -843,7 +843,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
auto empty = fir::factory::createUnallocatedBox(
*builder, loc, new_box->getBoxTy(),
new_box->nonDeferredLenParams(), {});
- builder->create<fir::StoreOp>(loc, empty, new_box->getAddr());
+ fir::StoreOp::create(*builder, loc, empty, new_box->getAddr());
});
if_builder.end();
},
@@ -1322,8 +1322,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
if (isPointer) {
// Set LHS target to the target of RHS (do not copy the RHS
// target data into the LHS target storage).
- auto loadVal = builder->create<fir::LoadOp>(loc, rhs);
- builder->create<fir::StoreOp>(loc, loadVal, lhs);
+ auto loadVal = fir::LoadOp::create(*builder, loc, rhs);
+ fir::StoreOp::create(*builder, loc, loadVal, lhs);
} else if (isAllocatable &&
flags.test(Fortran::semantics::Symbol::Flag::OmpCopyIn)) {
// For copyin allocatable variables, RHS must be copied to lhs
@@ -1377,8 +1377,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
} else if (lhs.getBoxOf<fir::CharBoxValue>()) {
fir::factory::CharacterExprHelper{*builder, loc}.createAssign(lhs, rhs);
} else {
- auto loadVal = builder->create<fir::LoadOp>(loc, fir::getBase(rhs));
- builder->create<fir::StoreOp>(loc, loadVal, fir::getBase(lhs));
+ auto loadVal = fir::LoadOp::create(*builder, loc, fir::getBase(rhs));
+ fir::StoreOp::create(*builder, loc, loadVal, fir::getBase(lhs));
}
}
@@ -1629,7 +1629,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
blockList.push_back(defaultBlock);
if (valueList[branchCount - 1] == 0) // Swap IO ERR and default blocks.
std::swap(blockList[branchCount - 1], blockList[branchCount]);
- builder->create<fir::SelectOp>(loc, selector, valueList, blockList);
+ fir::SelectOp::create(*builder, loc, selector, valueList, blockList);
return;
}
mlir::Type selectorType = selector.getType();
@@ -1738,13 +1738,13 @@ class FirConverter : public Fortran::lower::AbstractConverter {
mlir::Value resultVal = resultSymBox.match(
[&](const fir::CharBoxValue &x) -> mlir::Value {
if (Fortran::semantics::IsBindCProcedure(functionSymbol))
- return builder->create<fir::LoadOp>(loc, x.getBuffer());
+ return fir::LoadOp::create(*builder, loc, x.getBuffer());
return fir::factory::CharacterExprHelper{*builder, loc}
.createEmboxChar(x.getBuffer(), x.getLen());
},
[&](const fir::MutableBoxValue &x) -> mlir::Value {
mlir::Value resultRef = resultSymBox.getAddr();
- mlir::Value load = builder->create<fir::LoadOp>(loc, resultRef);
+ mlir::Value load = fir::LoadOp::create(*builder, loc, resultRef);
unsigned rank = x.rank();
if (x.isAllocatable() && rank > 0) {
// ALLOCATABLE array result must have default lower bounds.
@@ -1760,9 +1760,9 @@ class FirConverter : public Fortran::lower::AbstractConverter {
llvm::SmallVector<mlir::Value> lbounds{rank, one};
auto shiftTy = fir::ShiftType::get(builder->getContext(), rank);
mlir::Value shiftOp =
- builder->create<fir::ShiftOp>(loc, shiftTy, lbounds);
- load = builder->create<fir::ReboxOp>(
- loc, load.getType(), load, shiftOp, /*slice=*/mlir::Value{});
+ fir::ShiftOp::create(*builder, loc, shiftTy, lbounds);
+ load = fir::ReboxOp::create(*builder, loc, load.getType(), load,
+ shiftOp, /*slice=*/mlir::Value{});
}
return load;
},
@@ -1776,7 +1776,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
if (resultRef.getType() != resultRefType)
resultRef = builder->createConvertWithVolatileCast(
loc, resultRefType, resultRef);
- return builder->create<fir::LoadOp>(loc, resultRef);
+ return fir::LoadOp::create(*builder, loc, resultRef);
});
genExitRoutine(false, resultVal);
}
@@ -1802,8 +1802,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
if (Fortran::semantics::IsFunction(symbol)) {
genReturnSymbol(symbol);
} else if (Fortran::semantics::HasAlternateReturns(symbol)) {
- mlir::Value retval = builder->create<fir::LoadOp>(
- toLocation(), getAltReturnResult(symbol));
+ mlir::Value retval = fir::LoadOp::create(*builder, toLocation(),
+ getAltReturnResult(symbol));
genExitRoutine(false, retval);
} else {
genExitRoutine(false);
@@ -1956,7 +1956,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
}
if (!labelList.empty()) {
auto selectExpr =
- builder->create<fir::LoadOp>(loc, getSymbolAddress(symbol));
+ fir::LoadOp::create(*builder, loc, getSymbolAddress(symbol));
// Add a default error target in case the goto is nonconforming.
mlir::Block *errorBlock =
builder->getBlock()->splitBlock(builder->getInsertionPoint());
@@ -1968,7 +1968,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
*builder, loc,
"Assigned GOTO variable '" + symbol.name().ToString() +
"' does not have a valid target label value");
- builder->create<fir::UnreachableOp>(loc);
+ fir::UnreachableOp::create(*builder, loc);
}
fir::ReduceOperationEnum
@@ -2485,7 +2485,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
if (!isConst) {
mlir::Value stepValue = nestSts.back();
info.stepVariable = builder->createTemporary(loc, stepValue.getType());
- builder->create<fir::StoreOp>(loc, stepValue, info.stepVariable);
+ fir::StoreOp::create(*builder, loc, stepValue, info.stepVariable);
}
}
@@ -2498,8 +2498,9 @@ class FirConverter : public Fortran::lower::AbstractConverter {
// The loop variable is a doLoop op argument.
mlir::Type loopVarType = info.getLoopVariableType();
- auto loopOp = builder->create<fir::DoLoopOp>(
- loc, lowerValue, upperValue, stepValue, /*unordered=*/false,
+ auto loopOp = fir::DoLoopOp::create(
+ *builder, loc, lowerValue, upperValue, stepValue,
+ /*unordered=*/false,
/*finalCountValue=*/true,
builder->createConvert(loc, loopVarType, lowerValue));
info.loopOp = loopOp;
@@ -2507,7 +2508,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
mlir::Value loopValue = loopOp.getRegionIterArgs()[0];
// Update the loop variable value in case it has non-index references.
- builder->create<fir::StoreOp>(loc, loopValue, info.loopVariable);
+ fir::StoreOp::create(*builder, loc, loopValue, info.loopVariable);
addLoopAnnotationAttr(info, dirs);
continue;
}
@@ -2539,13 +2540,13 @@ class FirConverter : public Fortran::lower::AbstractConverter {
builder->create<mlir::arith::SelectOp>(loc, cond, one, tripCount);
}
info.tripVariable = builder->createTemporary(loc, tripCount.getType());
- builder->create<fir::StoreOp>(loc, tripCount, info.tripVariable);
- builder->create<fir::StoreOp>(loc, lowerValue, info.loopVariable);
+ fir::StoreOp::create(*builder, loc, tripCount, info.tripVariable);
+ fir::StoreOp::create(*builder, loc, lowerValue, info.loopVariable);
// Unstructured loop header - generate loop condition and mask.
// Note - Currently there is no way to tag a loop as a concurrent loop.
startBlock(info.headerBlock);
- tripCount = builder->create<fir::LoadOp>(loc, info.tripVariable);
+ tripCount = fir::LoadOp::create(*builder, loc, info.tripVariable);
mlir::Value zero =
builder->createIntegerConstant(loc, tripCount.getType(), 0);
auto cond = builder->create<mlir::arith::CmpIOp>(
@@ -2573,7 +2574,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
}
if (genDoConcurrent) {
- auto loopWrapperOp = builder->create<fir::DoConcurrentOp>(loc);
+ auto loopWrapperOp = fir::DoConcurrentOp::create(*builder, loc);
builder->setInsertionPointToStart(
builder->createBlock(&loopWrapperOp.getRegion()));
@@ -2583,8 +2584,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
}
builder->setInsertionPointToEnd(loopWrapperOp.getBody());
- auto loopOp = builder->create<fir::DoConcurrentLoopOp>(
- loc, nestLBs, nestUBs, nestSts, /*loopAnnotation=*/nullptr,
+ auto loopOp = fir::DoConcurrentLoopOp::create(
+ *builder, loc, nestLBs, nestUBs, nestSts, /*loopAnnotation=*/nullptr,
/*local_vars=*/mlir::ValueRange{},
/*local_syms=*/nullptr, /*reduce_vars=*/mlir::ValueRange{},
/*reduce_byref=*/nullptr, /*reduce_syms=*/nullptr,
@@ -2604,7 +2605,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
info.loopOp = loopOp;
mlir::Value loopValue =
builder->createConvert(loc, info.getLoopVariableType(), blockArg);
- builder->create<fir::StoreOp>(loc, loopValue, info.loopVariable);
+ fir::StoreOp::create(*builder, loc, loopValue, info.loopVariable);
if (info.maskExpr) {
Fortran::lower::StatementContext stmtCtx;
@@ -2612,8 +2613,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
stmtCtx.finalizeAndReset();
mlir::Value maskCondCast =
builder->createConvert(loc, builder->getI1Type(), maskCond);
- auto ifOp = builder->create<fir::IfOp>(loc, maskCondCast,
- /*withElseRegion=*/false);
+ auto ifOp = fir::IfOp::create(*builder, loc, maskCondCast,
+ /*withElseRegion=*/false);
builder->setInsertionPointToStart(&ifOp.getThenRegion().front());
}
}
@@ -2659,35 +2660,35 @@ class FirConverter : public Fortran::lower::AbstractConverter {
mlir::Value step = builder->createConvert(
loc, info.getLoopVariableType(), doLoopOp.getStep());
mlir::Value loopVar =
- builder->create<fir::LoadOp>(loc, info.loopVariable);
+ fir::LoadOp::create(*builder, loc, info.loopVariable);
results.push_back(
builder->create<mlir::arith::AddIOp>(loc, loopVar, step, iofAttr));
- builder->create<fir::ResultOp>(loc, results);
+ fir::ResultOp::create(*builder, loc, results);
builder->setInsertionPointAfter(doLoopOp);
// The loop control variable may be used after the loop.
- builder->create<fir::StoreOp>(loc, doLoopOp.getResult(1),
- info.loopVariable);
+ fir::StoreOp::create(*builder, loc, doLoopOp.getResult(1),
+ info.loopVariable);
continue;
}
// Unstructured loop - decrement tripVariable and step loopVariable.
...
[truncated]
|
Some more updates found in
flang/Lower
andflang/Optimizer
directories.See #147168
I think all FIR operation creations have been updated. There are still some other dialect op creations that need an update. I'll try to submit a patch later for those.