[Mlir-commits] [mlir] 88eefa8 - [mlir][SCFToOpenMP] Use walk pattern driver (#155242)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Tue Aug 26 02:52:04 PDT 2025


Author: Matthias Springer
Date: 2025-08-26T11:52:01+02:00
New Revision: 88eefa86410445204b7233e6ba01876974b53f77

URL: https://github.com/llvm/llvm-project/commit/88eefa86410445204b7233e6ba01876974b53f77
DIFF: https://github.com/llvm/llvm-project/commit/88eefa86410445204b7233e6ba01876974b53f77.diff

LOG: [mlir][SCFToOpenMP] Use walk pattern driver (#155242)

The lowering pattern uses various APIs that are not supported in a
dialect conversion such as `Block::eraseArguments` and
`RewriterBase::replaceAllUsesWith`. Switch to the more efficient and
simpler walk pattern driver.

Added: 
    

Modified: 
    mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp
index 34f372af1e4b5..c4a9fc2e556f1 100644
--- a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp
+++ b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp
@@ -22,7 +22,7 @@
 #include "mlir/Dialect/SCF/IR/SCF.h"
 #include "mlir/IR/SymbolTable.h"
 #include "mlir/Pass/Pass.h"
-#include "mlir/Transforms/DialectConversion.h"
+#include "mlir/Transforms/WalkPatternRewriteDriver.h"
 
 namespace mlir {
 #define GEN_PASS_DEF_CONVERTSCFTOOPENMPPASS
@@ -538,15 +538,18 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> {
 
 /// Applies the conversion patterns in the given function.
 static LogicalResult applyPatterns(ModuleOp module, unsigned numThreads) {
-  ConversionTarget target(*module.getContext());
-  target.addIllegalOp<scf::ReduceOp, scf::ReduceReturnOp, scf::ParallelOp>();
-  target.addLegalDialect<omp::OpenMPDialect, LLVM::LLVMDialect,
-                         memref::MemRefDialect>();
-
   RewritePatternSet patterns(module.getContext());
   patterns.add<ParallelOpLowering>(module.getContext(), numThreads);
   FrozenRewritePatternSet frozen(std::move(patterns));
-  return applyPartialConversion(module, target, frozen);
+  walkAndApplyPatterns(module, frozen);
+  auto status = module.walk([](Operation *op) {
+    if (isa<scf::ReduceOp, scf::ReduceReturnOp, scf::ParallelOp>(op)) {
+      op->emitError("unconverted operation found");
+      return WalkResult::interrupt();
+    }
+    return WalkResult::advance();
+  });
+  return failure(status.wasInterrupted());
 }
 
 /// A pass converting SCF operations to OpenMP operations.


        


More information about the Mlir-commits mailing list