Skip to content

Commit be636dd

Browse files
committed
byref printing and parsing
1 parent c7fd3b9 commit be636dd

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

flang/lib/Optimizer/Dialect/FIROps.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5254,17 +5254,21 @@ static mlir::ParseResult parseSpecifierList(
52545254
if (failed(parser.parseLParen()))
52555255
return mlir::failure();
52565256

5257+
llvm::SmallVector<bool> isByRefVec;
52575258
llvm::SmallVector<mlir::SymbolRefAttr> spceifierSymbolVec;
52585259
llvm::SmallVector<fir::ReduceAttr> attributes;
52595260

52605261
if (failed(parser.parseCommaSeparatedList([&]() {
5262+
if (isReduce)
5263+
isByRefVec.push_back(
5264+
parser.parseOptionalKeyword("byref").succeeded());
5265+
52615266
if (failed(parser.parseAttribute(spceifierSymbolVec.emplace_back())))
52625267
return mlir::failure();
52635268

52645269
if (isReduce &&
5265-
failed(parser.parseAttribute(attributes.emplace_back()))) {
5270+
failed(parser.parseAttribute(attributes.emplace_back())))
52665271
return mlir::failure();
5267-
}
52685272

52695273
if (parser.parseOperand(specifierOperands.emplace_back()) ||
52705274
parser.parseArrow() ||
@@ -5301,6 +5305,13 @@ static mlir::ParseResult parseSpecifierList(
53015305
std::get<1>(operandType), result.operands))
53025306
return mlir::failure();
53035307

5308+
if (isReduce)
5309+
result.addAttribute(
5310+
fir::DoConcurrentLoopOp::getReduceByrefAttrName(result.name),
5311+
isByRefVec.empty()
5312+
? nullptr
5313+
: mlir::DenseBoolArrayAttr::get(builder.getContext(), isByRefVec));
5314+
53045315
llvm::SmallVector<mlir::Attribute> symbolAttrs(spceifierSymbolVec.begin(),
53055316
spceifierSymbolVec.end());
53065317
result.addAttribute(symsAttrName, builder.getArrayAttr(symbolAttrs));
@@ -5411,11 +5422,15 @@ void fir::DoConcurrentLoopOp::print(mlir::OpAsmPrinter &p) {
54115422
if (!getReduceVars().empty()) {
54125423
p << " reduce(";
54135424
llvm::interleaveComma(
5414-
llvm::zip_equal(getReduceSymsAttr(), getReduceAttrsAttr(),
5415-
getReduceVars(), getRegionReduceArgs()),
5425+
llvm::zip_equal(getReduceByrefAttr().asArrayRef(), getReduceSymsAttr(),
5426+
getReduceAttrsAttr(), getReduceVars(),
5427+
getRegionReduceArgs()),
54165428
p, [&](auto it) {
5417-
p << std::get<0>(it) << " " << std::get<1>(it) << " "
5418-
<< std::get<2>(it) << " -> " << std::get<3>(it);
5429+
if (std::get<0>(it))
5430+
p << "byref ";
5431+
5432+
p << std::get<1>(it) << " " << std::get<2>(it) << " "
5433+
<< std::get<3>(it) << " -> " << std::get<4>(it);
54195434
});
54205435
p << " : ";
54215436
llvm::interleaveComma(getReduceVars(), p,

flang/test/Fir/do_concurrent.fir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func.func @dc_reduce() {
167167
%4:2 = hlfir.declare %3 {uniq_name = "dc_reduce"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
168168
%c1 = arith.constant 1 : index
169169
fir.do_concurrent {
170-
fir.do_concurrent.loop (%arg0) = (%c1) to (%c1) step (%c1) reduce(@add_reduction_i32 #fir.reduce_attr<add> %4#0 -> %arg1 : !fir.ref<i32>) {
170+
fir.do_concurrent.loop (%arg0) = (%c1) to (%c1) step (%c1) reduce(byref @add_reduction_i32 #fir.reduce_attr<add> %4#0 -> %arg1 : !fir.ref<i32>) {
171171
}
172172
}
173173
return
@@ -177,7 +177,7 @@ func.func @dc_reduce() {
177177
// CHECK: %[[S_ALLOC:.*]] = fir.alloca i32 {bindc_name = "s", uniq_name = "dc_reduce"}
178178
// CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S_ALLOC]] {uniq_name = "dc_reduce"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
179179
// CHECK: fir.do_concurrent {
180-
// CHECK: fir.do_concurrent.loop (%{{.*}}) = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) reduce(@add_reduction_i32 #fir.reduce_attr<add> %[[S_DECL]]#0 -> %[[S_ARG:.*]] : !fir.ref<i32>) {
180+
// CHECK: fir.do_concurrent.loop (%{{.*}}) = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) reduce(byref @add_reduction_i32 #fir.reduce_attr<add> %[[S_DECL]]#0 -> %[[S_ARG:.*]] : !fir.ref<i32>) {
181181
// CHECK: }
182182
// CHECK: }
183183
// CHECK: return

0 commit comments

Comments
 (0)