[flang][MIF] Fix team_type usage in all MIF operations #205953 - #214207
Merged
Conversation
|
@llvm/pr-subscribers-flang-fir-hlfir Author: Jean-Didier PAILLEUX (JDPailleux) ChangesThis PR resolves the issue #205953. Its purpose is to correct the use of 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:
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]
|
bonachea
approved these changes
Aug 6, 2026
bonachea
left a comment
Contributor
There was a problem hiding this comment.
Thanks for the fixes! Changes LGTM!
I've thoroughly tested the changes in this PR using a recent snapshot of Caffeine:
- I've confirmed this PR fixes the defects observed with all three forms of the original reproducers reported in #205953.
- I've confirmed it also fixes the crashes observed in the original test program from which those reproducers were distilled.
- After reviewing the PR source changes, I've also expanded the test program to reproduce similar crashes in old versions of flang with
THIS_IMAGE(TEAM=),NUM_IMAGES(TEAM=)andTEAM_NUMBER(TEAM=), and confirmed they are also all fixed by this PR.
Given this PR fixes some very significant defects in the flang 22/23 TEAM_TYPE support, I think it should also be prioritized for cherry-pick to the 23 release branch.
Contributor
Author
|
Thanks ! |
Contributor
|
/cherry-pick 0563f0d |
Member
|
/pull-request #214510 |
dyung
pushed a commit
to llvmbot/llvm-project
that referenced
this pull request
Aug 7, 2026
…lvm#214207) This PR resolves the issue llvm#205953. Its purpose is to correct the use of `team_type` by lowering it to Addr rather than to Box. (cherry picked from commit 0563f0d)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR resolves the issue #205953. Its purpose is to correct the use of
team_typeby lowering it to Addr rather than to Box.