@@ -1633,6 +1633,9 @@ ConversionPatternRewriter::ConversionPatternRewriter(
16331633 setListener (impl.get ());
16341634}
16351635
1636+ ConversionPatternRewriter::ConversionPatternRewriter (MLIRContext *ctx)
1637+ : PatternRewriter(ctx), impl(nullptr ) {}
1638+
16361639ConversionPatternRewriter::~ConversionPatternRewriter () = default ;
16371640
16381641void ConversionPatternRewriter::replaceOp (Operation *op, Operation *newOp) {
@@ -1717,19 +1720,17 @@ void ConversionPatternRewriter::replaceUsesOfBlockArgument(BlockArgument from,
17171720
17181721Value ConversionPatternRewriter::getRemappedValue (Value key) {
17191722 SmallVector<Value> remappedValues;
1720- if (failed (impl->remapValues (" value" , /* inputLoc=*/ std::nullopt , *this , key,
1721- remappedValues)))
1723+ if (failed (getRemappedValues (key, remappedValues)))
17221724 return nullptr ;
17231725 return remappedValues.front ();
17241726}
17251727
17261728LogicalResult
17271729ConversionPatternRewriter::getRemappedValues (ValueRange keys,
1728- SmallVectorImpl <Value> &results) {
1730+ SmallVector <Value> &results) {
17291731 if (keys.empty ())
17301732 return success ();
1731- return impl->remapValues (" value" , /* inputLoc=*/ std::nullopt , *this , keys,
1732- results);
1733+ return getAdapterOperands (" value" , /* inputLoc=*/ std::nullopt , keys, results);
17331734}
17341735
17351736void ConversionPatternRewriter::inlineBlockBefore (Block *source, Block *dest,
@@ -1819,6 +1820,22 @@ detail::ConversionPatternRewriterImpl &ConversionPatternRewriter::getImpl() {
18191820 return *impl;
18201821}
18211822
1823+ void ConversionPatternRewriter::setCurrentTypeConverter (
1824+ const TypeConverter *converter) {
1825+ impl->currentTypeConverter = converter;
1826+ }
1827+
1828+ const TypeConverter *
1829+ ConversionPatternRewriter::getCurrentTypeConverter () const {
1830+ return impl->currentTypeConverter ;
1831+ }
1832+
1833+ LogicalResult ConversionPatternRewriter::getAdapterOperands (
1834+ StringRef valueDiagTag, std::optional<Location> inputLoc, ValueRange values,
1835+ SmallVector<Value> &remapped) {
1836+ return impl->remapValues (valueDiagTag, inputLoc, *this , values, remapped);
1837+ }
1838+
18221839// ===----------------------------------------------------------------------===//
18231840// ConversionPattern
18241841// ===----------------------------------------------------------------------===//
@@ -1827,16 +1844,18 @@ LogicalResult
18271844ConversionPattern::matchAndRewrite (Operation *op,
18281845 PatternRewriter &rewriter) const {
18291846 auto &dialectRewriter = static_cast <ConversionPatternRewriter &>(rewriter);
1830- auto &rewriterImpl = dialectRewriter.getImpl ();
18311847
18321848 // Track the current conversion pattern type converter in the rewriter.
1833- llvm::SaveAndRestore currentConverterGuard (rewriterImpl.currentTypeConverter ,
1834- getTypeConverter ());
1849+ const TypeConverter *currentTypeConverter =
1850+ dialectRewriter.getCurrentTypeConverter ();
1851+ auto resetTypeConverter = llvm::make_scope_exit (
1852+ [&] { dialectRewriter.setCurrentTypeConverter (currentTypeConverter); });
1853+ dialectRewriter.setCurrentTypeConverter (getTypeConverter ());
18351854
18361855 // Remap the operands of the operation.
1837- SmallVector<Value, 4 > operands;
1838- if (failed (rewriterImpl. remapValues (" operand" , op->getLoc (), rewriter ,
1839- op->getOperands (), operands))) {
1856+ SmallVector<Value> operands;
1857+ if (failed (dialectRewriter. getAdapterOperands (" operand" , op->getLoc (),
1858+ op->getOperands (), operands))) {
18401859 return failure ();
18411860 }
18421861 return matchAndRewrite (op, operands, dialectRewriter);
0 commit comments