Skip to content

Commit a03212f

Browse files
committed
Using custom<> instead of using using complete custom assembly format + use setInsertionPoint()
1 parent 920ffc7 commit a03212f

File tree

3 files changed

+21
-69
lines changed

3 files changed

+21
-69
lines changed

flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ class mif_Op<string mnemonic, list<Trait> traits>
2323

2424
class region_Op<string mnemonic, list<Trait> traits = []>
2525
: mif_Op<mnemonic, !listconcat(traits, [RecursivelySpeculatable,
26-
RecursiveMemoryEffects])> {
27-
let hasCustomAssemblyFormat = 1;
28-
}
26+
RecursiveMemoryEffects])> {}
2927

3028
//===----------------------------------------------------------------------===//
3129
// Initialization and Finalization
@@ -382,6 +380,13 @@ def mif_ChangeTeamOp
382380
/// Get the body of the CHANGE TEAM construct
383381
mlir::Block *getBody() { return &getRegion().front(); }
384382
}];
383+
384+
let assemblyFormat = [{
385+
$team (`stat` $stat^)?
386+
(`errmsg` $errmsg^)?
387+
attr-dict `:` `(` type(operands) `)`
388+
custom<ChangeTeamOpBody>($region)
389+
}];
385390
}
386391

387392
def mif_GetTeamOp : mif_Op<"get_team", []> {

flang/lib/Optimizer/Dialect/MIF/MIFOps.cpp

Lines changed: 11 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
#include "mlir/IR/PatternMatch.h"
1616
#include "llvm/ADT/SmallVector.h"
1717

18-
#define GET_OP_CLASSES
19-
#include "flang/Optimizer/Dialect/MIF/MIFOps.cpp.inc"
20-
2118
//===----------------------------------------------------------------------===//
2219
// NumImagesOp
2320
//===----------------------------------------------------------------------===//
@@ -190,71 +187,21 @@ void mif::ChangeTeamOp::build(mlir::OpBuilder &builder,
190187
result.addAttributes(attributes);
191188
}
192189

193-
mlir::ParseResult mif::ChangeTeamOp::parse(mlir::OpAsmParser &parser,
194-
mlir::OperationState &result) {
195-
auto &builder = parser.getBuilder();
196-
llvm::SmallVector<mlir::OpAsmParser::UnresolvedOperand> opers;
197-
llvm::SmallVector<mlir::Type> types;
198-
int32_t statArg = 0, errmsgArg = 0;
199-
if (parser.parseOperand(opers.emplace_back()))
200-
return mlir::failure();
201-
202-
if (mlir::succeeded(parser.parseOptionalKeyword("stat"))) {
203-
if (*parser.parseOptionalOperand(opers.emplace_back()))
204-
return mlir::failure();
205-
statArg++;
206-
}
207-
if (mlir::succeeded(parser.parseOptionalKeyword("errmsg"))) {
208-
if (*parser.parseOptionalOperand(opers.emplace_back()))
209-
return mlir::failure();
210-
errmsgArg++;
211-
}
212-
213-
// Set the operandSegmentSizes attribute
214-
result.addAttribute(getOperandSegmentSizeAttr(),
215-
builder.getDenseI32ArrayAttr({1, statArg, errmsgArg}));
216-
217-
if (parser.parseColon())
218-
return mlir::failure();
219-
220-
if (parser.parseLParen())
221-
return mlir::failure();
222-
if (parser.parseTypeList(types))
223-
return mlir::failure();
224-
if (parser.parseRParen())
225-
return mlir::failure();
226-
227-
if (opers.size() != types.size())
228-
return mlir::failure();
229-
230-
if (parser.resolveOperands(opers, types, parser.getCurrentLocation(),
231-
result.operands))
232-
return mlir::failure();
233-
234-
auto *body = result.addRegion();
235-
if (parser.parseRegion(*body))
236-
return mlir::failure();
237-
238-
ChangeTeamOp::ensureTerminator(*body, builder, result.location);
239-
240-
if (parser.parseOptionalAttrDictWithKeyword(result.attributes))
190+
static mlir::ParseResult parseChangeTeamOpBody(mlir::OpAsmParser &parser,
191+
mlir::Region &body) {
192+
if (parser.parseRegion(body))
241193
return mlir::failure();
242194

195+
auto &builder = parser.getBuilder();
196+
mif::ChangeTeamOp::ensureTerminator(body, builder, builder.getUnknownLoc());
243197
return mlir::success();
244198
}
245199

246-
void mif::ChangeTeamOp::print(mlir::OpAsmPrinter &p) {
247-
p << ' ' << getTeam();
248-
if (getStat())
249-
p << " stat " << getStat();
250-
if (getErrmsg())
251-
p << " errmsg " << getErrmsg();
252-
p << " : (";
253-
llvm::interleaveComma(getOperands(), p,
254-
[&](mlir::Value v) { p << v.getType(); });
255-
p << ") ";
256-
p.printRegion(getRegion(), /*printEntryBlockArgs=*/true,
200+
static void printChangeTeamOpBody(mlir::OpAsmPrinter &p, mif::ChangeTeamOp op,
201+
mlir::Region &body) {
202+
p.printRegion(op.getRegion(), /*printEntryBlockArgs=*/true,
257203
/*printBlockTerminators=*/true);
258-
p.printOptionalAttrDict((*this)->getAttrs(),
259-
{ChangeTeamOp::getOperandSegmentSizeAttr()});
260204
}
205+
206+
#define GET_OP_CLASSES
207+
#include "flang/Optimizer/Dialect/MIF/MIFOps.cpp.inc"

flang/lib/Optimizer/Transforms/MIFOpConversion.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ struct MIFChangeTeamOpConversion
529529
mlir::PatternRewriter &rewriter) const override {
530530
auto mod = op->template getParentOfType<mlir::ModuleOp>();
531531
fir::FirOpBuilder builder(rewriter, mod);
532+
builder.setInsertionPoint(op);
532533

533534
mlir::Location loc = op.getLoc();
534535
mlir::Type errmsgTy = getPRIFErrmsgType(builder);
@@ -545,13 +546,12 @@ struct MIFChangeTeamOpConversion
545546
genErrmsgPRIF(builder, loc, op.getErrmsg());
546547
llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
547548
builder, loc, ftype, op.getTeam(), stat, errmsgArg, errmsgAllocArg);
548-
fir::CallOp callOp = fir::CallOp::create(builder, loc, funcOp, args);
549+
fir::CallOp::create(builder, loc, funcOp, args);
549550

550551
mlir::Operation *changeOp = op.getOperation();
551552
auto &bodyRegion = op.getRegion();
552553
mlir::Block &bodyBlock = bodyRegion.front();
553554

554-
rewriter.moveOpBefore(callOp.getOperation(), changeOp);
555555
rewriter.inlineBlockBefore(&bodyBlock, changeOp);
556556
rewriter.eraseOp(op);
557557
return mlir::success();

0 commit comments

Comments
 (0)