@@ -2169,6 +2169,40 @@ genLoopOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
2169
2169
return loopOp;
2170
2170
}
2171
2171
2172
+ static mlir::omp::LoopOp
2173
+ genTiledLoopOp (lower::AbstractConverter &converter, lower::SymMap &symTable,
2174
+ semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval,
2175
+ mlir::Location loc, const ConstructQueue &queue,
2176
+ ConstructQueue::const_iterator item) {
2177
+ mlir::omp::LoopOperands loopClauseOps;
2178
+ llvm::SmallVector<const semantics::Symbol *> loopReductionSyms;
2179
+ genLoopClauses (converter, semaCtx, item->clauses , loc, loopClauseOps,
2180
+ loopReductionSyms);
2181
+
2182
+ DataSharingProcessor dsp (converter, semaCtx, item->clauses , eval,
2183
+ /* shouldCollectPreDeterminedSymbols=*/ true ,
2184
+ /* useDelayedPrivatization=*/ true , symTable);
2185
+ dsp.processStep1 (&loopClauseOps);
2186
+
2187
+ mlir::omp::LoopNestOperands loopNestClauseOps;
2188
+ llvm::SmallVector<const semantics::Symbol *> iv;
2189
+ genLoopNestClauses (converter, semaCtx, eval, item->clauses , loc,
2190
+ loopNestClauseOps, iv);
2191
+
2192
+ EntryBlockArgs loopArgs;
2193
+ loopArgs.priv .syms = dsp.getDelayedPrivSymbols ();
2194
+ loopArgs.priv .vars = loopClauseOps.privateVars ;
2195
+ loopArgs.reduction .syms = loopReductionSyms;
2196
+ loopArgs.reduction .vars = loopClauseOps.reductionVars ;
2197
+
2198
+ auto loopOp =
2199
+ genWrapperOp<mlir::omp::LoopOp>(converter, loc, loopClauseOps, loopArgs);
2200
+ genLoopNestOp (converter, symTable, semaCtx, eval, loc, queue, item,
2201
+ loopNestClauseOps, iv, {{loopOp, loopArgs}},
2202
+ llvm::omp::Directive::OMPD_loop, dsp);
2203
+ return loopOp;
2204
+ }
2205
+
2172
2206
static mlir::omp::MaskedOp
2173
2207
genMaskedOp (lower::AbstractConverter &converter, lower::SymMap &symTable,
2174
2208
lower::StatementContext &stmtCtx,
@@ -3648,6 +3682,9 @@ static void genOMPDispatch(lower::AbstractConverter &converter,
3648
3682
item);
3649
3683
break ;
3650
3684
case llvm::omp::Directive::OMPD_tile:
3685
+ newOp =
3686
+ genTiledLoopOp (converter, symTable, semaCtx, eval, loc, queue, item);
3687
+ break ;
3651
3688
case llvm::omp::Directive::OMPD_unroll: {
3652
3689
unsigned version = semaCtx.langOptions ().OpenMPVersion ;
3653
3690
TODO (loc, " Unhandled loop directive (" +
0 commit comments