[flang-commits] [flang] [flang][MIF] Fix team_type usage in all MIF operations #205953 (PR #214207)

via flang-commits flang-commits at lists.llvm.org
Wed Aug 5 05:08:00 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-fir-hlfir

Author: Jean-Didier PAILLEUX (JDPailleux)

<details>
<summary>Changes</summary>

This PR resolves the issue #<!-- -->205953. Its purpose is to correct the use of `team_type` by lowering it to Addr rather than to Box.

---

Patch is 97.31 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/214207.diff


11 Files Affected:

- (modified) flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td (+8-8) 
- (modified) flang/lib/Lower/MultiImageFortran.cpp (+3-3) 
- (modified) flang/lib/Optimizer/Builder/IntrinsicCall.cpp (+7-4) 
- (modified) flang/lib/Optimizer/Transforms/MIFOpConversion.cpp (+21-25) 
- (modified) flang/test/Fir/MIF/change_team.mlir (+12-16) 
- (modified) flang/test/Fir/MIF/change_team2.mlir (+65-72) 
- (modified) flang/test/Fir/MIF/form_team.mlir (+25-31) 
- (modified) flang/test/Fir/MIF/get_team.mlir (+39-40) 
- (modified) flang/test/Fir/MIF/sync_team.mlir (+16-22) 
- (modified) flang/test/Fir/MIF/team_number.mlir (+10-13) 
- (modified) flang/test/Fir/MIF/this_image.mlir (+19-32) 


``````````diff
diff --git a/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td b/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
index 337a9eab0b087..cdc81ab1b9764 100644
--- a/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
+++ b/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
@@ -67,7 +67,7 @@ def mif_NumImagesOp : mif_Op<"num_images", [AttrSizedOperandSegments]> {
   }];
 
   let arguments = (ins Optional<AnyInteger>:$team_number,
-                       Optional<AnyRefOrBoxType>:$team);
+                       Optional<AnyReferenceLike>:$team);
   let results = (outs I32:$res);
 
   let builders = [OpBuilder<(ins CArg<"mlir::Value", "{}">:$teamArg)>];
@@ -108,7 +108,7 @@ def mif_ThisImageOp : mif_Op<"this_image", [AttrSizedOperandSegments]> {
   }];
 
   let arguments = (ins Optional<AnyType>:$coarray, Optional<AnyInteger>:$dim,
-      Optional<AnyRefOrBoxType>:$team);
+      Optional<AnyReferenceLike>:$team);
   let results = (outs AnyType:$res);
 
   let builders = [OpBuilder<(ins "mlir::Value":$coarray, "mlir::Value":$dim,
@@ -151,7 +151,7 @@ def mif_ImageIndexOp : mif_Op<"image_index", [AttrSizedOperandSegments]> {
   }];
 
   let arguments = (ins AnyType:$coarray, fir_BoxType:$sub,
-      Optional<AnyRefOrBoxType>:$team, Optional<AnyInteger>:$team_number);
+      Optional<AnyReferenceLike>:$team, Optional<AnyInteger>:$team_number);
   let builders = [OpBuilder<(ins "mlir::Value":$coarray, "mlir::Value":$sub,
       "mlir::Value":$team)>];
 
