Skip to content

Commit dd11708

Browse files
committed
Enable stand-alone tiling, but it gives a warning and converting to simd.
1 parent ffd9374 commit dd11708

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,6 +2153,40 @@ genLoopOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
21532153
return loopOp;
21542154
}
21552155

2156+
static mlir::omp::LoopOp
2157+
genTiledLoopOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
2158+
semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval,
2159+
mlir::Location loc, const ConstructQueue &queue,
2160+
ConstructQueue::const_iterator item) {
2161+
mlir::omp::LoopOperands loopClauseOps;
2162+
llvm::SmallVector<const semantics::Symbol *> loopReductionSyms;
2163+
genLoopClauses(converter, semaCtx, item->clauses, loc, loopClauseOps,
2164+
loopReductionSyms);
2165+
2166+
DataSharingProcessor dsp(converter, semaCtx, item->clauses, eval,
2167+
/*shouldCollectPreDeterminedSymbols=*/true,
2168+
/*useDelayedPrivatization=*/true, symTable);
2169+
dsp.processStep1(&loopClauseOps);
2170+
2171+
mlir::omp::LoopNestOperands loopNestClauseOps;
2172+
llvm::SmallVector<const semantics::Symbol *> iv;
2173+
genLoopNestClauses(converter, semaCtx, eval, item->clauses, loc,
2174+
loopNestClauseOps, iv);
2175+
2176+
EntryBlockArgs loopArgs;
2177+
loopArgs.priv.syms = dsp.getDelayedPrivSymbols();
2178+
loopArgs.priv.vars = loopClauseOps.privateVars;
2179+
loopArgs.reduction.syms = loopReductionSyms;
2180+
loopArgs.reduction.vars = loopClauseOps.reductionVars;
2181+
2182+
auto loopOp =
2183+
genWrapperOp<mlir::omp::LoopOp>(converter, loc, loopClauseOps, loopArgs);
2184+
genLoopNestOp(converter, symTable, semaCtx, eval, loc, queue, item,
2185+
loopNestClauseOps, iv, {{loopOp, loopArgs}},
2186+
llvm::omp::Directive::OMPD_loop, dsp);
2187+
return loopOp;
2188+
}
2189+
21562190
static mlir::omp::MaskedOp
21572191
genMaskedOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
21582192
lower::StatementContext &stmtCtx,
@@ -3972,6 +4006,9 @@ static void genOMPDispatch(lower::AbstractConverter &converter,
39724006
item);
39734007
break;
39744008
case llvm::omp::Directive::OMPD_tile:
4009+
newOp =
4010+
genTiledLoopOp(converter, symTable, semaCtx, eval, loc, queue, item);
4011+
break;
39754012
case llvm::omp::Directive::OMPD_unroll: {
39764013
unsigned version = semaCtx.langOptions().OpenMPVersion;
39774014
TODO(loc, "Unhandled loop directive (" +

flang/test/Lower/OpenMP/wsloop-collapse.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ program wsloop_collapse
5757
!CHECK: %[[VAL_31:.*]] = fir.load %[[VAL_11]]#0 : !fir.ref<i32>
5858
!CHECK: %[[VAL_32:.*]] = arith.constant 1 : i32
5959
!CHECK: omp.wsloop private(@{{.*}} %{{.*}}#0 -> %[[VAL_4:.*]], @{{.*}} %{{.*}}#0 -> %[[VAL_2:.*]], @{{.*}} %{{.*}}#0 -> %[[VAL_0:.*]] : !fir.ref<i32>, !fir.ref<i32>, !fir.ref<i32>) {
60-
!CHECK-NEXT: omp.loop_nest (%[[VAL_33:.*]], %[[VAL_34:.*]], %[[VAL_35:.*]]) : i32 = (%[[VAL_24]], %[[VAL_27]], %[[VAL_30]]) to (%[[VAL_25]], %[[VAL_28]], %[[VAL_31]]) inclusive step (%[[VAL_26]], %[[VAL_29]], %[[VAL_32]]) {
60+
!CHECK-NEXT: omp.loop_nest (%[[VAL_33:.*]], %[[VAL_34:.*]], %[[VAL_35:.*]]) : i32 = (%[[VAL_24]], %[[VAL_27]], %[[VAL_30]]) to (%[[VAL_25]], %[[VAL_28]], %[[VAL_31]]) inclusive step (%[[VAL_26]], %[[VAL_29]], %[[VAL_32]]) collapse(3) {
6161
!$omp do collapse(3)
6262
do i = 1, a
6363
do j= 1, b

0 commit comments

Comments
 (0)