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:$team_number, - Optional:$team); + Optional:$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:$coarray, Optional:$dim, - Optional:$team); + Optional:$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:$team, Optional:$team_number); + Optional:$team, Optional:$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:$stat, + let arguments = (ins AnyReferenceLike:$team, Optional:$stat, Optional:$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:$team_var, + Arg:$team_var, Optional:$new_index, Arg, "", [MemWrite]>:$stat, Arg, "", [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, "", [MemWrite]>:$stat, Arg, "", [MemWrite]>:$errmsg); @@ -511,7 +511,7 @@ def mif_GetTeamOp : mif_Op<"get_team", []> { }]; let arguments = (ins Optional:$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:$team); + let arguments = (ins Optional:$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(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 &statOrErrList = @@ -163,7 +163,7 @@ Fortran::lower::genChangeTeamStmt(Fortran::lower::AbstractConverter &converter, // Handle TEAM-VALUE const auto *teamExpr = Fortran::semantics::GetExpr(std::get(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(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 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 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 { 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 { 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 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 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) -> (!fir.ref, !fir.ref) %5 = fir.alloca i32 {bindc_name = "stat", uniq_name = "_QFEstat"} %6:2 = hlfir.declare %5 {uniq_name = "_QFEstat"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %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.ref>, !fir.ref>) - %9 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %9 to %8#0 no_overlap : !fir.ref>, !fir.ref> - %10 = fir.embox %8#0 : (!fir.ref>) -> !fir.box> - mif.change_team %10 : (!fir.box>) { - %13 = fir.load %4#0 : !fir.ref + %7 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %8:2 = hlfir.declare %7 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + mif.change_team %8#0 : (!fir.ref>>}>>) { + %10 = fir.load %4#0 : !fir.ref %c1_i32 = arith.constant 1 : i32 - %14 = arith.addi %13, %c1_i32 : i32 - hlfir.assign %14 to %4#0 : i32, !fir.ref + %11 = arith.addi %10, %c1_i32 : i32 + hlfir.assign %11 to %4#0 : i32, !fir.ref mif.end_team : () -> () } - %11 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> - %12 = fir.embox %8#0 : (!fir.ref>) -> !fir.box> - mif.change_team %12 stat %6#0 errmsg %11 : (!fir.box>, !fir.ref, !fir.box>) { + %9 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> + mif.change_team %8#0 stat %6#0 errmsg %9 : (!fir.ref>>}>>, !fir.ref, !fir.box>) { mif.end_team : () -> () } return @@ -31,8 +27,8 @@ // CHECK: %[[VAL_1:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_2:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_3:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_change_team(%[[VAL_3]], %[[VAL_1]], %[[VAL_2]], %[[VAL_2]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_3:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_change_team(%[[VAL_3]], %[[VAL_1]], %[[VAL_2]], %[[VAL_2]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_4:.*]] = fir.load %[[VAR_1:.*]]#0 : !fir.ref // CHECK: %[[C1:.*]] = arith.constant 1 : i32 // CHECK: %[[VAL_5:.*]] = arith.addi %[[VAL_4]], %[[C1]] : i32 @@ -43,9 +39,9 @@ // CHECK: %[[VAL_8:.*]] = fir.embox %[[ERRMSG:.*]]#0 : (!fir.ref>) -> !fir.box // CHECK: %[[VAL_9:.*]] = fir.absent !fir.box> -// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box +// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref // CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_8]] : (!fir.box>) -> !fir.box> -// CHECK: fir.call @_QMprifPprif_change_team(%[[TEAM_2]], %[[STAT:.*]]#0, %[[VAL_10]], %[[VAL_9]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: fir.call @_QMprifPprif_change_team(%[[TEAM_2]], %[[STAT:.*]]#0, %[[VAL_10]], %[[VAL_9]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_11:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_12:.*]] = fir.absent !fir.box> // CHECK: fir.call @_QMprifPprif_end_team(%[[VAL_11]], %[[VAL_12]], %[[VAL_12]]) : (!fir.ref, !fir.box>, !fir.box>) -> () diff --git a/flang/test/Fir/MIF/change_team2.mlir b/flang/test/Fir/MIF/change_team2.mlir index a9cc62dd7cc65..958918a73b6d4 100644 --- a/flang/test/Fir/MIF/change_team2.mlir +++ b/flang/test/Fir/MIF/change_team2.mlir @@ -9,26 +9,22 @@ %4:2 = hlfir.declare %3 {uniq_name = "_QFEnew_team"} : (!fir.ref) -> (!fir.ref, !fir.ref) %5 = fir.address_of(@_QMiso_fortran_envECstat_failed_image) : !fir.ref %6:2 = hlfir.declare %5 {fortran_attrs = #fir.var_attrs, uniq_name = "_QMiso_fortran_envECstat_failed_image"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %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.ref>, !fir.ref>) - %9 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %9 to %8#0 no_overlap : !fir.ref>, !fir.ref> - %10 = mif.this_image : () -> i32 + %7 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %8:2 = hlfir.declare %7 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %9 = mif.this_image : () -> i32 %c2_i32 = arith.constant 2 : i32 - %11 = arith.remsi %10, %c2_i32 : i32 + %10 = arith.remsi %9, %c2_i32 : i32 %c1_i32 = arith.constant 1 : i32 - %12 = arith.addi %11, %c1_i32 : i32 - hlfir.assign %12 to %4#0 : i32, !fir.ref - %13 = fir.load %4#0 : !fir.ref - %14 = fir.embox %8#0 : (!fir.ref>) -> !fir.box> - mif.form_team team_number %13 team_var %14 : (i32, !fir.box>) -> () - %15 = fir.embox %8#0 : (!fir.ref>) -> !fir.box> - mif.change_team %15 : (!fir.box>) { - %22 = mif.team_number : () -> i64 - %23 = fir.convert %22 : (i64) -> i32 - %24 = fir.load %4#0 : !fir.ref - %25 = arith.cmpi ne, %23, %24 : i32 - cf.cond_br %25, ^bb1, ^bb2 + %11 = arith.addi %10, %c1_i32 : i32 + hlfir.assign %11 to %4#0 : i32, !fir.ref + %12 = fir.load %4#0 : !fir.ref + mif.form_team team_number %12 team_var %8#0 : (i32, !fir.ref>>}>>) -> () + mif.change_team %8#0 : (!fir.ref>>}>>) { + %19 = mif.team_number : () -> i64 + %20 = fir.convert %19 : (i64) -> i32 + %21 = fir.load %4#0 : !fir.ref + %22 = arith.cmpi ne, %20, %21 : i32 + cf.cond_br %22, ^bb1, ^bb2 ^bb1: // pred: ^bb0 %c1_i32_5 = arith.constant 1 : i32 %false_6 = arith.constant false @@ -39,12 +35,12 @@ mif.end_team : () -> () } %c0_i128 = arith.constant 0 : i128 - %16:3 = hlfir.associate %c0_i128 {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) - %17 = fir.call @_QFPruntime_popcnt(%16#0) fastmath : (!fir.ref) -> i32 + %13:3 = hlfir.associate %c0_i128 {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) + %14 = fir.call @_QFPruntime_popcnt(%13#0) fastmath : (!fir.ref) -> i32 %c0_i32 = arith.constant 0 : i32 - %18 = arith.cmpi ne, %17, %c0_i32 : i32 - hlfir.end_associate %16#1, %16#2 : !fir.ref, i1 - cf.cond_br %18, ^bb1, ^bb2 + %15 = arith.cmpi ne, %14, %c0_i32 : i32 + hlfir.end_associate %13#1, %13#2 : !fir.ref, i1 + cf.cond_br %15, ^bb1, ^bb2 ^bb1: // pred: ^bb0 %c2_i32_0 = arith.constant 2 : i32 %false = arith.constant false @@ -53,12 +49,12 @@ fir.unreachable ^bb2: // pred: ^bb0 %c1_i128 = arith.constant 1 : i128 - %19:3 = hlfir.associate %c1_i128 {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) - %20 = fir.call @_QFPruntime_poppar(%19#0) fastmath : (!fir.ref) -> i32 + %16:3 = hlfir.associate %c1_i128 {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) + %17 = fir.call @_QFPruntime_poppar(%16#0) fastmath : (!fir.ref) -> i32 %c1_i32_2 = arith.constant 1 : i32 - %21 = arith.cmpi ne, %20, %c1_i32_2 : i32 - hlfir.end_associate %19#1, %19#2 : !fir.ref, i1 - cf.cond_br %21, ^bb3, ^bb4 + %18 = arith.cmpi ne, %17, %c1_i32_2 : i32 + hlfir.end_associate %16#1, %16#2 : !fir.ref, i1 + cf.cond_br %18, ^bb3, ^bb4 ^bb3: // pred: ^bb2 %c3_i32 = arith.constant 3 : i32 %false_3 = arith.constant false @@ -67,6 +63,7 @@ fir.unreachable ^bb4: // pred: ^bb2 return + } // CHECK: %[[VAL_0:.*]] = fir.alloca i64 @@ -79,41 +76,37 @@ // CHECK: %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFEnew_team"} : (!fir.ref) -> (!fir.ref, !fir.ref) // CHECK: %[[VAL_8:.*]] = fir.address_of(@_QMiso_fortran_envECstat_failed_image) : !fir.ref // CHECK: %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QMiso_fortran_envECstat_failed_image"} : (!fir.ref) -> (!fir.ref, !fir.ref) -// CHECK: %[[VAL_10:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"} -// CHECK: %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFEteam"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) -// CHECK: %[[VAL_12:.*]] = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> -// CHECK: fir.copy %[[VAL_12]] to %[[VAL_11]]#0 no_overlap : !fir.ref>, !fir.ref> -// CHECK: %[[VAL_13:.*]] = fir.absent !fir.box -// CHECK: fir.call @_QMprifPprif_this_image_no_coarray(%[[VAL_13]], %[[VAL_2]]) : (!fir.box, !fir.ref) -> () -// CHECK: %[[VAL_14:.*]] = fir.load %[[VAL_2]] : !fir.ref +// CHECK: %[[VAL_10:.*]] = fir.address_of(@_QFEteam) : !fir.ref>>}>> +// CHECK: %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) +// CHECK: %[[VAL_12:.*]] = fir.absent !fir.ref +// CHECK: fir.call @_QMprifPprif_this_image_no_coarray(%[[VAL_12]], %[[VAL_2]]) : (!fir.ref, !fir.ref) -> () +// CHECK: %[[VAL_13:.*]] = fir.load %[[VAL_2]] : !fir.ref // CHECK: %[[C2_i32:.*]] = arith.constant 2 : i32 -// CHECK: %[[VAL_15:.*]] = arith.remsi %[[VAL_14]], %[[C2_i32]] : i32 +// CHECK: %[[VAL_14:.*]] = arith.remsi %[[VAL_13]], %[[C2_i32]] : i32 // CHECK: %[[C1_i32:.*]] = arith.constant 1 : i32 -// CHECK: %[[VAL_16:.*]] = arith.addi %[[VAL_15]], %[[C1_i32]] : i32 -// CHECK: hlfir.assign %[[VAL_16]] to %[[VAL_7]]#0 : i32, !fir.ref -// CHECK: %[[VAL_17:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref -// CHECK: %[[VAL_18:.*]] = fir.embox %[[VAL_11]]#0 : (!fir.ref>) -> !fir.box> -// CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (i32) -> i64 -// CHECK: fir.store %[[VAL_19]] to %[[VAL_1]] : !fir.ref -// CHECK: %[[VAL_20:.*]] = fir.absent !fir.ref -// CHECK: %[[VAL_21:.*]] = fir.absent !fir.ref -// CHECK: %[[VAL_22:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_23:.*]] = fir.convert %[[VAL_18]] : (!fir.box>) -> !fir.box -// CHECK: fir.call @_QMprifPprif_form_team(%[[VAL_1]], %[[VAL_23]], %[[VAL_20]], %[[VAL_21]], %[[VAL_22]], %[[VAL_22]]) : (!fir.ref, !fir.box, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () -// CHECK: %[[VAL_24:.*]] = fir.embox %[[VAL_11]]#0 : (!fir.ref>) -> !fir.box> -// CHECK: %[[VAL_25:.*]] = fir.absent !fir.ref -// CHECK: %[[VAL_26:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_24]] : (!fir.box>) -> !fir.box -// CHECK: fir.call @_QMprifPprif_change_team(%[[VAL_27]], %[[VAL_25]], %[[VAL_26]], %[[VAL_26]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_15:.*]] = arith.addi %[[VAL_14]], %[[C1_i32]] : i32 +// CHECK: hlfir.assign %[[VAL_15]] to %[[VAL_7]]#0 : i32, !fir.ref +// CHECK: %[[VAL_16:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref +// CHECK: %[[VAL_17:.*]] = fir.convert %[[VAL_16]] : (i32) -> i64 +// CHECK: fir.store %[[VAL_17]] to %[[VAL_1]] : !fir.ref +// CHECK: %[[VAL_18:.*]] = fir.absent !fir.ref +// CHECK: %[[VAL_19:.*]] = fir.absent !fir.ref +// CHECK: %[[VAL_20:.*]] = fir.absent !fir.box> +// CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_11]]#0 : (!fir.ref>>}>>) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_form_team(%[[VAL_1]], %[[VAL_21]], %[[VAL_18]], %[[VAL_19]], %[[VAL_20]], %[[VAL_20]]) : (!fir.ref, !fir.ref, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_22:.*]] = fir.absent !fir.ref +// CHECK: %[[VAL_23:.*]] = fir.absent !fir.box> +// CHECK: %[[VAL_24:.*]] = fir.convert %[[VAL_11]]#0 : (!fir.ref>>}>>) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_change_team(%[[VAL_24]], %[[VAL_22]], %[[VAL_23]], %[[VAL_23]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: cf.br ^bb1 // CHECK: ^bb1: // pred: ^bb0 -// CHECK: %[[VAL_28:.*]] = fir.absent !fir.box -// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_28]], %[[VAL_0]]) : (!fir.box, !fir.ref) -> () -// CHECK: %[[VAL_29:.*]] = fir.load %0 : !fir.ref -// CHECK: %[[VAL_30:.*]] = fir.convert %[[VAL_29]] : (i64) -> i32 -// CHECK: %[[VAL_31:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref -// CHECK: %[[VAL_32:.*]] = arith.cmpi ne, %[[VAL_30]], %[[VAL_31]] : i32 -// CHECK: cf.cond_br %[[VAL_32]], ^bb2, ^bb3 +// CHECK: %[[VAL_25:.*]] = fir.absent !fir.ref +// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_25]], %[[VAL_0]]) : (!fir.ref, !fir.ref) -> () +// CHECK: %[[VAL_26:.*]] = fir.load %[[VAL_0]] : !fir.ref +// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_26]] : (i64) -> i32 +// CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref +// CHECK: %[[VAL_29:.*]] = arith.cmpi ne, %[[VAL_27]], %[[VAL_28]] : i32 +// CHECK: cf.cond_br %[[VAL_29]], ^bb2, ^bb3 // CHECK: ^bb2: // pred: ^bb1 // CHECK: %[[C1_i32_0:.*]] = arith.constant 1 : i32 // CHECK: %[[FALSE:.*]] = arith.constant false @@ -121,18 +114,18 @@ // CHECK: fir.call @_FortranAStopStatement(%[[C1_i32_0]], %[[FALSE]], %[[FALSE_1]]) fastmath : (i32, i1, i1) -> () // CHECK: fir.unreachable // CHECK: ^bb3: // pred: ^bb1 -// CHECK: %[[VAL_33:.*]] = fir.absent !fir.ref -// CHECK: %[[VAL_34:.*]] = fir.absent !fir.box> -// CHECK: fir.call @_QMprifPprif_end_team(%[[VAL_33]], %[[VAL_34]], %[[VAL_34]]) : (!fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_30:.*]] = fir.absent !fir.ref +// CHECK: %[[VAL_31:.*]] = fir.absent !fir.box> +// CHECK: fir.call @_QMprifPprif_end_team(%[[VAL_30]], %[[VAL_31]], %[[VAL_31]]) : (!fir.ref, !fir.box>, !fir.box>) -> () // CHECK: cf.br ^bb4 // CHECK: ^bb4: // pred: ^bb3 // CHECK: %[[C0_i128:.*]] = arith.constant 0 : i128 -// CHECK: %[[VAL_35:.*]]:3 = hlfir.associate %[[C0_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) -// CHECK: %[[VAL_36:.*]] = fir.call @_QFPruntime_popcnt(%[[VAL_35]]#0) fastmath : (!fir.ref) -> i32 +// CHECK: %[[VAL_32:.*]]:3 = hlfir.associate %[[C0_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) +// CHECK: %[[VAL_33:.*]] = fir.call @_QFPruntime_popcnt(%[[VAL_32]]#0) fastmath : (!fir.ref) -> i32 // CHECK: %[[C0_i32:.*]] = arith.constant 0 : i32 -// CHECK: %[[VAL_37:.*]] = arith.cmpi ne, %[[VAL_36]], %[[C0_i32]] : i32 -// CHECK: hlfir.end_associate %[[VAL_35]]#1, %[[VAL_35]]#2 : !fir.ref, i1 -// CHECK: cf.cond_br %[[VAL_37]], ^bb5, ^bb6 +// CHECK: %[[VAL_34:.*]] = arith.cmpi ne, %[[VAL_33]], %[[C0_i32]] : i32 +// CHECK: hlfir.end_associate %[[VAL_32]]#1, %[[VAL_32]]#2 : !fir.ref, i1 +// CHECK: cf.cond_br %[[VAL_34]], ^bb5, ^bb6 // CHECK: ^bb5: // pred: ^bb4 // CHECK: %[[C2_i32_2:.*]] = arith.constant 2 : i32 // CHECK: %[[FALSE_3:.*]] = arith.constant false @@ -141,12 +134,12 @@ // CHECK: fir.unreachable // CHECK: ^bb6: // pred: ^bb4 // CHECK: %[[C1_i128:.*]] = arith.constant 1 : i128 -// CHECK: %[[VAL_38:.*]]:3 = hlfir.associate %[[C1_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) -// CHECK: %[[VAL_39:.*]] = fir.call @_QFPruntime_poppar(%[[VAL_38]]#0) fastmath : (!fir.ref) -> i32 +// CHECK: %[[VAL_35:.*]]:3 = hlfir.associate %[[C1_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref, !fir.ref, i1) +// CHECK: %[[VAL_36:.*]] = fir.call @_QFPruntime_poppar(%[[VAL_35]]#0) fastmath : (!fir.ref) -> i32 // CHECK: %[[C1_i32_5:.*]] = arith.constant 1 : i32 -// CHECK: %[[VAL_40:.*]] = arith.cmpi ne, %[[VAL_39]], %[[C1_i32_5]] : i32 -// CHECK: hlfir.end_associate %[[VAL_38]]#1, %[[VAL_38]]#2 : !fir.ref, i1 -// CHECK: cf.cond_br %40, ^bb7, ^bb8 +// CHECK: %[[VAL_37:.*]] = arith.cmpi ne, %[[VAL_36]], %[[C1_i32_5]] : i32 +// CHECK: hlfir.end_associate %[[VAL_35]]#1, %[[VAL_35]]#2 : !fir.ref, i1 +// CHECK: cf.cond_br %[[VAL_37]], ^bb7, ^bb8 // CHECK: ^bb7: // pred: ^bb6 // CHECK: %[[C3_i32:.*]] = arith.constant 3 : i32 // CHECK: %[[FALSE_6:.*]] = arith.constant false diff --git a/flang/test/Fir/MIF/form_team.mlir b/flang/test/Fir/MIF/form_team.mlir index d53f1582bd4e6..d92c27090453c 100644 --- a/flang/test/Fir/MIF/form_team.mlir +++ b/flang/test/Fir/MIF/form_team.mlir @@ -1,57 +1,51 @@ // RUN: fir-opt --mif-convert %s | FileCheck %s func.func @_QQmain() attributes {fir.bindc_name = "TEST_FORM_TEAM"} { - %0 = fir.dummy_scope : !fir.dscope + %0 = fir.dummy_scope : !fir.dscope %c10 = arith.constant 10 : index %1 = fir.alloca !fir.char<1,10> {bindc_name = "err", uniq_name = "_QFEerr"} %2:2 = hlfir.declare %1 typeparams %c10 {uniq_name = "_QFEerr"} : (!fir.ref>, index) -> (!fir.ref>, !fir.ref>) %3 = fir.alloca i32 {bindc_name = "stat", uniq_name = "_QFEstat"} %4:2 = hlfir.declare %3 {uniq_name = "_QFEstat"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %5 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"} - %6:2 = hlfir.declare %5 {uniq_name = "_QFEteam"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) - %7 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %7 to %6#0 no_overlap : !fir.ref>, !fir.ref> - %8 = fir.alloca i32 {bindc_name = "team_index", uniq_name = "_QFEteam_index"} - %9:2 = hlfir.declare %8 {uniq_name = "_QFEteam_index"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %10 = fir.alloca i32 {bindc_name = "team_number", uniq_name = "_QFEteam_number"} - %11:2 = hlfir.declare %10 {uniq_name = "_QFEteam_number"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %12 = fir.load %11#0 : !fir.ref - %13 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.form_team team_number %12 team_var %13 : (i32, !fir.box>) -> () - %14 = fir.load %9#0 : !fir.ref - %15 = fir.load %11#0 : !fir.ref - %16 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.form_team team_number %15 team_var %16 new_index %14 : (i32, !fir.box>, i32) -> () - %17 = fir.load %11#0 : !fir.ref - %18 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.form_team team_number %17 team_var %18 stat %4#0 : (i32, !fir.box>, !fir.ref) -> () - %19 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> - %20 = fir.load %11#0 : !fir.ref - %21 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.form_team team_number %20 team_var %21 errmsg %19 : (i32, !fir.box>, !fir.box>) -> () + %5 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %6:2 = hlfir.declare %5 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %7 = fir.alloca i32 {bindc_name = "team_index", uniq_name = "_QFEteam_index"} + %8:2 = hlfir.declare %7 {uniq_name = "_QFEteam_index"} : (!fir.ref) -> (!fir.ref, !fir.ref) + %9 = fir.alloca i32 {bindc_name = "team_number", uniq_name = "_QFEteam_number"} + %10:2 = hlfir.declare %9 {uniq_name = "_QFEteam_number"} : (!fir.ref) -> (!fir.ref, !fir.ref) + %11 = fir.load %10#0 : !fir.ref + mif.form_team team_number %11 team_var %6#0 : (i32, !fir.ref>>}>>) -> () + %12 = fir.load %8#0 : !fir.ref + %13 = fir.load %10#0 : !fir.ref + mif.form_team team_number %13 team_var %6#0 new_index %12 : (i32, !fir.ref>>}>>, i32) -> () + %14 = fir.load %10#0 : !fir.ref + mif.form_team team_number %14 team_var %6#0 stat %4#0 : (i32, !fir.ref>>}>>, !fir.ref) -> () + %15 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> + %16 = fir.load %10#0 : !fir.ref + mif.form_team team_number %16 team_var %6#0 errmsg %15 : (i32, !fir.ref>>}>>, !fir.box>) -> () return } // CHECK: %[[VAL_1:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_2:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_3:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_4:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_4]], %[[VAL_1]], %[[VAL_2]], %[[VAL_3]], %[[VAL_3]]) : (!fir.ref, !fir.box, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_4:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_4]], %[[VAL_1]], %[[VAL_2]], %[[VAL_3]], %[[VAL_3]]) : (!fir.ref, !fir.ref, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_5:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_6:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_7:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_7]], %[[NEW_INDEX:.*]], %[[VAL_5]], %[[VAL_6]], %[[VAL_6]]) : (!fir.ref, !fir.box, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_7:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_7]], %[[NEW_INDEX:.*]], %[[VAL_5]], %[[VAL_6]], %[[VAL_6]]) : (!fir.ref, !fir.ref, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_8:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_9:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_10:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_10]], %[[VAL_8]], %[[START:.*]]#0, %[[VAL_9]], %[[VAL_9]]) : (!fir.ref, !fir.box, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[VAL_10:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_10]], %[[VAL_8]], %[[START:.*]]#0, %[[VAL_9]], %[[VAL_9]]) : (!fir.ref, !fir.ref, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_11:.*]] = fir.embox %[[ERRMSG:.*]]#0 : (!fir.ref>) -> !fir.box> // CHECK: %[[VAL_12:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_13:.*]] = fir.absent !fir.ref // CHECK: %[[VAL_14:.*]] = fir.absent !fir.box> -// CHECK: %[[VAL_15:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box +// CHECK: %[[VAL_15:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref // CHECK: %[[VAL_16:.*]] = fir.convert %[[VAL_11]] : (!fir.box>) -> !fir.box> -// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_15]], %[[VAL_12]], %[[VAL_13]], %[[VAL_16]], %[[VAL_14]]) : (!fir.ref, !fir.box, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: fir.call @_QMprifPprif_form_team(%[[TEAM_NUMBER:.*]], %[[VAL_15]], %[[VAL_12]], %[[VAL_13]], %[[VAL_16]], %[[VAL_14]]) : (!fir.ref, !fir.ref, !fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () diff --git a/flang/test/Fir/MIF/get_team.mlir b/flang/test/Fir/MIF/get_team.mlir index c7b98581fcb89..48dafd00a01b0 100644 --- a/flang/test/Fir/MIF/get_team.mlir +++ b/flang/test/Fir/MIF/get_team.mlir @@ -10,59 +10,58 @@ %6:2 = hlfir.declare %5 {uniq_name = "_QFEn"} : (!fir.ref) -> (!fir.ref, !fir.ref) %7 = fir.address_of(@_QMiso_fortran_envECparent_team) : !fir.ref %8:2 = hlfir.declare %7 {fortran_attrs = #fir.var_attrs, uniq_name = "_QMiso_fortran_envECparent_team"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %9 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "result_team", uniq_name = "_QFEresult_team"} - %10:2 = hlfir.declare %9 {uniq_name = "_QFEresult_team"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) - %11 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %11 to %10#0 no_overlap : !fir.ref>, !fir.ref> - %12 = mif.get_team : () -> !fir.box> - %13:2 = hlfir.declare %12 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %9 = fir.address_of(@_QFEresult_team) : !fir.ref>>}>> + %10:2 = hlfir.declare %9 {uniq_name = "_QFEresult_team"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %11 = mif.get_team : () -> !fir.ref>>}>> + %12:2 = hlfir.declare %11 {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) %false = arith.constant false - %14 = hlfir.as_expr %13#0 move %false : (!fir.box>, i1) -> !hlfir.expr> - hlfir.assign %14 to %10#0 : !hlfir.expr>, !fir.ref> - hlfir.destroy %14 : !hlfir.expr> + %13 = hlfir.as_expr %12#0 move %false : (!fir.ref>>}>>, i1) -> !hlfir.expr>>}>> + hlfir.assign %13 to %10#0 : !hlfir.expr>>}>>, !fir.ref>>}>> + hlfir.destroy %13 : !hlfir.expr>>}>> %c-2_i32 = arith.constant -2 : i32 - %15 = mif.get_team level %c-2_i32 : (i32) -> !fir.box> - %16:2 = hlfir.declare %15 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %14 = mif.get_team level %c-2_i32 : (i32) -> !fir.ref>>}>> + %15:2 = hlfir.declare %14 {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) %false_0 = arith.constant false - %17 = hlfir.as_expr %16#0 move %false_0 : (!fir.box>, i1) -> !hlfir.expr> - hlfir.assign %17 to %10#0 : !hlfir.expr>, !fir.ref> - hlfir.destroy %17 : !hlfir.expr> + %16 = hlfir.as_expr %15#0 move %false_0 : (!fir.ref>>}>>, i1) -> !hlfir.expr>>}>> + hlfir.assign %16 to %10#0 : !hlfir.expr>>}>>, !fir.ref>>}>> + hlfir.destroy %16 : !hlfir.expr>>}>> %c-1_i32 = arith.constant -1 : i32 - %18 = mif.get_team level %c-1_i32 : (i32) -> !fir.box> - %19:2 = hlfir.declare %18 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %17 = mif.get_team level %c-1_i32 : (i32) -> !fir.ref>>}>> + %18:2 = hlfir.declare %17 {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) %false_1 = arith.constant false - %20 = hlfir.as_expr %19#0 move %false_1 : (!fir.box>, i1) -> !hlfir.expr> - hlfir.assign %20 to %10#0 : !hlfir.expr>, !fir.ref> - hlfir.destroy %20 : !hlfir.expr> + %19 = hlfir.as_expr %18#0 move %false_1 : (!fir.ref>>}>>, i1) -> !hlfir.expr>>}>> + hlfir.assign %19 to %10#0 : !hlfir.expr>>}>>, !fir.ref>>}>> + hlfir.destroy %19 : !hlfir.expr>>}>> %c-3_i32 = arith.constant -3 : i32 - %21 = mif.get_team level %c-3_i32 : (i32) -> !fir.box> - %22:2 = hlfir.declare %21 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %20 = mif.get_team level %c-3_i32 : (i32) -> !fir.ref>>}>> + %21:2 = hlfir.declare %20 {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) %false_2 = arith.constant false - %23 = hlfir.as_expr %22#0 move %false_2 : (!fir.box>, i1) -> !hlfir.expr> - hlfir.assign %23 to %10#0 : !hlfir.expr>, !fir.ref> - hlfir.destroy %23 : !hlfir.expr> - %24 = fir.load %6#0 : !fir.ref - %25 = mif.get_team level %24 : (i32) -> !fir.box> - %26:2 = hlfir.declare %25 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %22 = hlfir.as_expr %21#0 move %false_2 : (!fir.ref>>}>>, i1) -> !hlfir.expr>>}>> + hlfir.assign %22 to %10#0 : !hlfir.expr>>}>>, !fir.ref>>}>> + hlfir.destroy %22 : !hlfir.expr>>}>> + %23 = fir.load %6#0 : !fir.ref + %24 = mif.get_team level %23 : (i32) -> !fir.ref>>}>> + %25:2 = hlfir.declare %24 {uniq_name = ".tmp.intrinsic_result"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) %false_3 = arith.constant false - %27 = hlfir.as_expr %26#0 move %false_3 : (!fir.box>, i1) -> !hlfir.expr> - hlfir.assign %27 to %10#0 : !hlfir.expr>, !fir.ref> - hlfir.destroy %27 : !hlfir.expr> + %26 = hlfir.as_expr %25#0 move %false_3 : (!fir.ref>>}>>, i1) -> !hlfir.expr>>}>> + hlfir.assign %26 to %10#0 : !hlfir.expr>>}>>, !fir.ref>>}>> + hlfir.destroy %26 : !hlfir.expr>>}>> return + } // CHECK: %[[VAL_1:.*]] = fir.absent !fir.ref -// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_get_team(%[[VAL_1]], %[[RESULT]]) : (!fir.ref, !fir.box) -> () +// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_get_team(%[[VAL_1]], %[[RESULT]]) : (!fir.ref, !fir.ref) -> () -// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_get_team(%[[INIT:.*]], %[[RESULT]]) : (!fir.ref, !fir.box) -> () +// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_get_team(%[[INIT:.*]], %[[RESULT]]) : (!fir.ref, !fir.ref) -> () -// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_get_team(%[[CURRENT:.*]], %[[RESULT]]) : (!fir.ref, !fir.box) -> () +// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_get_team(%[[CURRENT:.*]], %[[RESULT]]) : (!fir.ref, !fir.ref) -> () -// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_get_team(%[[PARENT:.*]], %[[RESULT]]) : (!fir.ref, !fir.box) -> () +// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_get_team(%[[PARENT:.*]], %[[RESULT]]) : (!fir.ref, !fir.ref) -> () -// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_get_team(%[[VAL_N:.*]], %[[RESULT]]) : (!fir.ref, !fir.box) -> () +// CHECK: %[[RESULT:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_get_team(%[[VAL_N:.*]], %[[RESULT]]) : (!fir.ref, !fir.ref) -> () diff --git a/flang/test/Fir/MIF/sync_team.mlir b/flang/test/Fir/MIF/sync_team.mlir index 94b66123e28c0..dc7f8c024c714 100644 --- a/flang/test/Fir/MIF/sync_team.mlir +++ b/flang/test/Fir/MIF/sync_team.mlir @@ -7,20 +7,14 @@ %2:2 = hlfir.declare %1 typeparams %c128 {uniq_name = "_QFEerror_message"} : (!fir.ref>, index) -> (!fir.ref>, !fir.ref>) %3 = fir.alloca i32 {bindc_name = "sync_status", uniq_name = "_QFEsync_status"} %4:2 = hlfir.declare %3 {uniq_name = "_QFEsync_status"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %5 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"} - %6:2 = hlfir.declare %5 {uniq_name = "_QFEteam"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) - %7 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %7 to %6#0 no_overlap : !fir.ref>, !fir.ref> - %8 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.sync_team %8 : (!fir.box>) -> () - %9 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - mif.sync_team %9 stat %4#0 : (!fir.box>, !fir.ref) -> () - %10 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - %11 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> - mif.sync_team %10 errmsg %11 : (!fir.box>, !fir.box>) -> () - %12 = fir.embox %6#0 : (!fir.ref>) -> !fir.box> - %13 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> - mif.sync_team %12 stat %4#0 errmsg %13 : (!fir.box>, !fir.ref, !fir.box>) -> () + %5 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %6:2 = hlfir.declare %5 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + mif.sync_team %6#0 : (!fir.ref>>}>>) -> () + mif.sync_team %6#0 stat %4#0 : (!fir.ref>>}>>, !fir.ref) -> () + %7 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> + mif.sync_team %6#0 errmsg %7 : (!fir.ref>>}>>, !fir.box>) -> () + %8 = fir.embox %2#0 : (!fir.ref>) -> !fir.box> + mif.sync_team %6#0 stat %4#0 errmsg %8 : (!fir.ref>>}>>, !fir.ref, !fir.box>) -> () return } fir.global internal @_QFEerror_message : !fir.char<1,128> { @@ -33,22 +27,22 @@ // CHECK: %[[VAL_1:.*]] = fir.absent !fir.box> // CHECK: %[[VAL_2:.*]] = fir.absent !fir.ref -// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[VAL_2]], %[[VAL_1]], %[[VAL_1]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[VAL_2]], %[[VAL_1]], %[[VAL_1]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_3:.*]] = fir.absent !fir.box> -// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[STAT]]#0, %[[VAL_3]], %[[VAL_3]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[STAT]]#0, %[[VAL_3]], %[[VAL_3]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_4:.*]] = fir.embox %[[ERRMSG]]#0 : (!fir.ref>) -> !fir.box> // CHECK: %[[VAL_5:.*]] = fir.absent !fir.box> // CHECK: %[[VAL_6:.*]] = fir.absent !fir.ref -// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box +// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref // CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_4]] : (!fir.box>) -> !fir.box> -// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[VAL_6]], %[[VAL_7]], %[[VAL_5]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[VAL_6]], %[[VAL_7]], %[[VAL_5]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () // CHECK: %[[VAL_8:.*]] = fir.embox %[[ERRMSG]]#0 : (!fir.ref>) -> !fir.box> // CHECK: %[[VAL_9:.*]] = fir.absent !fir.box> -// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box +// CHECK: %[[TEAM_2:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref // CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_8]] : (!fir.box>) -> !fir.box> -// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[STAT]]#0, %[[VAL_10]], %[[VAL_9]]) : (!fir.box, !fir.ref, !fir.box>, !fir.box>) -> () +// CHECK: fir.call @_QMprifPprif_sync_team(%[[TEAM_2]], %[[STAT]]#0, %[[VAL_10]], %[[VAL_9]]) : (!fir.ref, !fir.ref, !fir.box>, !fir.box>) -> () diff --git a/flang/test/Fir/MIF/team_number.mlir b/flang/test/Fir/MIF/team_number.mlir index 00fc473965ee2..dad1a55b518f0 100644 --- a/flang/test/Fir/MIF/team_number.mlir +++ b/flang/test/Fir/MIF/team_number.mlir @@ -4,24 +4,21 @@ %0 = fir.dummy_scope : !fir.dscope %1 = fir.alloca i32 {bindc_name = "t", uniq_name = "_QFEt"} %2:2 = hlfir.declare %1 {uniq_name = "_QFEt"} : (!fir.ref) -> (!fir.ref, !fir.ref) - %3 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"} - %4:2 = hlfir.declare %3 {uniq_name = "_QFEteam"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) - %5 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %5 to %4#0 no_overlap : !fir.ref>, !fir.ref> - %6 = fir.embox %4#0 : (!fir.ref>) -> !fir.box> - %7 = mif.team_number team %6 : (!fir.box>) -> i64 + %3 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %4:2 = hlfir.declare %3 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %5 = mif.team_number team %4#0 : (!fir.ref>>}>>) -> i64 + %6 = fir.convert %5 : (i64) -> i32 + hlfir.assign %6 to %2#0 : i32, !fir.ref + %7 = mif.team_number : () -> i64 %8 = fir.convert %7 : (i64) -> i32 hlfir.assign %8 to %2#0 : i32, !fir.ref - %9 = mif.team_number : () -> i64 - %10 = fir.convert %9 : (i64) -> i32 - hlfir.assign %10 to %2#0 : i32, !fir.ref return } -// CHECK: %[[VAL_1:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.box -// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_1]], %[[RESULT:.*]]) : (!fir.box, !fir.ref) -> () +// CHECK: %[[VAL_1:.*]] = fir.convert %[[TEAM:.*]] : ({{.*}}) -> !fir.ref +// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_1]], %[[RESULT:.*]]) : (!fir.ref, !fir.ref) -> () // CHECK: %[[VAL_2:.*]] = fir.load %[[RESULT]] : !fir.ref -// CHECK: %[[VAL_3:.*]] = fir.absent !fir.box -// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_3]], %[[RESULT:.*]]) : (!fir.box, !fir.ref) -> () +// CHECK: %[[VAL_3:.*]] = fir.absent !fir.ref +// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_3]], %[[RESULT:.*]]) : (!fir.ref, !fir.ref) -> () // CHECK: %[[VAL_4:.*]] = fir.load %[[RESULT]] : !fir.ref diff --git a/flang/test/Fir/MIF/this_image.mlir b/flang/test/Fir/MIF/this_image.mlir index 4af6d6cc0d983..847ccbfe0ef90 100644 --- a/flang/test/Fir/MIF/this_image.mlir +++ b/flang/test/Fir/MIF/this_image.mlir @@ -14,10 +14,10 @@ %5 = fir.coordinate_of %1, %c1 : (!fir.ref>, index) -> !fir.ref fir.store %c1_i64_0 to %5 : !fir.ref %6 = fir.embox %1 : (!fir.ref>) -> !fir.box> - %c1_i64_1 = arith.constant 1 : i64 - %c0_2 = arith.constant 0 : index - %7 = fir.coordinate_of %0, %c0_2 : (!fir.ref>, index) -> !fir.ref - fir.store %c1_i64_1 to %7 : !fir.ref + %c2_i64 = arith.constant 2 : i64 + %c0_1 = arith.constant 0 : index + %7 = fir.coordinate_of %0, %c0_1 : (!fir.ref>, index) -> !fir.ref + fir.store %c2_i64 to %7 : !fir.ref %8 = fir.embox %0 : (!fir.ref>) -> !fir.box> mif.alloc_coarray %3 lcobounds %6 ucobounds %8 {uniq_name = "_QFEa"} : (!fir.ref, !fir.box>, !fir.box>) -> () %9:2 = hlfir.declare %3 {uniq_name = "_QFEa"} : (!fir.ref) -> (!fir.ref, !fir.ref) @@ -27,37 +27,24 @@ %12 = fir.alloca !fir.array<2xi32> {bindc_name = "j", uniq_name = "_QFEj"} %13 = fir.shape %c2 : (index) -> !fir.shape<1> %14:2 = hlfir.declare %12(%13) {uniq_name = "_QFEj"} : (!fir.ref>, !fir.shape<1>) -> (!fir.ref>, !fir.ref>) - %15 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"} - %16:2 = hlfir.declare %15 {uniq_name = "_QFEteam"} : (!fir.ref>) -> (!fir.ref>, !fir.ref>) - %17 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref> - fir.copy %17 to %16#0 no_overlap : !fir.ref>, !fir.ref> - %18 = mif.this_image : () -> i32 + %15 = fir.address_of(@_QFEteam) : !fir.ref>>}>> + %16:2 = hlfir.declare %15 {uniq_name = "_QFEteam"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %17 = mif.this_image : () -> i32 + hlfir.assign %17 to %11#0 : i32, !fir.ref + %18 = mif.this_image team %16#0 : (!fir.ref>>}>>) -> i32 hlfir.assign %18 to %11#0 : i32, !fir.ref - %19 = fir.embox %16#0 : (!fir.ref>) -> !fir.box> - %20 = mif.this_image team %19 : (!fir.box>) -> i32 - hlfir.assign %20 to %11#0 : i32, !fir.ref - %21 = fir.embox %9#0 : (!fir.ref) -> !fir.box - %22 = mif.this_image coarray %21 : (!fir.box) -> !fir.box> - %23:2 = hlfir.declare %22 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) + %19 = fir.embox %9#0 : (!fir.ref) -> !fir.box + %20 = mif.this_image coarray %19 : (!fir.box) -> !fir.box> + %21:2 = hlfir.declare %20 {uniq_name = ".tmp.intrinsic_result"} : (!fir.box>) -> (!fir.box>, !fir.box>) %false = arith.constant false - %24 = hlfir.as_expr %23#0 move %false : (!fir.box>, i1) -> !hlfir.expr - %c0_3 = arith.constant 0 : index - %25:3 = fir.box_dims %23#0, %c0_3 : (!fir.box>, index) -> (index, index, index) - %26 = fir.shape %25#1 : (index) -> !fir.shape<1> - %27 = hlfir.elemental %26 unordered : (!fir.shape<1>) -> !hlfir.expr { - ^bb0(%arg0: index): - %31 = hlfir.apply %24, %arg0 : (!hlfir.expr, index) -> i64 - %32 = fir.convert %31 : (i64) -> i32 - hlfir.yield_element %32 : i32 - } - hlfir.assign %27 to %14#0 : !hlfir.expr, !fir.ref> - hlfir.destroy %27 : !hlfir.expr - hlfir.destroy %24 : !hlfir.expr + %22 = hlfir.as_expr %21#0 move %false : (!fir.box>, i1) -> !hlfir.expr + hlfir.assign %22 to %14#0 : !hlfir.expr, !fir.ref> + hlfir.destroy %22 : !hlfir.expr %c1_i32 = arith.constant 1 : i32 - %28 = fir.embox %9#0 : (!fir.ref) -> !fir.box - %29 = mif.this_image coarray %28 dim %c1_i32 : (!fir.box, i32) -> i64 - %30 = fir.convert %29 : (i64) -> i32 - hlfir.assign %30 to %14#0 : i32, !fir.ref> + %23 = fir.embox %9#0 : (!fir.ref) -> !fir.box + %24 = mif.this_image coarray %23 dim %c1_i32 : (!fir.box, i32) -> i64 + %25 = fir.convert %24 : (i64) -> i32 + hlfir.assign %25 to %14#0 : i32, !fir.ref> return }