@@ -2153,6 +2153,40 @@ genLoopOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
2153
2153
return loopOp;
2154
2154
}
2155
2155
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
+
2156
2190
static mlir::omp::MaskedOp
2157
2191
genMaskedOp (lower::AbstractConverter &converter, lower::SymMap &symTable,
2158
2192
lower::StatementContext &stmtCtx,
@@ -3972,6 +4006,9 @@ static void genOMPDispatch(lower::AbstractConverter &converter,
3972
4006
item);
3973
4007
break ;
3974
4008
case llvm::omp::Directive::OMPD_tile:
4009
+ newOp =
4010
+ genTiledLoopOp (converter, symTable, semaCtx, eval, loc, queue, item);
4011
+ break ;
3975
4012
case llvm::omp::Directive::OMPD_unroll: {
3976
4013
unsigned version = semaCtx.langOptions ().OpenMPVersion ;
3977
4014
TODO (loc, " Unhandled loop directive (" +
0 commit comments