[flang-commits] [flang] [llvm] [flang][MIF] Adding Stop and ErrorStop operations (PR #166787)
Dan Bonachea via flang-commits
flang-commits at lists.llvm.org
Mon Dec 15 20:23:10 PST 2025
================
@@ -105,19 +115,27 @@ void Fortran::lower::genStopStatement(
loc, calleeType.getInput(operands.size()), isError));
// Third operand indicates QUIET (default to false).
+ mlir::Value q;
if (const auto &quiet =
std::get<std::optional<Fortran::parser::ScalarLogicalExpr>>(stmt.t)) {
const SomeExpr *expr = Fortran::semantics::GetExpr(*quiet);
assert(expr && "failed getting typed expression");
- mlir::Value q = fir::getBase(converter.genExprValue(*expr, stmtCtx));
+ q = fir::getBase(converter.genExprValue(*expr, stmtCtx));
operands.push_back(
builder.createConvert(loc, calleeType.getInput(operands.size()), q));
} else {
operands.push_back(builder.createIntegerConstant(
loc, calleeType.getInput(operands.size()), 0));
}
- fir::CallOp::create(builder, loc, callee, operands);
+ if (coarrayIsEnabled) {
+ if (isError)
+ mif::ErrorStopOp::create(builder, loc, stopCode, q);
+ else
+ mif::StopOp::create(builder, loc, stopCode, q);
+ } else
+ fir::CallOp::create(builder, loc, callee, operands);
----------------
bonachea wrote:
Do we actually need this divergence? (also in Main.cpp)
I thought @jeanPerier was arguing against introducing MIF dialect operations `mif::StopOp`/`mif::ErrorStopOp` at all, and instead just keeping the single-image IR and performing all the multi-image "work" inside the callbacks invoked by flang-rt's `RTNAME(StopStatement)/RTNAME(StopStatementText)`, but perhaps I misunderstood?
https://github.com/llvm/llvm-project/pull/166787
More information about the flang-commits
mailing list