[Mlir-commits] [flang] [mlir] [mlir][Transforms] Add support for `ConversionPatternRewriter::replaceAllUsesWith` (PR #155244)
Markus Böck
llvmlistbot at llvm.org
Sun Aug 31 04:54:20 PDT 2025
================
@@ -854,15 +854,26 @@ class ConversionPatternRewriter final : public PatternRewriter {
Region *region, const TypeConverter &converter,
TypeConverter::SignatureConversion *entryConversion = nullptr);
- /// Replace all the uses of the block argument `from` with `to`. This
- /// function supports both 1:1 and 1:N replacements.
+ /// Replace all the uses of `from` with `to`. The type of `from` and `to` is
+ /// allowed to differ. The conversion driver will try to reconcile all type
+ /// mismatches that still exist at the end of the conversion with
+ /// materializations. This function supports both 1:1 and 1:N replacements.
///
- /// Note: If `allowPatternRollback` is set to "true", this function replaces
- /// all current and future uses of the block argument. This same block
- /// block argument must not be replaced multiple times. Uses are not replaced
- /// immediately but in a delayed fashion. Patterns may still see the original
- /// uses when inspecting IR.
- void replaceUsesOfBlockArgument(BlockArgument from, ValueRange to);
+ /// Note: If `allowPatternRollback` is set to "true", this function behaves
+ /// slightly different:
+ ///
+ /// 1. All current and future uses of `from` are replaced. The same value must
+ /// not be replaced multiple times. That's an API violation.
+ /// 2. Uses are not replaced immediately but in a delayed fashion. Patterns
+ /// may still see the original uses when inspecting IR.
+ /// 3. Uses within the same block that appear before the defining operation
+ /// of the replacement value are not replaced. This allows users to
+ /// perform certain replaceAllUsesExcept-style replacements, even though
+ /// such API is not directly supported.
----------------
zero9178 wrote:
The way I understand it, this behaviour is not desireable and more a workaround for an issue in `FuncToLLVM`.
I think we should mark this behaviour as either 1) Pending removal/deprecated/a workaround or 2) not have it as part of the public API promise.
https://github.com/llvm/llvm-project/pull/155244
More information about the Mlir-commits
mailing list