Skip to content

Commit c075af5

Browse files
clementvalFerdinand Lemaire
authored andcommitted
[mlir][openacc][NFC] Use assembly format for acc.loop
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
1 parent 6041085 commit c075af5

File tree

9 files changed

+171
-304
lines changed

9 files changed

+171
-304
lines changed

flang/lib/Lower/OpenACC.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
263263
mlir::Value gangStatic;
264264
llvm::SmallVector<mlir::Value, 2> tileOperands, privateOperands,
265265
reductionOperands;
266-
std::int64_t executionMapping = mlir::acc::OpenACCExecMapping::NONE;
266+
bool hasGang = false, hasVector = false, hasWorker = false;
267267

268268
for (const Fortran::parser::AccClause &clause : accClauseList.v) {
269269
mlir::Location clauseLocation = converter.genLocation(clause.source);
@@ -292,21 +292,21 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
292292
}
293293
}
294294
}
295-
executionMapping |= mlir::acc::OpenACCExecMapping::GANG;
295+
hasGang = true;
296296
} else if (const auto *workerClause =
297297
std::get_if<Fortran::parser::AccClause::Worker>(&clause.u)) {
298298
if (workerClause->v) {
299299
workerNum = fir::getBase(converter.genExprValue(
300300
*Fortran::semantics::GetExpr(*workerClause->v), stmtCtx));
301301
}
302-
executionMapping |= mlir::acc::OpenACCExecMapping::WORKER;
302+
hasWorker = true;
303303
} else if (const auto *vectorClause =
304304
std::get_if<Fortran::parser::AccClause::Vector>(&clause.u)) {
305305
if (vectorClause->v) {
306306
vectorNum = fir::getBase(converter.genExprValue(
307307
*Fortran::semantics::GetExpr(*vectorClause->v), stmtCtx));
308308
}
309-
executionMapping |= mlir::acc::OpenACCExecMapping::VECTOR;
309+
hasVector = true;
310310
} else if (const auto *tileClause =
311311
std::get_if<Fortran::parser::AccClause::Tile>(&clause.u)) {
312312
const Fortran::parser::AccTileExprList &accTileExprList = tileClause->v;
@@ -350,7 +350,12 @@ createLoopOp(Fortran::lower::AbstractConverter &converter,
350350
auto loopOp = createRegionOp<mlir::acc::LoopOp, mlir::acc::YieldOp>(
351351
firOpBuilder, currentLocation, operands, operandSegments);
352352

353-
loopOp.setExecMappingAttr(firOpBuilder.getI64IntegerAttr(executionMapping));
353+
if (hasGang)
354+
loopOp.setHasGangAttr(firOpBuilder.getUnitAttr());
355+
if (hasWorker)
356+
loopOp.setHasWorkerAttr(firOpBuilder.getUnitAttr());
357+
if (hasVector)
358+
loopOp.setHasVectorAttr(firOpBuilder.getUnitAttr());
354359

355360
// Lower clauses mapped to attributes
356361
for (const Fortran::parser::AccClause &clause : accClauseList.v) {

flang/test/Lower/OpenACC/acc-kernels-loop.f90

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ subroutine acc_kernels_loop
471471

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

486486
!CHECK: acc.kernels {
487487
!CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
488-
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]]: i32) {
488+
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]] : i32) {
489489
!CHECK: fir.do_loop
490490
!CHECK: acc.yield
491491
!CHECK-NEXT: }{{$}}
@@ -524,7 +524,7 @@ subroutine acc_kernels_loop
524524

