[MooreToCore] Struct extract lowering support (#7475)

This commit is contained in:
Martin Erhart 2024-08-09 00:37:45 +01:00 committed by GitHub
parent 1c8abbced3
commit 2f869728d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 1 deletions

View File

@ -288,6 +288,18 @@ struct DynExtractOpConversion : public OpConversionPattern<DynExtractOp> {
}
};
struct StructExtractOpConversion : public OpConversionPattern<StructExtractOp> {
using OpConversionPattern::OpConversionPattern;
LogicalResult
matchAndRewrite(StructExtractOp op, OpAdaptor adaptor,
ConversionPatternRewriter &rewriter) const override {
rewriter.replaceOpWithNewOp<hw::StructExtractOp>(
op, adaptor.getInput(), adaptor.getFieldNameAttr());
return success();
}
};
struct ReduceAndOpConversion : public OpConversionPattern<ReduceAndOp> {
using OpConversionPattern::OpConversionPattern;
LogicalResult
@ -741,7 +753,7 @@ static void populateOpConversion(RewritePatternSet &patterns,
// Patterns of miscellaneous operations.
ConstantOpConv, ConcatOpConversion, ReplicateOpConversion,
ExtractOpConversion, DynExtractOpConversion, ConversionOpConversion,
ReadOpConversion, NamedConstantOpConv,
ReadOpConversion, NamedConstantOpConv, StructExtractOpConversion,
// Patterns of unary operations.
ReduceAndOpConversion, ReduceOrOpConversion, ReduceXorOpConversion,

View File

@ -311,3 +311,10 @@ moore.module @Variable() {
// CHECK: hw.output
moore.output
}
// CHECK-LABEL: func @Struct
func.func @Struct(%arg0: !moore.struct<{exp_bits: i32, man_bits: i32}>) -> !moore.i32 {
// CHECK: hw.struct_extract %arg0["exp_bits"] : !hw.struct<exp_bits: i32, man_bits: i32>
%0 = moore.struct_extract %arg0, "exp_bits" : !moore.struct<{exp_bits: i32, man_bits: i32}> -> i32
return %0 : !moore.i32
}