@@ -292,7 +292,7 @@ def mif_SyncMemoryOp : mif_Op<"sync_memory", [AttrSizedOperandSegments]> {
 def mif_SyncTeamOp : mif_Op<"sync_team", [AttrSizedOperandSegments]> {
   let summary = "Performs a synchronization of the team, identified by `team`";
 
-  let arguments = (ins AnyRefOrBoxType:$team, Optional<AnyReferenceLike>:$stat,
+  let arguments = (ins AnyReferenceLike:$team, Optional<AnyReferenceLike>:$stat,
       Optional<AnyRefOrBoxType>:$errmsg);
   let assemblyFormat = [{
     $team (`stat` $stat^ )?
@@ -418,7 +418,7 @@ def mif_FormTeamOp : mif_Op<"form_team", [AttrSizedOperandSegments]> {
   }];
 
   let arguments = (ins AnyIntegerType:$team_number,
-      Arg<fir_BoxType, "", [MemWrite]>:$team_var,
+      Arg<AnyReferenceLike, "", [MemWrite]>:$team_var,
       Optional<AnyIntegerType>:$new_index,
       Arg<Optional<AnyReferenceLike>, "", [MemWrite]>:$stat,
       Arg<Optional<AnyRefOrBoxType>, "", [MemWrite]>:$errmsg);
@@ -471,7 +471,7 @@ def mif_ChangeTeamOp : region_Op<"change_team", [AttrSizedOperandSegments]> {
       }
   }];
 
-  let arguments = (ins AnyRefOrBoxType:$team,
+  let arguments = (ins AnyReferenceLike:$team,
       Arg<Optional<AnyReferenceLike>, "", [MemWrite]>:$stat,
       Arg<Optional<AnyRefOrBoxType>, "", [MemWrite]>:$errmsg);
 
@@ -511,7 +511,7 @@ def mif_GetTeamOp : mif_Op<"get_team", []> {
   }];
 
   let arguments = (ins Optional<AnyIntegerType>:$level);
-  let results = (outs fir_BoxType:$team);
+  let results = (outs AnyType:$team);
 
   let assemblyFormat = [{
     (`level` $level^ )?
@@ -527,7 +527,7 @@ def mif_TeamNumberOp : mif_Op<"team_number", []> {
     If `team` is absent, the team specified is the current team.
   }];
 
-  let arguments = (ins Optional<AnyRefOrBoxType>:$team);
+  let arguments = (ins Optional<AnyReferenceLike>:$team);
   let results = (outs I64);
 
   let assemblyFormat = [{
diff --git a/flang/lib/Lower/MultiImageFortran.cpp b/flang/lib/Lower/MultiImageFortran.cpp
index 66ffca0b850dd..12149a537ec29 100644
--- a/flang/lib/Lower/MultiImageFortran.cpp
+++ b/flang/lib/Lower/MultiImageFortran.cpp
@@ -99,7 +99,7 @@ void Fortran::lower::genSyncTeamStatement(
       std::get<Fortran::parser::TeamValue>(stmt.t);
   const SomeExpr *teamExpr = Fortran::semantics::GetExpr(teamValue);
   mlir::Value team =
-      fir::getBase(converter.genExprBox(loc, *teamExpr, stmtCtx));
+      fir::getBase(converter.genExprAddr(loc, *teamExpr, stmtCtx));
 
   // Handle STAT and ERRMSG values
   const std::list<Fortran::parser::StatOrErrmsg> &statOrErrList =
@@ -163,7 +163,7 @@ Fortran::lower::genChangeTeamStmt(Fortran::lower::AbstractConverter &converter,
   // Handle TEAM-VALUE
   const auto *teamExpr =
       Fortran::semantics::GetExpr(std::get<Fortran::parser::TeamValue>(stmt.t));
-  team = fir::getBase(converter.genExprBox(loc, *teamExpr, stmtCtx));
+  team = fir::getBase(converter.genExprAddr(loc, *teamExpr, stmtCtx));
 
   return mif::ChangeTeamOp::create(builder, loc, team, statAddr, errMsgAddr);
 }
@@ -253,7 +253,7 @@ void Fortran::lower::genFormTeamStatement(
   // Handle TEAM-VARIABLE
   const auto *teamExpr = Fortran::semantics::GetExpr(
       std::get<Fortran::parser::TeamVariable>(stmt.t));
-  team = fir::getBase(converter.genExprBox(loc, *teamExpr, stmtCtx));
+  team = fir::getBase(converter.genExprAddr(loc, *teamExpr, stmtCtx));
 
   mif::FormTeamOp::create(builder, loc, teamNumber, team, newIndex, statAddr,
                           errMsgAddr);
diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
index 6987092ea921d..f349d41888780 100644
--- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
@@ -643,7 +643,7 @@ static constexpr IntrinsicHandler handlers[]{
     {"null", &I::genNull, {{{"mold", asInquired}}}, /*isElemental=*/false},
     {"num_images",
      &I::genNumImages,
-     {{{"team_number", asValue}, {"team", asBox}}},
+     {{{"team_number", asValue}, {"team", asAddr}}},
      /*isElemental*/ false},
     {"pack",
      &I::genPack,
@@ -830,13 +830,13 @@ static constexpr IntrinsicHandler handlers[]{
     {"tanpi", &I::genTanpi},
     {"team_number",
      &I::genTeamNumber,
-     {{{"team", asBox, handleDynamicOptional}}},
+     {{{"team", asAddr, handleDynamicOptional}}},
      /*isElemental=*/false},
     {"this_image",
      &I::genThisImage,
      {{{"coarray", asBox},
        {"dim", asValue},
-       {"team", asBox, handleDynamicOptional}}},
+       {"team", asAddr, handleDynamicOptional}}},
      /*isElemental=*/false},
     {"time", &I::genTime, {}, /*isElemental=*/false},
     {"timef", &I::genTimef, {}, /*isElemental=*/false},
@@ -4275,7 +4275,7 @@ mlir::Value IntrinsicLibrary::genGetTeam(mlir::Type resultType,
                                          llvm::ArrayRef<mlir::Value> args) {
   checkCoarrayEnabled(loc, options);
   assert(args.size() == 1);
-  return mif::GetTeamOp::create(builder, loc, fir::BoxType::get(resultType),
+  return mif::GetTeamOp::create(builder, loc, builder.getRefType(resultType),
                                 /*level*/ args[0]);
 }
 
@@ -8355,6 +8355,9 @@ IntrinsicLibrary::genThisImage(mlir::Type resultType,
   const bool dimIsAbsent = args.size() < 3;
   mlir::Value team = fir::getBase(args[args.size() - 1]);
 
+  if (team)
+    team = fir::BoxAddrOp::create(builder, loc, team);
+
   if (!coarrayIsAbsent && dimIsAbsent) {
     mlir::Type eleTy = hlfir::getFortranElementType(resultType);
     mlir::Type thisImageResultTy = fir::BoxType::get(
diff --git a/flang/lib/Optimizer/Transforms/MIFOpConversion.cpp b/flang/lib/Optimizer/Transforms/MIFOpConversion.cpp
index 77dfb5ac957ea..d5b76e000212b 100644
--- a/flang/lib/Optimizer/Transforms/MIFOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/MIFOpConversion.cpp
@@ -472,12 +472,11 @@ struct MIFThisImageOpConversion
     mlir::Type i64Ty = builder.getI64Type();
     mlir::Type i32Ty = builder.getI32Type();
     mlir::Type boxTy = fir::BoxType::get(rewriter.getNoneType());
+    mlir::Type refTy = builder.getRefType(rewriter.getNoneType());
 
     mlir::Value teamArg = op.getTeam();
     if (!op.getTeam())
-      teamArg = fir::AbsentOp::create(builder, loc, boxTy);
-    else
-      teamArg = builder.createBox(loc, teamArg);
+      teamArg = fir::AbsentOp::create(builder, loc, refTy);
 
     if (op.getCoarray()) {
       llvm::SmallVector<mlir::Value> args;
@@ -494,7 +493,7 @@ struct MIFThisImageOpConversion
         ftype = mlir::FunctionType::get(builder.getContext(),
                                         /*inputs*/
                                         {boxTy, builder.getRefType(i32Ty),
-                                         boxTy, builder.getRefType(i64Ty)},
+                                         refTy, builder.getRefType(i64Ty)},
                                         /*results*/ {});
         funcOp = builder.createFunction(
             loc, getPRIFProcName("this_image_with_dim"), ftype);
@@ -510,7 +509,7 @@ struct MIFThisImageOpConversion
         result = builder.createBox(loc, builder.createTemporary(loc, resTy));
         ftype = mlir::FunctionType::get(
             builder.getContext(),
-            /*inputs*/ {boxTy, boxTy, fir::BoxType::get(resTy)},
+            /*inputs*/ {boxTy, refTy, fir::BoxType::get(resTy)},
             /*results*/ {});
         funcOp = builder.createFunction(
             loc, getPRIFProcName("this_image_with_coarray"), ftype);
@@ -529,7 +528,7 @@ struct MIFThisImageOpConversion
       mlir::Value result = builder.createTemporary(loc, i32Ty);
       mlir::FunctionType ftype = mlir::FunctionType::get(
           builder.getContext(),
-          /*inputs*/ {boxTy, builder.getRefType(i32Ty)}, /*results*/ {});
+          /*inputs*/ {refTy, builder.getRefType(i32Ty)}, /*results*/ {});
       mlir::func::FuncOp funcOp = builder.createFunction(
           loc, getPRIFProcName("this_image_no_coarray"), ftype);
 
@@ -557,7 +556,7 @@ struct MIFNumImagesOpConversion
 
     mlir::Type i32Ty = builder.getI32Type();
     mlir::Type i64Ty = builder.getI64Type();
-    mlir::Type boxTy = fir::BoxType::get(rewriter.getNoneType());
+    mlir::Type refTy = builder.getRefType(rewriter.getNoneType());
     mlir::Value result = builder.createTemporary(loc, i32Ty);
 
     mlir::func::FuncOp funcOp;
@@ -574,7 +573,7 @@ struct MIFNumImagesOpConversion
         mlir::FunctionType ftype =
             mlir::FunctionType::get(builder.getContext(),
                                     /*inputs*/
-                                    {boxTy, builder.getRefType(i32Ty)},
+                                    {refTy, builder.getRefType(i32Ty)},
                                     /*results*/ {});
         funcOp = builder.createFunction(
             loc, getPRIFProcName("num_images_with_team"), ftype);
@@ -722,11 +721,11 @@ struct MIFSyncTeamOpConversion
     fir::FirOpBuilder builder(rewriter, mod);
     mlir::Location loc = op.getLoc();
 
-    mlir::Type boxTy = fir::BoxType::get(builder.getNoneType());
+    mlir::Type refTy = builder.getRefType(builder.getNoneType());
     mlir::Type errmsgTy = getPRIFErrmsgType(builder);
     mlir::FunctionType ftype = mlir::FunctionType::get(
         builder.getContext(),
-        /*inputs*/ {boxTy, getPRIFStatType(builder), errmsgTy, errmsgTy},
+        /*inputs*/ {refTy, getPRIFStatType(builder), errmsgTy, errmsgTy},
         /*results*/ {});
     mlir::func::FuncOp funcOp =
         builder.createFunction(loc, getPRIFProcName("sync_team"), ftype);
@@ -882,11 +881,11 @@ struct MIFFormTeamOpConversion
     fir::FirOpBuilder builder(rewriter, mod);
     mlir::Location loc = op.getLoc();
     mlir::Type errmsgTy = getPRIFErrmsgType(builder);
-    mlir::Type boxTy = fir::BoxType::get(builder.getNoneType());
+    mlir::Type refTy = builder.getRefType(builder.getNoneType());
     mlir::FunctionType ftype = mlir::FunctionType::get(
         builder.getContext(),
         /*inputs*/
-        {builder.getRefType(builder.getI64Type()), boxTy,
+        {builder.getRefType(builder.getI64Type()), refTy,
          builder.getRefType(builder.getI32Type()), getPRIFStatType(builder),
          errmsgTy, errmsgTy},
         /*results*/ {});
@@ -960,10 +959,10 @@ struct MIFChangeTeamOpConversion
 
     mlir::Location loc = op.getLoc();
     mlir::Type errmsgTy = getPRIFErrmsgType(builder);
-    mlir::Type boxTy = fir::BoxType::get(builder.getNoneType());
+    mlir::Type refTy = builder.getRefType(builder.getNoneType());
     mlir::FunctionType ftype = mlir::FunctionType::get(
         builder.getContext(),
-        /*inputs*/ {boxTy, getPRIFStatType(builder), errmsgTy, errmsgTy},
+        /*inputs*/ {refTy, getPRIFStatType(builder), errmsgTy, errmsgTy},
         /*results*/ {});
     mlir::func::FuncOp funcOp =
         builder.createFunction(loc, getPRIFProcName("change_team"), ftype);
@@ -1019,11 +1018,11 @@ struct MIFGetTeamOpConversion : public mlir::OpRewritePattern<mif::GetTeamOp> {
     fir::FirOpBuilder builder(rewriter, mod);
     mlir::Location loc = op.getLoc();
 
-    mlir::Type boxTy = fir::BoxType::get(builder.getNoneType());
+    mlir::Type refTy = builder.getRefType(builder.getNoneType());
     mlir::Type lvlTy = builder.getRefType(builder.getI32Type());
     mlir::FunctionType ftype =
         mlir::FunctionType::get(builder.getContext(),
-                                /*inputs*/ {lvlTy, boxTy},
+                                /*inputs*/ {lvlTy, refTy},
                                 /*results*/ {});
     mlir::func::FuncOp funcOp =
         builder.createFunction(loc, getPRIFProcName("get_team"), ftype);
@@ -1042,13 +1041,12 @@ struct MIFGetTeamOpConversion : public mlir::OpRewritePattern<mif::GetTeamOp> {
     mlir::Type resultType = op.getResult().getType();
     mlir::Type baseTy = fir::unwrapRefType(resultType);
     mlir::Value team = builder.createTemporary(loc, baseTy);
-    fir::EmboxOp box = fir::EmboxOp::create(builder, loc, resultType, team);
 
     llvm::SmallVector<mlir::Value> args =
-        fir::runtime::createArguments(builder, loc, ftype, level, box);
+        fir::runtime::createArguments(builder, loc, ftype, level, team);
     fir::CallOp::create(builder, loc, funcOp, args);
 
-    rewriter.replaceOp(op, box);
+    rewriter.replaceOp(op, team);
     return mlir::success();
   }
 };
@@ -1065,17 +1063,17 @@ struct MIFTeamNumberOpConversion
     fir::FirOpBuilder builder(rewriter, mod);
     mlir::Location loc = op.getLoc();
     mlir::Type i64Ty = builder.getI64Type();
-    mlir::Type boxTy = fir::BoxType::get(builder.getNoneType());
+    mlir::Type refTy = builder.getRefType(builder.getNoneType());
     mlir::FunctionType ftype =
         mlir::FunctionType::get(builder.getContext(),
-                                /*inputs*/ {boxTy, builder.getRefType(i64Ty)},
+                                /*inputs*/ {refTy, builder.getRefType(i64Ty)},
                                 /*results*/ {});
     mlir::func::FuncOp funcOp =
         builder.createFunction(loc, getPRIFProcName("team_number"), ftype);
 
     mlir::Value team = op.getTeam();
     if (!team)
-      team = fir::AbsentOp::create(builder, loc, boxTy);
+      team = fir::AbsentOp::create(builder, loc, refTy);
 
     mlir::Value result = builder.createTemporary(loc, i64Ty);
     llvm::SmallVector<mlir::Value> args =
@@ -1336,14 +1334,12 @@ struct MIFImageIndexOpConversion
       std::string imageIndexName =
           op.getTeamNumber() ? getPRIFProcName("image_index_with_team_number")
                              : getPRIFProcName("image_index_with_team");
-      mlir::Type teamTy = boxTy;
+      mlir::Type teamTy = builder.getRefType(builder.getNoneType());
       if (op.getTeamNumber()) {
         teamTy = builder.getRefType(i64Ty);
         mlir::Value t = builder.createConvert(loc, i64Ty, team);
         team = builder.createTemporary(loc, i64Ty);
         fir::StoreOp::create(builder, loc, t, team);
-      } else {
-        team = builder.createBox(loc, team);
       }
       mlir::FunctionType ftype = mlir::FunctionType::get(
           builder.getContext(),
diff --git a/flang/test/Fir/MIF/change_team.mlir b/flang/test/Fir/MIF/change_team.mlir
index b80f121e09f2e..402e64c00e3d3 100644
--- a/flang/test/Fir/MIF/change_team.mlir
+++ b/flang/test/Fir/MIF/change_team.mlir
@@ -9,21 +9,17 @@
     %4:2 = hlfir.declare %3 {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
     %5 = fir.alloca i32 {bindc_name = "stat", uniq_name = "_QFEstat"}
     %6:2 = hlfir.declare %5 {uniq_name = "_QFEstat"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
-    %7 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"}
-    %8:2 = hlfir.declare %7 {uniq_name = "_QFEteam"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>)
-    %9 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
-    fir.copy %9 to %8#0 no_overlap : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
-    %10 = fir.embox %8#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
-    mif.change_team %10 : (!fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) {
-      %13 = fir.load %4#0 : !fir.ref<i32>
+    %7 = fir.address_of(@_QFEteam) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>
+    %8:2 = hlfir.declare %7 {uniq_name = "_QFEteam"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>) -> (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>)
+    mif.change_team %8#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>) {
+      %10 = fir.load %4#0 : !fir.ref<i32>
       %c1_i32 = arith.constant 1 : i32
-      %14 = arith.addi %13, %c1_i32 : i32
-      hlfir.assign %14 to %4#0 : i32, !fir.ref<i32>
+      %11 = arith.addi %10, %c1_i32 : i32
+      hlfir.assign %11 to %4#0 : i32, !fir.ref<i32>
       mif.end_team : () -> ()
     }
-    %11 = fir.embox %2#0 : (!fir.ref<!fir.char<1,10>>) -> !fir.box<!fir.char<1,10>>
-    %12 = fir.embox %8#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
-    mif.change_team %12 stat %6#0 errmsg %11 : (!fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<i32>, !fir.box<!fir.char<1,10>>) {
+    %9 = fir.embox %2#0 : (!fir.ref<!fir.char<1,10>>) -> !fir.box<!fir.char<1,10>>
+    mif.change_team %8#0 stat %6#0 errmsg %9 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.info:!fir.box<!fir.ptr<!fir.type<_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type{_QM__fortran_builtinsT__builtin_dummy_team_descriptor_type.__placeholder:i64}>>>}>>, !fir.ref<i32>, !fir.box<!fir.char<1,10>>) {
       mi...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/214207


More information about the flang-commits mailing list