[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