[llvm-branch-commits] [mlir] [mlir][Transforms] Support `replaceAllUsesWith` in dialect conversion (PR #84725)
Matthias Springer via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Mar 11 19:50:47 PDT 2024
================
@@ -751,6 +731,44 @@ class UnresolvedMaterializationRewrite : public OperationRewrite {
/// The original output type. This is only used for argument conversions.
Type origOutputType;
};
+
+/// A value rewrite.
+class ValueRewrite : public IRRewrite {
+public:
+ /// Return the operation that this rewrite operates on.
+ Value getValue() const { return value; }
+
+ static bool classof(const IRRewrite *rewrite) {
+ return rewrite->getKind() >= Kind::ReplaceAllUses &&
+ rewrite->getKind() <= Kind::ReplaceAllUses;
+ }
+
+protected:
+ ValueRewrite(Kind kind, ConversionPatternRewriterImpl &rewriterImpl,
+ Value value)
+ : IRRewrite(kind, rewriterImpl), value(value) {}
+
+ // The value that this rewrite operates on.
+ Value value;
+};
+
+/// Replacing a value. This rewrite is not immediately reflected in the IR. An
+/// internal IR mapping is updated, but the actual replacement is delayed until
+/// the rewrite is committed.
+class ReplaceAllUsesRewrite : public ValueRewrite {
+public:
+ ReplaceAllUsesRewrite(ConversionPatternRewriterImpl &rewriterImpl,
+ Value value)
+ : ValueRewrite(Kind::ReplaceAllUses, rewriterImpl, value) {}
+
+ static bool classof(const IRRewrite *rewrite) {
+ return rewrite->getKind() == Kind::ReplaceAllUses;
+ }
+
+ void commit(RewriterBase &rewriter) override;
+
+ void rollback() override;
+};
----------------
matthias-springer wrote:
I agree, the dialect conversion is too complicated. I'm working on this for over a month now and there are still parts that I do not understand.
Thinking longer term, what would make the design much simpler: no automatic rollback, materialize all IR changes immediately (in particular, materialize unrealized_conversion_casts eagerly and no more adaptors). Maybe as part of a dialect conversion v2 built on top of the existing `RewritePattern`, `ConversionPolicy`, `TypeConverter`...
https://github.com/llvm/llvm-project/pull/84725
More information about the llvm-branch-commits
mailing list