525525
!CHECK: acc.kernels {
526526
!CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
527-
!CHECK: acc.loop vector([[CONSTANT128]]: i32) {
527+
!CHECK: acc.loop vector([[CONSTANT128]] : i32) {
528528
!CHECK: fir.do_loop
529529
!CHECK: acc.yield
530530
!CHECK-NEXT: }{{$}}
@@ -538,7 +538,7 @@ subroutine acc_kernels_loop
538538

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

566566
!CHECK: acc.kernels {
567567
!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
568-
!CHECK: acc.loop worker([[WORKER128]]: i32) {
568+
!CHECK: acc.loop worker([[WORKER128]] : i32) {
569569
!CHECK: fir.do_loop
570570
!CHECK: acc.yield
571571
!CHECK-NEXT: }{{$}}
@@ -615,7 +615,7 @@ subroutine acc_kernels_loop
615615

616616
!CHECK: acc.kernels {
617617
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
618-
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
618+
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
619619
!CHECK: fir.do_loop
620620
!CHECK: acc.yield
621621
!CHECK-NEXT: }{{$}}
@@ -629,7 +629,7 @@ subroutine acc_kernels_loop
629629

630630
!CHECK: acc.kernels {
631631
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
632-
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
632+
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
633633
!CHECK: fir.do_loop
634634
!CHECK: acc.yield
635635
!CHECK-NEXT: }{{$}}
@@ -646,7 +646,7 @@ subroutine acc_kernels_loop
646646
!CHECK: acc.kernels {
647647
!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
648648
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
649-
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
649+
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
650650
!CHECK: fir.do_loop
651651
!CHECK: acc.yield
652652
!CHECK-NEXT: }{{$}}
@@ -674,7 +674,7 @@ subroutine acc_kernels_loop
674674
END DO
675675

676676
!CHECK: acc.kernels {
677-
!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
677+
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
678678
!CHECK: fir.do_loop
679679
!CHECK: acc.yield
680680
!CHECK-NEXT: }{{$}}

flang/test/Lower/OpenACC/acc-loop.f90

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ program acc_loop
7070
END DO
7171

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

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

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

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

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

146146
!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
147-
!CHECK: acc.loop worker([[WORKER128]]: i32) {
147+
!CHECK: acc.loop worker([[WORKER128]] : i32) {
148148
!CHECK: fir.do_loop
149149
!CHECK: acc.yield
150150
!CHECK-NEXT: }{{$}}
@@ -154,7 +154,7 @@ program acc_loop
154154
a(i) = b(i)
155155
END DO
156156

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

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

177-
!CHECK: acc.loop private(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>, %{{.*}}: !fir.ref<!fir.array<10x10xf32>>) {
177+
!CHECK: acc.loop private(%{{.*}}, %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
178178
!CHECK: fir.do_loop
179179
!CHECK: acc.yield
180180
!CHECK-NEXT: }{{$}}
@@ -184,7 +184,7 @@ program acc_loop
184184
a(i) = b(i)
185185
END DO
186186
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
187-
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
187+
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
188188
!CHECK: fir.do_loop
189189
!CHECK: acc.yield
190190
!CHECK-NEXT: }{{$}}
@@ -194,7 +194,7 @@ program acc_loop
194194
a(i) = b(i)
195195
END DO
196196
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
197-
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
197+
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
198198
!CHECK: fir.do_loop
199199
!CHECK: acc.yield
200200
!CHECK-NEXT: }{{$}}
@@ -208,7 +208,7 @@ program acc_loop
208208

209209
!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
210210
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
211-
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
211+
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
212212
!CHECK: fir.do_loop
213213
!CHECK: acc.yield
214214
!CHECK-NEXT: }{{$}}
@@ -218,7 +218,7 @@ program acc_loop
218218
a(i) = b(i)
219219
END DO
220220

221-
!CHECK: acc.loop tile(%{{.*}}: i32) {
221+
!CHECK: acc.loop tile(%{{.*}} : i32) {
222222
!CHECK: fir.do_loop
223223
!CHECK: acc.yield
224224
!CHECK-NEXT: }{{$}}
@@ -230,7 +230,7 @@ program acc_loop
230230
END DO
231231
END DO
232232

233-
!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
233+
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
234234
!CHECK: fir.do_loop
235235
!CHECK: acc.yield
236236
!CHECK-NEXT: }{{$}}

flang/test/Lower/OpenACC/acc-parallel-loop.f90

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ subroutine acc_parallel_loop
418418
END DO
419419

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

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

499499
!CHECK: acc.parallel {
500500
!CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
501-
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]]: i32) {
501+
!CHECK-NEXT: acc.loop gang(num=[[GANGNUM2]] : i32) {
502502
!CHECK: fir.do_loop
503503
!CHECK: acc.yield
504504
!CHECK-NEXT: }{{$}}
@@ -511,7 +511,7 @@ subroutine acc_parallel_loop
511511
END DO
512512

513513
!CHECK: acc.parallel {
514-
!CHECK: acc.loop gang(num=%{{.*}}: i32, static=%{{.*}}: i32) {
514+
!CHECK: acc.loop gang(num=%{{.*}} : i32, static=%{{.*}} : i32) {
515515
!CHECK: fir.do_loop
516516
!CHECK: acc.yield
517517
!CHECK-NEXT: }{{$}}
@@ -537,7 +537,7 @@ subroutine acc_parallel_loop
537537

538538
!CHECK: acc.parallel {
539539
!CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
540-
!CHECK: acc.loop vector([[CONSTANT128]]: i32) {
540+
!CHECK: acc.loop vector([[CONSTANT128]] : i32) {
541541
!CHECK: fir.do_loop
542542
!CHECK: acc.yield
543543
!CHECK-NEXT: }{{$}}
@@ -551,7 +551,7 @@ subroutine acc_parallel_loop
551551

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

579579
!CHECK: acc.parallel {
580580
!CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
581-
!CHECK: acc.loop worker([[WORKER128]]: i32) {
581+
!CHECK: acc.loop worker([[WORKER128]] : i32) {
582582
!CHECK: fir.do_loop
583583
!CHECK: acc.yield
584584
!CHECK-NEXT: }{{$}}
@@ -628,7 +628,7 @@ subroutine acc_parallel_loop
628628

629629
!CHECK: acc.parallel {
630630
!CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32
631-
!CHECK: acc.loop tile([[TILESIZE]]: i32) {
631+
!CHECK: acc.loop tile([[TILESIZE]] : i32) {
632632
!CHECK: fir.do_loop
633633
!CHECK: acc.yield
634634
!CHECK-NEXT: }{{$}}
@@ -642,7 +642,7 @@ subroutine acc_parallel_loop
642642

643643
!CHECK: acc.parallel {
644644
!CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32
645-
!CHECK: acc.loop tile([[TILESIZEM1]]: i32) {
645+
!CHECK: acc.loop tile([[TILESIZEM1]] : i32) {
646646
!CHECK: fir.do_loop
647647
!CHECK: acc.yield
648648
!CHECK-NEXT: }{{$}}
@@ -659,7 +659,7 @@ subroutine acc_parallel_loop
659659
!CHECK: acc.parallel {
660660
!CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32
661661
!CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32
662-
!CHECK: acc.loop tile([[TILESIZE1]]: i32, [[TILESIZE2]]: i32) {
662+
!CHECK: acc.loop tile([[TILESIZE1]], [[TILESIZE2]] : i32, i32) {
663663
!CHECK: fir.do_loop
664664
!CHECK: acc.yield
665665
!CHECK-NEXT: }{{$}}
@@ -672,7 +672,7 @@ subroutine acc_parallel_loop
672672
END DO
673673

674674
!CHECK: acc.parallel {
675-
!CHECK: acc.loop tile(%{{.*}}: i32) {
675+
!CHECK: acc.loop tile(%{{.*}} : i32) {
676676
!CHECK: fir.do_loop
677677
!CHECK: acc.yield
678678
!CHECK-NEXT: }{{$}}
@@ -687,7 +687,7 @@ subroutine acc_parallel_loop
687687
END DO
688688

689689
!CHECK: acc.parallel {
690-
!CHECK: acc.loop tile(%{{.*}}: i32, %{{.*}}: i32) {
690+
!CHECK: acc.loop tile(%{{.*}}, %{{.*}} : i32, i32) {
691691
!CHECK: fir.do_loop
692692
!CHECK: acc.yield
693693
!CHECK-NEXT: }{{$}}

0 commit comments

Comments
 (0)