@@ -604,6 +604,19 @@ module Expressions;
604
604
// CHECK: %b = moore.variable : <i32>
605
605
// CHECK: %c = moore.variable : <i32>
606
606
int a, b, c;
607
+ // CHECK: %j = moore.variable : <i32>
608
+ int j;
609
+ // CHECK: %up = moore.variable : <uarray<4 x l11>>
610
+ logic [10 : 0 ] up [3 : 0 ];
611
+ // CHECK: %p1 = moore.variable : <l11>
612
+ // CHECK: %p2 = moore.variable : <l11>
613
+ // CHECK: %p3 = moore.variable : <l11>
614
+ // CHECK: %p4 = moore.variable : <l11>
615
+ logic [11 : 1 ] p1, p2, p3, p4;
616
+ // CHECK: %yy = moore.variable : <i96>
617
+ bit [96 : 1 ] yy;
618
+ // CHECK: %dd = moore.variable : <i100>
619
+ bit [99 : 0 ] dd;
607
620
// CHECK: %u = moore.variable : <i32>
608
621
// CHECK: %w = moore.variable : <i32>
609
622
int unsigned u, w;
@@ -622,8 +635,16 @@ module Expressions;
622
635
logic [31 : 0 ] vec_1;
623
636
// CHECK: %vec_2 = moore.variable : <l32>
624
637
logic [0 : 31 ] vec_2;
638
+ // CHECK: %vec_3 = moore.variable : <l16>
639
+ logic [15 : 0 ] vec_3;
640
+ // CHECK: %vec_4 = moore.variable : <l32>
641
+ logic [31 : 0 ] vec_4;
642
+ // CHECK: %vec_5 = moore.variable : <l48>
643
+ logic [47 : 0 ] vec_5;
625
644
// CHECK: %arr = moore.variable : <uarray<3 x uarray<6 x i4>>>
626
645
bit [4 : 1 ] arr [1 : 3 ][2 : 7 ];
646
+
647
+ logic arr_1 [63 : 0 ];
627
648
// CHECK: %struct0 = moore.variable : <struct<{a: i32, b: i32}>>
628
649
struct packed {
629
650
int a, b;
@@ -690,6 +711,117 @@ module Expressions;
690
711
{ a, b, c} = a;
691
712
// CHECK: moore.concat_ref %d, %e : (!moore.ref<l32>, !moore.ref<l32>) -> <l64>
692
713
{ d, e} = d;
714
+ // CHECK: [[TMP1:%.+]] = moore.read %j : <i32>
715
+ // CHECK: moore.blocking_assign %a, [[TMP1]] : i32
716
+ a = { >> { j}} ;
717
+ // CHECK: [[TMP1:%.+]] = moore.read %j : <i32>
718
+ // CHECK: [[TMP2:%.+]] = moore.extract [[TMP1]] from 0 : i32 -> i8
719
+ // CHECK: [[TMP3:%.+]] = moore.extract [[TMP1]] from 8 : i32 -> i8
720
+ // CHECK: [[TMP4:%.+]] = moore.extract [[TMP1]] from 16 : i32 -> i8
721
+ // CHECK: [[TMP5:%.+]] = moore.extract [[TMP1]] from 24 : i32 -> i8
722
+ // CHECK: [[TMP6:%.+]] = moore.concat [[TMP2]], [[TMP3]], [[TMP4]], [[TMP5]] : (!moore.i8, !moore.i8, !moore.i8, !moore.i8) -> i32
723
+ // CHECK: moore.blocking_assign %a, [[TMP6]] : i32
724
+ a = { << byte { j}} ;
725
+ // CHECK: [[TMP1:%.+]] = moore.read %j : <i32>
726
+ // CHECK: [[TMP2:%.+]] = moore.extract [[TMP1]] from 0 : i32 -> i16
727
+ // CHECK: [[TMP3:%.+]] = moore.extract [[TMP1]] from 16 : i32 -> i16
728
+ // CHECK: [[TMP4:%.+]] = moore.concat [[TMP2]], [[TMP3]] : (!moore.i16, !moore.i16) -> i32
729
+ // CHECK: moore.blocking_assign %a, [[TMP4]] : i32
730
+ a = { << 16 { j}} ;
731
+ // CHECK: [[TMP1:%.+]] = moore.constant 53 : i8
732
+ // CHECK: [[TMP2:%.+]] = moore.extract [[TMP1]] from 0 : i8 -> i1
733
+ // CHECK: [[TMP3:%.+]] = moore.extract [[TMP1]] from 1 : i8 -> i1
734
+ // CHECK: [[TMP4:%.+]] = moore.extract [[TMP1]] from 2 : i8 -> i1
735
+ // CHECK: [[TMP5:%.+]] = moore.extract [[TMP1]] from 3 : i8 -> i1
736
+ // CHECK: [[TMP6:%.+]] = moore.extract [[TMP1]] from 4 : i8 -> i1
737
+ // CHECK: [[TMP7:%.+]] = moore.extract [[TMP1]] from 5 : i8 -> i1
738
+ // CHECK: [[TMP8:%.+]] = moore.extract [[TMP1]] from 6 : i8 -> i1
739
+ // CHECK: [[TMP9:%.+]] = moore.extract [[TMP1]] from 7 : i8 -> i1
740
+ // CHECK: [[TMP10:%.+]] = moore.concat [[TMP2]], [[TMP3]], [[TMP4]], [[TMP5]], [[TMP6]], [[TMP7]], [[TMP8]], [[TMP9]] : (!moore.i1, !moore.i1, !moore.i1, !moore.i1, !moore.i1, !moore.i1, !moore.i1, !moore.i1) -> i8
741
+ // CHECK: [[TMP11:%.+]] = moore.zext [[TMP10]] : i8 -> i32
742
+ // CHECK: moore.blocking_assign %a, [[TMP11]] : i32
743
+ a = { << { 8'b0011_0101 }} ;
744
+ // CHECK: [[TMP1:%.+]] = moore.constant -11 : i6
745
+ // CHECK: [[TMP2:%.+]] = moore.extract [[TMP1]] from 0 : i6 -> i4
746
+ // CHECK: [[TMP3:%.+]] = moore.extract [[TMP1]] from 4 : i6 -> i2
747
+ // CHECK: [[TMP4:%.+]] = moore.concat [[TMP2]], [[TMP3]] : (!moore.i4, !moore.i2) -> i6
748
+ // CHECK: [[TMP5:%.+]] = moore.zext [[TMP4]] : i6 -> i32
749
+ // CHECK: moore.blocking_assign %a, [[TMP5]] : i32
750
+ a = { << 4 { 6'b11_0101 }} ;
751
+ // CHECK: [[TMP1:%.+]] = moore.constant -11 : i6
752
+ // CHECK: [[TMP2:%.+]] = moore.zext [[TMP1]] : i6 -> i32
753
+ // CHECK: moore.blocking_assign %a, [[TMP2]] : i32
754
+ a = { >> 4 { 6'b11_0101 }} ;
755
+ // CHECK: [[TMP1:%.+]] = moore.constant -3 : i4
756
+ // CHECK: [[TMP2:%.+]] = moore.extract [[TMP1]] from 0 : i4 -> i1
757
+ // CHECK: [[TMP3:%.+]] = moore.extract [[TMP1]] from 1 : i4 -> i1
758
+ // CHECK: [[TMP4:%.+]] = moore.extract [[TMP1]] from 2 : i4 -> i1
759
+ // CHECK: [[TMP5:%.+]] = moore.extract [[TMP1]] from 3 : i4 -> i1
760
+ // CHECK: [[TMP6:%.+]] = moore.concat [[TMP2]], [[TMP3]], [[TMP4]], [[TMP5]] : (!moore.i1, !moore.i1, !moore.i1, !moore.i1) -> i4
761
+ // CHECK: [[TMP7:%.+]] = moore.extract [[TMP6]] from 0 : i4 -> i2
762
+ // CHECK: [[TMP8:%.+]] = moore.extract [[TMP6]] from 2 : i4 -> i2
763
+ // CHECK: [[TMP9:%.+]] = moore.concat [[TMP7]], [[TMP8]] : (!moore.i2, !moore.i2) -> i4
764
+ // CHECK: [[TMP10:%.+]] = moore.zext [[TMP9]] : i4 -> i32
765
+ // CHECK: moore.blocking_assign %a, [[TMP10]] : i32
766
+ a = { << 2 { { << { 4'b1101 }} }} ;
767
+ // CHECK: [[TMP1:%.+]] = moore.read %a : <i32>
768
+ // CHECK: [[TMP2:%.+]] = moore.read %b : <i32>
769
+ // CHECK: [[TMP3:%.+]] = moore.read %c : <i32>
770
+ // CHECK: [[TMP4:%.+]] = moore.concat [[TMP1]], [[TMP2]], [[TMP3]] : (!moore.i32, !moore.i32, !moore.i32) -> i96
771
+ // CHECK: moore.blocking_assign %yy, [[TMP4]] : i96
772
+ yy = { >> { a, b, c }} ;
773
+ // CHECK: [[TMP1:%.+]] = moore.read %a : <i32>
774
+ // CHECK: [[TMP2:%.+]] = moore.read %b : <i32>
775
+ // CHECK: [[TMP3:%.+]] = moore.read %c : <i32>
776
+ // CHECK: [[TMP4:%.+]] = moore.concat [[TMP1]], [[TMP2]], [[TMP3]] : (!moore.i32, !moore.i32, !moore.i32) -> i96
777
+ // CHECK: [[TMP5:%.+]] = moore.zext [[TMP4]] : i96 -> i100
778
+ // CHECK: moore.blocking_assign %dd, [[TMP5]] : i100
779
+ dd = { >> { a, b, c }} ;
780
+ // CHECK: [[TMP1:%.+]] = moore.concat_ref %a, %b, %c : (!moore.ref<i32>, !moore.ref<i32>, !moore.ref<i32>) -> <i96>
781
+ // CHECK: [[TMP2:%.+]] = moore.constant 1 : i96
782
+ // CHECK: moore.blocking_assign [[TMP1]], [[TMP2]] : i96
783
+ { >> { a, b, c }} = 96'b1 ;
784
+ // CHECK: [[TMP1:%.+]] = moore.concat_ref %a, %b, %c : (!moore.ref<i32>, !moore.ref<i32>, !moore.ref<i32>) -> <i96>
785
+ // CHECK: [[TMP2:%.+]] = moore.constant 31 : i100
786
+ // CHECK: [[TMP3:%.+]] = moore.trunc [[TMP2]] : i100 -> i96
787
+ // CHECK: moore.blocking_assign [[TMP1]], [[TMP3]] : i96
788
+ { >> { a, b, c }} = 100'b11111 ;
789
+ // CHECK: [[TMP1:%.+]] = moore.concat_ref %p1, %p2, %p3, %p4 : (!moore.ref<l11>, !moore.ref<l11>, !moore.ref<l11>, !moore.ref<l11>) -> <l44>
790
+ // CHECK: [[TMP2:%.+]] = moore.read %up : <uarray<4 x l11>>
791
+ // CHECK: [[TMP3:%.+]] = moore.conversion [[TMP2]] : !moore.uarray<4 x l11> -> !moore.l44
792
+ // CHECK: moore.blocking_assign [[TMP1]], [[TMP3]] : l44
793
+ { >> { p1, p2, p3, p4}} = up;
794
+ // CHECK: [[TMP1:%.+]] = moore.extract_ref %a from 0 : <i32> -> <i8>
795
+ // CHECK: [[TMP2:%.+]] = moore.extract_ref %a from 8 : <i32> -> <i8>
796
+ // CHECK: [[TMP3:%.+]] = moore.extract_ref %a from 16 : <i32> -> <i8>
797
+ // CHECK: [[TMP4:%.+]] = moore.extract_ref %a from 24 : <i32> -> <i8>
798
+ // CHECK: [[TMP5:%.+]] = moore.concat_ref [[TMP1]], [[TMP2]], [[TMP3]], [[TMP4]] : (!moore.ref<i8>, !moore.ref<i8>, !moore.ref<i8>, !moore.ref<i8>) -> <i32>
799
+ // CHECK: [[TMP6:%.+]] = moore.constant 1 : i32
800
+ // CHECK: moore.blocking_assign [[TMP5]], [[TMP6]] : i32
801
+ { << byte { a}} = 32'b1 ;
802
+ // CHECK: %[[TMP1:.*]] = moore.read %vec_3 : <l16>
803
+ // CHECK: %[[TMP2:.*]] = moore.read %arr_1 : <uarray<64 x l1>>
804
+ // CHECK: %[[TMP3:.*]] = moore.extract %[[TMP2]] from 0 : uarray<64 x l1> -> uarray<16 x l1>
805
+ // CHECK: %[[TMP4:.*]] = moore.conversion %[[TMP3]] : !moore.uarray<16 x l1> -> !moore.l16
806
+ // CHECK: %[[TMP5:.*]] = moore.concat %[[TMP1]], %[[TMP4]] : (!moore.l16, !moore.l16) -> l32
807
+ // CHECK: %[[TMP6:.*]] = moore.extract %[[TMP5]] from 0 : l32 -> l8
808
+ // CHECK: %[[TMP7:.*]] = moore.extract %[[TMP5]] from 8 : l32 -> l8
809
+ // CHECK: %[[TMP8:.*]] = moore.extract %[[TMP5]] from 16 : l32 -> l8
810
+ // CHECK: %[[TMP9:.*]] = moore.extract %[[TMP5]] from 24 : l32 -> l8
811
+ // CHECK: %[[TMP10:.*]] = moore.concat %[[TMP6]], %[[TMP7]], %[[TMP8]], %[[TMP9]] : (!moore.l8, !moore.l8, !moore.l8, !moore.l8) -> l32
812
+ // CHECK: moore.blocking_assign %vec_1, %[[TMP10]] : l32
813
+ vec_1 = { << byte { vec_3, arr_1 with [15 : 0 ]}} ;
814
+ // CHECK: %[[TMP1:.*]] = moore.extract_ref %arr_1 from 0 : <uarray<64 x l1>> -> <uarray<16 x l1>>
815
+ // CHECK: %[[TMP2:.*]] = moore.conversion %[[TMP1]] : !moore.ref<uarray<16 x l1>> -> !moore.ref<l16>
816
+ // CHECK: %[[TMP3:.*]] = moore.concat_ref %vec_3, %[[TMP2]] : (!moore.ref<l16>, !moore.ref<l16>) -> <l32>
817
+ // CHECK: %[[TMP4:.*]] = moore.extract_ref %[[TMP3]] from 0 : <l32> -> <l8>
818
+ // CHECK: %[[TMP5:.*]] = moore.extract_ref %[[TMP3]] from 8 : <l32> -> <l8>
819
+ // CHECK: %[[TMP6:.*]] = moore.extract_ref %[[TMP3]] from 16 : <l32> -> <l8>
820
+ // CHECK: %[[TMP7:.*]] = moore.extract_ref %[[TMP3]] from 24 : <l32> -> <l8>
821
+ // CHECK: %[[TMP8:.*]] = moore.concat_ref %[[TMP4]], %[[TMP5]], %[[TMP6]], %[[TMP7]] : (!moore.ref<l8>, !moore.ref<l8>, !moore.ref<l8>, !moore.ref<l8>) -> <l32>
822
+ // CHECK: %[[TMP9:.*]] = moore.read %vec_1 : <l32>
823
+ // CHECK: moore.blocking_assign %[[TMP8]], %[[TMP9]] : l32
824
+ { << byte { vec_3, arr_1 with [15 : 0 ]}} = vec_1;
693
825
// CHECK: [[TMP1:%.+]] = moore.constant 0 : i1
694
826
// CHECK: [[TMP2:%.+]] = moore.concat [[TMP1]] : (!moore.i1) -> i1
695
827
// CHECK: moore.replicate [[TMP2]] : i1 -> i32
0 commit comments