Skip to content

Commit e717ec7

Browse files
committed
Moving genStatAndErrmsg into AbstractConverter
1 parent ab398c4 commit e717ec7

File tree

3 files changed

+37
-29
lines changed

3 files changed

+37
-29
lines changed

flang/include/flang/Lower/AbstractConverter.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,11 @@ class AbstractConverter {
351351

352352
virtual Fortran::lower::StatementContext &getFctCtx() = 0;
353353

354+
/// Generate STAT and ERRMSG from a list of StatOrErrmsg
355+
virtual std::pair<mlir::Value, mlir::Value>
356+
genStatAndErrmsg(mlir::Location loc,
357+
const std::list<Fortran::parser::StatOrErrmsg> &) = 0;
358+
354359
AbstractConverter(const Fortran::lower::LoweringOptions &loweringOptions)
355360
: loweringOptions(loweringOptions) {}
356361
virtual ~AbstractConverter() = default;

flang/lib/Lower/Bridge.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,34 @@ class FirConverter : public Fortran::lower::AbstractConverter {
11111111
return bridge.fctCtx();
11121112
}
11131113

1114+
/// Initializes values for STAT and ERRMSG
1115+
std::pair<mlir::Value, mlir::Value>
1116+
genStatAndErrmsg(mlir::Location loc,
1117+
const std::list<Fortran::parser::StatOrErrmsg>
1118+
&statOrErrList) override final {
1119+
Fortran::lower::StatementContext stmtCtx;
1120+
1121+
mlir::Value errMsgExpr, statExpr;
1122+
for (const Fortran::parser::StatOrErrmsg &statOrErr : statOrErrList) {
1123+
std::visit(Fortran::common::visitors{
1124+
[&](const Fortran::parser::StatVariable &statVar) {
1125+
const Fortran::semantics::SomeExpr *expr =
1126+
Fortran::semantics::GetExpr(statVar);
1127+
statExpr =
1128+
fir::getBase(genExprAddr(*expr, stmtCtx, &loc));
1129+
},
1130+
[&](const Fortran::parser::MsgVariable &errMsgVar) {
1131+
const Fortran::semantics::SomeExpr *expr =
1132+
Fortran::semantics::GetExpr(errMsgVar);
1133+
errMsgExpr =
1134+
fir::getBase(genExprBox(loc, *expr, stmtCtx));
1135+
}},
1136+
statOrErr.u);
1137+
}
1138+
1139+
return {statExpr, errMsgExpr};
1140+
}
1141+
11141142
mlir::Value hostAssocTupleValue() override final { return hostAssocTuple; }
11151143

11161144
/// Record a binding for the ssa-value of the tuple for this function.

flang/lib/Lower/MultiImageFortran.cpp

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,6 @@
2020
#include "flang/Parser/parse-tree.h"
2121
#include "flang/Semantics/expression.h"
2222

23-
/// Initializes values for STAT and ERRMSG
24-
static std::pair<mlir::Value, mlir::Value> getStatAndErrmsg(
25-
Fortran::lower::AbstractConverter &converter, mlir::Location loc,
26-
const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList) {
27-
Fortran::lower::StatementContext stmtCtx;
28-
29-
mlir::Value errMsgExpr, statExpr;
30-
for (const Fortran::parser::StatOrErrmsg &statOrErr : statOrErrList) {
31-
std::visit(Fortran::common::visitors{
32-
[&](const Fortran::parser::StatVariable &statVar) {
33-
statExpr = fir::getBase(converter.genExprAddr(
34-
loc, Fortran::semantics::GetExpr(statVar), stmtCtx));
35-
},
36-
[&](const Fortran::parser::MsgVariable &errMsgVar) {
37-
const Fortran::semantics::SomeExpr *expr =
38-
Fortran::semantics::GetExpr(errMsgVar);
39-
errMsgExpr = fir::getBase(
40-
converter.genExprBox(loc, *expr, stmtCtx));
41-
}},
42-
statOrErr.u);
43-
}
44-
45-
return {statExpr, errMsgExpr};
46-
}
47-
4823
//===----------------------------------------------------------------------===//
4924
// Synchronization statements
5025
//===----------------------------------------------------------------------===//
@@ -57,7 +32,7 @@ void Fortran::lower::genSyncAllStatement(
5732

5833
// Handle STAT and ERRMSG values
5934
const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList = stmt.v;
60-
auto [statAddr, errMsgAddr] = getStatAndErrmsg(converter, loc, statOrErrList);
35+
auto [statAddr, errMsgAddr] = converter.genStatAndErrmsg(loc, statOrErrList);
6136

6237
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
6338
mif::SyncAllOp::create(builder, loc, statAddr, errMsgAddr);
@@ -73,7 +48,7 @@ void Fortran::lower::genSyncImagesStatement(
7348
// Handle STAT and ERRMSG values
7449
const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList =
7550
std::get<std::list<Fortran::parser::StatOrErrmsg>>(stmt.t);
76-
auto [statAddr, errMsgAddr] = getStatAndErrmsg(converter, loc, statOrErrList);
51+
auto [statAddr, errMsgAddr] = converter.genStatAndErrmsg(loc, statOrErrList);
7752

7853
// SYNC_IMAGES(*) is passed as count == -1 while SYNC IMAGES([]) has count
7954
// == 0. Note further that SYNC IMAGES(*) is not semantically equivalent to
@@ -105,7 +80,7 @@ void Fortran::lower::genSyncMemoryStatement(
10580

10681
// Handle STAT and ERRMSG values
10782
const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList = stmt.v;
108-
auto [statAddr, errMsgAddr] = getStatAndErrmsg(converter, loc, statOrErrList);
83+
auto [statAddr, errMsgAddr] = converter.genStatAndErrmsg(loc, statOrErrList);
10984

11085
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
11186
mif::SyncMemoryOp::create(builder, loc, statAddr, errMsgAddr);
@@ -128,7 +103,7 @@ void Fortran::lower::genSyncTeamStatement(
128103
// Handle STAT and ERRMSG values
129104
const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList =
130105
std::get<std::list<Fortran::parser::StatOrErrmsg>>(stmt.t);
131-
auto [statAddr, errMsgAddr] = getStatAndErrmsg(converter, loc, statOrErrList);
106+
auto [statAddr, errMsgAddr] = converter.genStatAndErrmsg(loc, statOrErrList);
132107

133108
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
134109
mif::SyncTeamOp::create(builder, loc, team, statAddr, errMsgAddr);

0 commit comments

Comments
 (0)