target.addLegalOp<ModuleOp, ModuleTerminatorOp>();
target.addDynamicallyLegalOp<FuncOp>(
[&](FuncOp op) { return converter.isSignatureLegal(op.getType()); });
- return applyFullConversion(module, target, std::move(patterns), &converter);
+ return applyFullConversion(module, target, patterns, &converter);
}
namespace {
target.addLegalOp<ModuleOp, ModuleTerminatorOp>();
target.addDynamicallyLegalOp<FuncOp>(
[&](FuncOp op) { return converter.isSignatureLegal(op.getType()); });
- if (failed(
- applyFullConversion(module, target, std::move(patterns), &converter)))
+ if (failed(applyFullConversion(module, target, patterns, &converter)))
return failure();
return success();
auto *context = &getContext();
patterns.insert<Rewriter<linalg::LoadOp>, Rewriter<linalg::StoreOp>>(
context);
- applyPatternsGreedily(getFunction(), std::move(patterns));
+ applyPatternsGreedily(getFunction(), patterns);
}
};
OwningRewritePatternList patterns;
patterns.insert<MulOpConversion>(&getContext());
- if (failed(applyPartialConversion(getFunction(), target,
- std::move(patterns)))) {
+ if (failed(applyPartialConversion(getFunction(), target, patterns))) {
emitError(mlir::UnknownLoc::get(&getContext()), "Error lowering Toy\n");
signalPassFailure();
}
target.addDynamicallyLegalOp<FuncOp>([&](FuncOp op) {
return typeConverter.isSignatureLegal(op.getType());
});
- if (failed(applyPartialConversion(
- getModule(), target, std::move(toyPatterns), &typeConverter))) {
+ if (failed(applyPartialConversion(getModule(), target, toyPatterns,
+ &typeConverter))) {
emitError(UnknownLoc::get(getModule().getContext()),
"Error lowering Toy\n");
signalPassFailure();
PatternListT::iterator end() { return patterns.end(); }
PatternListT::const_iterator begin() const { return patterns.begin(); }
PatternListT::const_iterator end() const { return patterns.end(); }
+ void clear() { patterns.clear(); }
//===--------------------------------------------------------------------===//
// Pattern Insertion
/// the result operation regions.
/// Note: This does not apply patterns to the top-level operation itself.
///
-bool applyPatternsGreedily(Operation *op, OwningRewritePatternList &&patterns);
+bool applyPatternsGreedily(Operation *op, OwningRewritePatternList &patterns);
} // end namespace mlir
/// regions are also converted.
LLVM_NODISCARD LogicalResult applyPartialConversion(
ArrayRef<Operation *> ops, ConversionTarget &target,
- OwningRewritePatternList &&patterns, TypeConverter *converter = nullptr);
+ OwningRewritePatternList &patterns, TypeConverter *converter = nullptr);
LLVM_NODISCARD LogicalResult applyPartialConversion(
- Operation *op, ConversionTarget &target,
- OwningRewritePatternList &&patterns, TypeConverter *converter = nullptr);
+ Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
+ TypeConverter *converter = nullptr);
/// Apply a complete conversion on the given operations, and all nested
/// operations. This method returns failure if the conversion of any operation
/// regions are also converted.
LLVM_NODISCARD LogicalResult applyFullConversion(
ArrayRef<Operation *> ops, ConversionTarget &target,
- OwningRewritePatternList &&patterns, TypeConverter *converter = nullptr);
+ OwningRewritePatternList &patterns, TypeConverter *converter = nullptr);
LLVM_NODISCARD LogicalResult applyFullConversion(
- Operation *op, ConversionTarget &target,
- OwningRewritePatternList &&patterns, TypeConverter *converter = nullptr);
+ Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
+ TypeConverter *converter = nullptr);
/// Apply an analysis conversion on the given operations, and all nested
/// operations. This method analyzes which operations would be successfully
/// considered for conversion.
LLVM_NODISCARD LogicalResult applyAnalysisConversion(
ArrayRef<Operation *> ops, ConversionTarget &target,
- OwningRewritePatternList &&patterns, DenseSet<Operation *> &convertedOps,
+ OwningRewritePatternList &patterns, DenseSet<Operation *> &convertedOps,
TypeConverter *converter = nullptr);
LLVM_NODISCARD LogicalResult applyAnalysisConversion(
- Operation *op, ConversionTarget &target,
- OwningRewritePatternList &&patterns, DenseSet<Operation *> &convertedOps,
- TypeConverter *converter = nullptr);
+ Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
+ DenseSet<Operation *> &convertedOps, TypeConverter *converter = nullptr);
} // end namespace mlir
#endif // MLIR_TRANSFORMS_DIALECTCONVERSION_H_
populateLoopToStdConversionPatterns(patterns, &getContext());
ConversionTarget target(getContext());
target.addLegalDialect<StandardOpsDialect>();
- if (failed(
- applyPartialConversion(getFunction(), target, std::move(patterns))))
+ if (failed(applyPartialConversion(getFunction(), target, patterns)))
signalPassFailure();
}
target.addDynamicallyLegalOp<FuncOp>(
[&](FuncOp Op) { return typeConverter.isSignatureLegal(Op.getType()); });
- if (failed(applyFullConversion(spirvModules, target, std::move(patterns),
+ if (failed(applyFullConversion(spirvModules, target, patterns,
&typeConverter))) {
return signalPassFailure();
}
target.addDynamicallyLegalOp<FuncOp>([&](FuncOp op) {
return typeConverter->isSignatureLegal(op.getType());
});
- if (failed(applyPartialConversion(m, target, std::move(patterns),
- typeConverter.get())))
+ if (failed(applyPartialConversion(m, target, patterns, &*typeConverter)))
signalPassFailure();
}
target.addLegalDialect<spirv::SPIRVDialect>();
target.addLegalOp<FuncOp>();
- if (failed(applyPartialConversion(module, target, std::move(patterns)))) {
+ if (failed(applyPartialConversion(module, target, patterns))) {
return signalPassFailure();
}
}
OwningRewritePatternList patterns;
auto *context = &getContext();
patterns.insert<UniformRealAddEwPattern, UniformRealMulEwPattern>(context);
- applyPatternsGreedily(fn, std::move(patterns));
+ applyPatternsGreedily(fn, patterns);
}
FunctionPassBase *mlir::fxpmath::createLowerUniformRealMathPass() {
OwningRewritePatternList patterns;
auto *context = &getContext();
patterns.insert<UniformDequantizePattern>(context);
- applyPatternsGreedily(fn, std::move(patterns));
+ applyPatternsGreedily(fn, patterns);
}
FunctionPassBase *mlir::fxpmath::createLowerUniformCastsPass() {
auto func = getFunction();
auto *context = &getContext();
patterns.insert<QuantizedConstRewrite>(context);
- applyPatternsGreedily(func, std::move(patterns));
+ applyPatternsGreedily(func, patterns);
}
FunctionPassBase *mlir::quant::createConvertConstPass() {
auto func = getFunction();
auto *context = &getContext();
patterns.insert<ConstFakeQuantRewrite>(context, &hadFailure);
- applyPatternsGreedily(func, std::move(patterns));
+ applyPatternsGreedily(func, patterns);
if (hadFailure)
signalPassFailure();
}
target.addLegalDialect<LLVM::LLVMDialect>();
target.addDynamicallyLegalOp<FuncOp>(
[&](FuncOp op) { return converter.isSignatureLegal(op.getType()); });
- if (failed(applyPartialConversion(module, target, std::move(patterns),
- &converter))) {
+ if (failed(applyPartialConversion(module, target, patterns, &converter))) {
signalPassFailure();
}
target.addLegalDialect<AffineOpsDialect>();
target.addLegalDialect<loop::LoopOpsDialect>();
target.addLegalDialect<StandardOpsDialect>();
- if (failed(
- applyPartialConversion(getFunction(), target, std::move(patterns)))) {
+ if (failed(applyPartialConversion(getFunction(), target, patterns))) {
signalPassFailure();
}
}
patterns.insert<RemoveIdentityOpRewrite<StatisticsOp>,
RemoveIdentityOpRewrite<StatisticsRefOp>,
RemoveIdentityOpRewrite<CoupledRefOp>>(context);
- applyPatternsGreedily(func, std::move(patterns));
+ applyPatternsGreedily(func, patterns);
}
FunctionPassBase *mlir::quantizer::createRemoveInstrumentationPass() {
for (auto *op : context->getRegisteredOperations())
op->getCanonicalizationPatterns(patterns, context);
- applyPatternsGreedily(func, std::move(patterns));
+ applyPatternsGreedily(func, patterns);
}
/// Create a Canonicalizer pass.
/// possible, ignoring operations that failed to legalize.
LogicalResult mlir::applyPartialConversion(ArrayRef<Operation *> ops,
ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
TypeConverter *converter) {
OperationConverter opConverter(target, patterns, OpConversionMode::Partial);
return opConverter.convertOperations(ops, converter);
}
LogicalResult mlir::applyPartialConversion(Operation *op,
ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
TypeConverter *converter) {
- return applyPartialConversion(llvm::makeArrayRef(op), target,
- std::move(patterns), converter);
+ return applyPartialConversion(llvm::makeArrayRef(op), target, patterns,
+ converter);
}
/// Apply a complete conversion on the given operations, and all nested
/// operation fails.
LogicalResult mlir::applyFullConversion(ArrayRef<Operation *> ops,
ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
TypeConverter *converter) {
OperationConverter opConverter(target, patterns, OpConversionMode::Full);
return opConverter.convertOperations(ops, converter);
}
LogicalResult mlir::applyFullConversion(Operation *op, ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
TypeConverter *converter) {
- return applyFullConversion(llvm::makeArrayRef(op), target,
- std::move(patterns), converter);
+ return applyFullConversion(llvm::makeArrayRef(op), target, patterns,
+ converter);
}
/// Apply an analysis conversion on the given operations, and all nested
/// operations on success and only pre-existing operations are added to the set.
LogicalResult mlir::applyAnalysisConversion(ArrayRef<Operation *> ops,
ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
DenseSet<Operation *> &convertedOps,
TypeConverter *converter) {
OperationConverter opConverter(target, patterns, OpConversionMode::Analysis,
}
LogicalResult mlir::applyAnalysisConversion(Operation *op,
ConversionTarget &target,
- OwningRewritePatternList &&patterns,
+ OwningRewritePatternList &patterns,
DenseSet<Operation *> &convertedOps,
TypeConverter *converter) {
- return applyAnalysisConversion(llvm::makeArrayRef(op), target,
- std::move(patterns), convertedOps, converter);
+ return applyAnalysisConversion(llvm::makeArrayRef(op), target, patterns,
+ convertedOps, converter);
}
populateAffineToStdConversionPatterns(patterns, &getContext());
ConversionTarget target(getContext());
target.addLegalDialect<loop::LoopOpsDialect, StandardOpsDialect>();
- if (failed(
- applyPartialConversion(getFunction(), target, std::move(patterns))))
+ if (failed(applyPartialConversion(getFunction(), target, patterns)))
signalPassFailure();
}
};
patterns.insert<VectorTransferRewriter<vector::VectorTransferReadOp>,
VectorTransferRewriter<vector::VectorTransferWriteOp>>(
context);
- applyPatternsGreedily(getFunction(), std::move(patterns));
+ applyPatternsGreedily(getFunction(), patterns);
}
};
/// Note: This does not apply patterns to the top-level operation itself.
///
bool mlir::applyPatternsGreedily(Operation *op,
- OwningRewritePatternList &&patterns) {
+ OwningRewritePatternList &patterns) {
// The top-level operation must be known to be isolated from above to
// prevent performing canonicalizations on operations defined at or above
// the region containing 'op'.
// Verify named pattern is generated with expected name.
patterns.insert<TestNamedPatternRule>(&getContext());
- applyPatternsGreedily(getFunction(), std::move(patterns));
+ applyPatternsGreedily(getFunction(), patterns);
}
};
} // end anonymous namespace
// Handle a partial conversion.
if (mode == ConversionMode::Partial) {
- (void)applyPartialConversion(getModule(), target, std::move(patterns),
- &converter);
+ (void)applyPartialConversion(getModule(), target, patterns, &converter);
return;
}
// Analyze the convertible operations.
DenseSet<Operation *> legalizedOps;
- if (failed(applyAnalysisConversion(getModule(), target, std::move(patterns),
+ if (failed(applyAnalysisConversion(getModule(), target, patterns,
legalizedOps, &converter)))
return signalPassFailure();