From 48dee4a71ba79d9e2b95e62bd3c1b14a299131b4 Mon Sep 17 00:00:00 2001 From: youben11 Date: Thu, 13 Oct 2022 09:58:57 +0100 Subject: [PATCH] fix: create new op in generic type conversion converting types of the original op seems to have an impact on other operations using the result type, which should consider checking the different cases (whether the type has been converted yet, or not). However, creating a new op don't have this issue --- .../Conversion/Utils/GenericOpTypeConversionPattern.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h b/compiler/include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h index caf4db644..5b2645bda 100644 --- a/compiler/include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h +++ b/compiler/include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h @@ -54,11 +54,12 @@ struct GenericTypeConverterPattern : public mlir::OpRewritePattern { mlir::LogicalResult matchAndRewrite(Op op, mlir::PatternRewriter &rewriter) const override { - convertOperandAndResultTypes(rewriter, op, + auto newOp = rewriter.clone(*op); + convertOperandAndResultTypes(rewriter, newOp, [&](mlir::MLIRContext *, mlir::Type t) { return converter.convertType(t); }); - + rewriter.replaceOp(op, newOp->getResults()); return mlir::success(); }