@@ -336,6 +336,36 @@ firrtl.circuit "UnusedBitsAtEnd" {
336336
337337// -----
338338
339+ firrtl.circuit " UnusedBitsOfSignedInteger" {
340+ firrtl.module public @UnusedBitsOfSignedInteger (
341+ in %in_data: !firrtl.sint <42 >,
342+ out %result_read: !firrtl.sint <5 >) {
343+ // CHECK: %Memory_read, %Memory_write = firrtl.mem Undefined
344+ // CHECK-SAME: !firrtl.bundle<addr: uint<4>, en: uint<1>, clk: clock, data flip: sint<5>>
345+ // CHECK-SAME: !firrtl.bundle<addr: uint<4>, en: uint<1>, clk: clock, data: sint<5>, mask: uint<1>>
346+ %Memory_read , %Memory_write = firrtl.mem Undefined
347+ {
348+ depth = 12 : i64 ,
349+ name = " Memory" ,
350+ portNames = [" read" , " write" ],
351+ readLatency = 0 : i32 ,
352+ writeLatency = 1 : i32
353+ } :
354+ !firrtl.bundle <addr : uint <4 >, en : uint <1 >, clk : clock , data flip : sint <42 >>,
355+ !firrtl.bundle <addr : uint <4 >, en : uint <1 >, clk : clock , data : sint <42 >, mask : uint <1 >>
356+
357+ %read_data = firrtl.subfield %Memory_read [data ] : !firrtl.bundle <addr : uint <4 >, en : uint <1 >, clk : clock , data flip : sint <42 >>
358+ %read_data_slice = firrtl.bits %read_data 7 to 3 : (!firrtl.sint <42 >) -> !firrtl.uint <5 >
359+ %read_data_slice_sint = firrtl.asSInt %read_data_slice : (!firrtl.uint <5 >) -> !firrtl.sint <5 >
360+ firrtl.connect %result_read , %read_data_slice_sint : !firrtl.sint <5 >, !firrtl.sint <5 >
361+
362+ %write_data = firrtl.subfield %Memory_write [data ] : !firrtl.bundle <addr : uint <4 >, en : uint <1 >, clk : clock , data : sint <42 >, mask : uint <1 >>
363+ firrtl.connect %write_data , %in_data : !firrtl.sint <42 >, !firrtl.sint <42 >
364+ }
365+ }
366+
367+ // -----
368+
339369firrtl.circuit " OneAddressMasked" {
340370 firrtl.module public @OneAddressMasked (
341371 in %clock: !firrtl.clock ,
0 commit comments