@@ -25,6 +25,12 @@ class FIRToSCFPass : public fir::impl::FIRToSCFPassBase<FIRToSCFPass> {
2525struct DoLoopConversion : public mlir ::OpRewritePattern<fir::DoLoopOp> {
2626 using OpRewritePattern<fir::DoLoopOp>::OpRewritePattern;
2727
28+ DoLoopConversion (mlir::MLIRContext *context,
29+ bool parallelUnorderedLoop = false ,
30+ mlir::PatternBenefit benefit = 1 )
31+ : OpRewritePattern<fir::DoLoopOp>(context, benefit),
32+ parallelUnorderedLoop (parallelUnorderedLoop) {}
33+
2834 mlir::LogicalResult
2935 matchAndRewrite (fir::DoLoopOp doLoopOp,
3036 mlir::PatternRewriter &rewriter) const override {
@@ -57,7 +63,7 @@ struct DoLoopConversion : public mlir::OpRewritePattern<fir::DoLoopOp> {
5763
5864 // Create the scf.for or scf.parallel operation
5965 mlir::Operation *scfLoopOp = nullptr ;
60- if (isUnordered) {
66+ if (isUnordered && parallelUnorderedLoop ) {
6167 scfLoopOp = mlir::scf::ParallelOp::create (rewriter, loc, {zero},
6268 {tripCount}, {one}, iterArgs);
6369 } else {
@@ -99,6 +105,9 @@ struct DoLoopConversion : public mlir::OpRewritePattern<fir::DoLoopOp> {
99105 rewriter.replaceOp (doLoopOp, scfLoopOp);
100106 return mlir::success ();
101107 }
108+
109+ private:
110+ bool parallelUnorderedLoop;
102111};
103112
104113struct IterWhileConversion : public mlir ::OpRewritePattern<fir::IterWhileOp> {
@@ -210,10 +219,15 @@ struct IfConversion : public mlir::OpRewritePattern<fir::IfOp> {
210219};
211220} // namespace
212221
222+ void fir::populateFIRToSCFRewrites (mlir::RewritePatternSet &patterns,
223+ bool parallelUnordered) {
224+ patterns.add <IterWhileConversion, IfConversion>(patterns.getContext ());
225+ patterns.add <DoLoopConversion>(patterns.getContext (), parallelUnordered);
226+ }
227+
213228void FIRToSCFPass::runOnOperation () {
214229 mlir::RewritePatternSet patterns (&getContext ());
215- patterns.add <DoLoopConversion, IterWhileConversion, IfConversion>(
216- patterns.getContext ());
230+ fir::populateFIRToSCFRewrites (patterns, parallelUnordered);
217231 walkAndApplyPatterns (getOperation (), std::move (patterns));
218232}
219233
0 commit comments