Skip to content

Commit ae00359

Browse files
committed
[FIRRTL] Support StringConcatOp in LowerClasses
Add a conversion pattern to lower FIRRTL `StringConcatOp` to OM `StringConcatOp` in the LowerClasses pass. AI-assisted-by: Augment (Sonnet 4.5) Signed-off-by: Schuyler Eldridge <schuyler.eldridge@sifive.com>
1 parent 2f9b5c9 commit ae00359

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

lib/Dialect/FIRRTL/Transforms/LowerClasses.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,6 +1743,18 @@ struct IntegerShlOpConversion
17431743
}
17441744
};
17451745

1746+
struct StringConcatOpConversion
1747+
: public OpConversionPattern<firrtl::StringConcatOp> {
1748+
using OpConversionPattern::OpConversionPattern;
1749+
1750+
LogicalResult
1751+
matchAndRewrite(firrtl::StringConcatOp op, OpAdaptor adaptor,
1752+
ConversionPatternRewriter &rewriter) const override {
1753+
rewriter.replaceOpWithNewOp<om::StringConcatOp>(op, adaptor.getOperands());
1754+
return success();
1755+
}
1756+
};
1757+
17461758
struct PathOpConversion : public OpConversionPattern<firrtl::PathOp> {
17471759

17481760
PathOpConversion(TypeConverter &typeConverter, MLIRContext *context,
@@ -2220,6 +2232,7 @@ static void populateRewritePatterns(
22202232
patterns.add<IntegerMulOpConversion>(converter, patterns.getContext());
22212233
patterns.add<IntegerShrOpConversion>(converter, patterns.getContext());
22222234
patterns.add<IntegerShlOpConversion>(converter, patterns.getContext());
2235+
patterns.add<StringConcatOpConversion>(converter, patterns.getContext());
22232236
patterns.add<UnrealizedConversionCastOpConversion>(converter,
22242237
patterns.getContext());
22252238
patterns.add<UnknownValueOpConversion>(converter, patterns.getContext());

test/Dialect/FIRRTL/lower-classes.mlir

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,19 @@ firrtl.circuit "IntegerArithmetic" {
409409
}
410410
}
411411

412+
// CHECK-LABEL: firrtl.circuit "StringCat"
413+
firrtl.circuit "StringCat" {
414+
firrtl.module @StringCat() {}
415+
416+
// CHECK-LABEL: om.class @StringConcatClass
417+
firrtl.class @StringConcatClass(in %a: !firrtl.string, in %b: !firrtl.string, out %c: !firrtl.string) {
418+
// CHECK: %[[CONCAT:.+]] = om.string.concat %a, %b : !om.string
419+
%0 = firrtl.string.concat %a, %b : !firrtl.string
420+
// CHECK: om.class.fields %[[CONCAT]]
421+
firrtl.propassign %c, %0 : !firrtl.string
422+
}
423+
}
424+
412425
// CHECK-LABEL: firrtl.circuit "AltBasePath"
413426
firrtl.circuit "AltBasePath" {
414427
// CHECK: hw.hierpath private [[FOO_NLA:@.+]] [@AltBasePath::[[FOO_SYM:@.+]]]

0 commit comments

Comments
 (0)