diff --git a/lib/Conversion/MooreToCore/MooreToCore.cpp b/lib/Conversion/MooreToCore/MooreToCore.cpp index 4277688d7222..011a215b49c4 100644 --- a/lib/Conversion/MooreToCore/MooreToCore.cpp +++ b/lib/Conversion/MooreToCore/MooreToCore.cpp @@ -795,6 +795,19 @@ struct ReadOpConversion : public OpConversionPattern { } }; +struct AssignedVariableOpConversion + : public OpConversionPattern { + using OpConversionPattern::OpConversionPattern; + + LogicalResult + matchAndRewrite(AssignedVariableOp op, OpAdaptor adaptor, + ConversionPatternRewriter &rewriter) const override { + rewriter.replaceOpWithNewOp(op, adaptor.getInput(), + adaptor.getNameAttr()); + return success(); + } +}; + template struct AssignOpConversion : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; @@ -978,6 +991,7 @@ static void populateOpConversion(RewritePatternSet &patterns, AssignOpConversion, AssignOpConversion, AssignOpConversion, + AssignedVariableOpConversion, // Patterns of branch operations. CondBranchOpConversion, BranchOpConversion, diff --git a/test/Conversion/MooreToCore/basic.mlir b/test/Conversion/MooreToCore/basic.mlir index 38edef2e6df9..9646e20e67ce 100644 --- a/test/Conversion/MooreToCore/basic.mlir +++ b/test/Conversion/MooreToCore/basic.mlir @@ -57,6 +57,9 @@ func.func @Expressions(%arg0: !moore.i1, %arg1: !moore.l1, %arg2: !moore.i6, %ar moore.replicate %arg0 : i1 -> i2 moore.replicate %arg1 : l1 -> l2 + // CHECK-NEXT: %name = hw.wire %arg0 : i1 + %name = moore.assigned_variable %arg0 : !moore.i1 + // CHECK-NEXT: %c12_i32 = hw.constant 12 : i32 // CHECK-NEXT: %c3_i6 = hw.constant 3 : i6 moore.constant 12 : !moore.i32