================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits