[flang-commits] [flang] [flang] Adding lowering of TEAMs features to PRIF in MIF Dialect (PR #165573)
via flang-commits
flang-commits at lists.llvm.org
Fri Oct 31 15:19:02 PDT 2025
================
@@ -151,3 +151,110 @@ llvm::LogicalResult mif::CoSumOp::verify() {
return emitOpError("`A` shall be of numeric type.");
return mlir::success();
}
+
+//===----------------------------------------------------------------------===//
+// ChangeTeamOp
+//===----------------------------------------------------------------------===//
+
+void mif::ChangeTeamOp::build(mlir::OpBuilder &builder,
+ mlir::OperationState &result, mlir::Value team,
+ bool ensureTerminator,
+ llvm::ArrayRef<mlir::NamedAttribute> attributes) {
+ build(builder, result, team, /*stat*/ mlir::Value{}, /*errmsg*/ mlir::Value{},
+ ensureTerminator, attributes);
+}
+
+void mif::ChangeTeamOp::build(mlir::OpBuilder &builder,
+ mlir::OperationState &result, mlir::Value team,
+ mlir::Value stat, mlir::Value errmsg,
+ bool ensureTerminator,
+ llvm::ArrayRef<mlir::NamedAttribute> attributes) {
+ std::int32_t argStat = 0, argErrmsg = 0;
+ result.addOperands(team);
+ if (stat) {
+ result.addOperands(stat);
+ argStat++;
+ }
+ if (errmsg) {
+ result.addOperands(errmsg);
+ argErrmsg++;
+ }
+
+ mlir::Region *bodyRegion = result.addRegion();
+ bodyRegion->push_back(new mlir::Block{});
+ if (ensureTerminator)
+ ChangeTeamOp::ensureTerminator(*bodyRegion, builder, result.location);
+
+ result.addAttribute(getOperandSegmentSizeAttr(),
+ builder.getDenseI32ArrayAttr({1, argStat, argErrmsg}));
+ result.addAttributes(attributes);
+}
+
+mlir::ParseResult mif::ChangeTeamOp::parse(mlir::OpAsmParser &parser,
----------------
jeanPerier wrote:
I think you can simplify the printing/parsing by using custom<> for the region and let the rest be defined via a string format in the td file. (you can have a look at hlfir yield of forall for examples).
https://github.com/llvm/llvm-project/pull/165573
More information about the flang-commits
mailing list