Skip to content

Commit

Permalink
[mlir][openacc][NFC] Use assembly format for acc.loop
Browse files Browse the repository at this point in the history
Use the assembly format with custom parser/printer
for specific clauses instead of a full custom parser/printer.

Reviewed By: PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D148391
  • Loading branch information
clementval committed Apr 17, 2023
1 parent 7978abd commit b6c1930
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 304 deletions.
15 changes: 10 additions & 5 deletions flang/lib/Lower/OpenACC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
mlir::Value gangStatic;
llvm::SmallVector<mlir::Value, 2> tileOperands, privateOperands,
reductionOperands;
std::int64_t executionMapping = mlir::acc::OpenACCExecMapping::NONE;
bool hasGang = false, hasVector = false, hasWorker = false;

for (const Fortran::parser::AccClause &clause : accClauseList.v) {
mlir::Location clauseLocation = converter.genLocation(clause.source);
Expand Down Expand Up @@ -292,21 +292,21 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
}
}
}
executionMapping |= mlir::acc::OpenACCExecMapping::GANG;
hasGang = true;
} else if (const auto *workerClause =
std::get_if<Fortran::parser::AccClause::Worker>(&clause.u)) {
if (workerClause->v) {
workerNum = fir::getBase(converter.genExprValue(
*Fortran::semantics::GetExpr(*workerClause->v), stmtCtx));
}
executionMapping |= mlir::acc::OpenACCExecMapping::WORKER;
hasWorker = true;
} else if (const auto *vectorClause =
std::get_if<Fortran::parser::AccClause::Vector>(&clause.u)) {
if (vectorClause->v) {
vectorNum = fir::getBase(converter.genExprValue(
*Fortran::semantics::GetExpr(*vectorClause->v), stmtCtx));
}
executionMapping |= mlir::acc::OpenACCExecMapping::VECTOR;
hasVector = true;
} else if (const auto *tileClause =
std::get_if<Fortran::parser::AccClause::Tile>(&clause.u)) {
const Fortran::parser::AccTileExprList &accTileExprList = tileClause->v;
Expand Down Expand Up @@ -350,7 +350,12 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
auto loopOp = createRegionOp<mlir::acc::LoopOp, mlir::acc::YieldOp>(
firOpBuilder, currentLocation, operands, operandSegments);

loopOp.setExecMappingAttr(firOpBuilder.getI64IntegerAttr(executionMapping));
if (hasGang)
loopOp.setHasGangAttr(firOpBuilder.getUnitAttr());
if (hasWorker)
loopOp.setHasWorkerAttr(firOpBuilder.getUnitAttr());
if (hasVector)
loopOp.setHasVectorAttr(firOpBuilder.getUnitAttr());

// Lower clauses mapped to attributes
for (const Fortran::parser::AccClause &clause : accClauseList.v) {
Expand Down
18 changes: 9 additions & 9 deletions flang/test/Lower/OpenACC/acc-kernels-loop.f90
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -485,7 +485,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down Expand Up @@ -524,7 +524,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop vector([[CONSTANT128]]: i32) {
!CHECK: acc.loop vector([[CONSTANT128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -538,7 +538,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK: acc.loop vector([[VECTORLENGTH]]: i32) {
!CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -565,7 +565,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop worker([[WORKER128]]: i32) {
!CHECK: acc.loop worker([[WORKER128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down Expand Up @@ -615,7 +615,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -629,7 +629,7 @@ subroutine acc_kernels_loop

!CHECK: acc.kernels {
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -646,7 +646,7 @@ subroutine acc_kernels_loop
!CHECK: acc.kernels {
!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down Expand Up @@ -674,7 +674,7 @@ subroutine acc_kernels_loop
END DO

!CHECK: acc.kernels {
!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down
28 changes: 14 additions & 14 deletions flang/test/Lower/OpenACC/acc-loop.f90
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ program acc_loop
END DO

!CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -81,7 +81,7 @@ program acc_loop
END DO

!CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -91,7 +91,7 @@ program acc_loop
a(i) = b(i)
END DO

!CHECK: acc.loop gang(num=%{{.*}}: i32, static=%{{.*}}: i32) {
!CHECK: acc.loop gang(num=%{{.*}} : i32, static=%{{.*}} : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -112,7 +112,7 @@ program acc_loop
END DO

!CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop vector([[CONSTANT128]]: i32) {
!CHECK: acc.loop vector([[CONSTANT128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -123,7 +123,7 @@ program acc_loop
END DO

!CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK: acc.loop vector([[VECTORLENGTH]]: i32) {
!CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -144,7 +144,7 @@ program acc_loop
END DO

!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop worker([[WORKER128]]: i32) {
!CHECK: acc.loop worker([[WORKER128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -154,7 +154,7 @@ program acc_loop
a(i) = b(i)
END DO

!CHECK: acc.loop private(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: acc.loop private(%{{.*}} : !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -164,7 +164,7 @@ program acc_loop
a(i) = b(i)
END DO

!CHECK: acc.loop private(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>, %{{.*}}: !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: acc.loop private(%{{.*}}, %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -174,7 +174,7 @@ program acc_loop
a(i) = b(i)
END DO

!CHECK: acc.loop private(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>, %{{.*}}: !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: acc.loop private(%{{.*}}, %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -184,7 +184,7 @@ program acc_loop
a(i) = b(i)
END DO
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -194,7 +194,7 @@ program acc_loop
a(i) = b(i)
END DO
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -208,7 +208,7 @@ program acc_loop

!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -218,7 +218,7 @@ program acc_loop
a(i) = b(i)
END DO

!CHECK: acc.loop tile(%{{.*}}: i32) {
!CHECK: acc.loop tile(%{{.*}} : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -230,7 +230,7 @@ program acc_loop
END DO
END DO

!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down
24 changes: 12 additions & 12 deletions flang/test/Lower/OpenACC/acc-parallel-loop.f90
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ subroutine acc_parallel_loop
END DO

!CHECK: acc.parallel firstprivate([[B]] : !fir.ref<!fir.array<10xf32>>) private([[A]] : !fir.ref<!fir.array<10xf32>>) {
!CHECK: acc.loop private([[A]]: !fir.ref<!fir.array<10xf32>>) {
!CHECK: acc.loop private([[A]] : !fir.ref<!fir.array<10xf32>>) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down Expand Up @@ -484,7 +484,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -498,7 +498,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]]: i32) {
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -511,7 +511,7 @@ subroutine acc_parallel_loop
END DO

!CHECK: acc.parallel {
!CHECK: acc.loop gang(num=%{{.*}}: i32, static=%{{.*}}: i32) {
!CHECK: acc.loop gang(num=%{{.*}} : i32, static=%{{.*}} : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -537,7 +537,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop vector([[CONSTANT128]]: i32) {
!CHECK: acc.loop vector([[CONSTANT128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -551,7 +551,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
!CHECK: acc.loop vector([[VECTORLENGTH]]: i32) {
!CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -578,7 +578,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
!CHECK: acc.loop worker([[WORKER128]]: i32) {
!CHECK: acc.loop worker([[WORKER128]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down Expand Up @@ -628,7 +628,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -642,7 +642,7 @@ subroutine acc_parallel_loop

!CHECK: acc.parallel {
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -659,7 +659,7 @@ subroutine acc_parallel_loop
!CHECK: acc.parallel {
!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -672,7 +672,7 @@ subroutine acc_parallel_loop
END DO

!CHECK: acc.parallel {
!CHECK: acc.loop tile(%{{.*}}: i32) {
!CHECK: acc.loop tile(%{{.*}} : i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand All @@ -687,7 +687,7 @@ subroutine acc_parallel_loop
END DO

!CHECK: acc.parallel {
!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
!CHECK: fir.do_loop
!CHECK: acc.yield
!CHECK-NEXT: }{{$}}
Expand Down

0 comments on commit b6c1930

Please sign in to comment.