44// memref.alloc exists here because sub-byte vector data types such as i2
55// are currently not supported as input arguments.
66
7- // CHECK: #[[$MAP:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) floordiv 4)>
8- // CHECK: #[[$MAP1:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) mod 4)>
9- // CHECK: #[[$MAP2:.+]] = affine_map<()[s0] -> ((s0 * 3 + 2) floordiv 4)>
10- // CHECK: #[[$MAP3:.+]] = affine_map<()[s0] -> (s0 * 3 - ((s0 * 3 + 2) floordiv 4) * 4 + 2)>
117
128func.func @vector_load_i2 () -> vector <3 x3 xi2 > {
139 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -26,7 +22,7 @@ func.func @vector_load_i2() -> vector<3x3xi2> {
2622// CHECK: %[[VEC_I2:.+]] = vector.bitcast %[[VEC]] : vector<2xi8> to vector<8xi2>
2723// CHECK: %[[EXCTRACT:.+]] = vector.extract_strided_slice %[[VEC_I2]] {offsets = [2], sizes = [3], strides = [1]} : vector<8xi2> to vector<3xi2>
2824
29- //-----
25+ // -----
3026
3127func.func @vector_transfer_read_i2 () -> vector <3 xi2 > {
3228 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -44,7 +40,7 @@ func.func @vector_transfer_read_i2() -> vector<3xi2> {
4440// CHECK: %[[BITCAST:.+]] = vector.bitcast %[[READ]] : vector<2xi8> to vector<8xi2>
4541// CHECK: vector.extract_strided_slice %[[BITCAST]] {offsets = [2], sizes = [3], strides = [1]} : vector<8xi2> to vector<3xi2>
4642
47- //-----
43+ // -----
4844
4945func.func @vector_cst_maskedload_i2 (%passthru: vector <5 xi2 >) -> vector <3 x5 xi2 > {
5046 %0 = memref.alloc () : memref <3 x5 xi2 >
@@ -76,7 +72,7 @@ func.func @vector_cst_maskedload_i2(%passthru: vector<5xi2>) -> vector<3x5xi2> {
7672// CHECK: %[[SELECT:.+]] = arith.select %[[INSERT2]], %[[BITCAST2]], %[[INSERT1]] : vector<8xi1>, vector<8xi2>
7773// CHECK: vector.extract_strided_slice %[[SELECT]] {offsets = [2], sizes = [5], strides = [1]} : vector<8xi2> to vector<5xi2>
7874
79- //-----
75+ // -----
8076
8177func.func @vector_load_i2_dynamic_indexing (%idx1: index , %idx2: index ) -> vector <3 xi2 > {
8278 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -85,11 +81,13 @@ func.func @vector_load_i2_dynamic_indexing(%idx1: index, %idx2: index) -> vector
8581 return %1 : vector <3 xi2 >
8682}
8783
88- // CHECK-LABEL: func @vector_load_i2_dynamic_indexing(
84+ // CHECK: #[[MAP:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) floordiv 4)>
85+ // CHECK: #[[MAP1:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) mod 4)>
86+ // CHECK: func @vector_load_i2_dynamic_indexing(
8987// CHECK-SAME: %[[ARG0:.+]]: index, %[[ARG1:.+]]: index) -> vector<3xi2>
9088// CHECK: %[[ALLOC:.+]]= memref.alloc() : memref<3xi8>
91- // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[$ MAP]]()[%[[ARG0]], %[[ARG1]]]
92- // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[$ MAP1]]()[%[[ARG0]], %[[ARG1]]]
89+ // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[MAP]]()[%[[ARG0]], %[[ARG1]]]
90+ // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[MAP1]]()[%[[ARG0]], %[[ARG1]]]
9391// CHECK: %[[EMULATED_LOAD:.+]] = vector.load %alloc[%[[LOADADDR1]]] : memref<3xi8>, vector<2xi8>
9492// CHECK: %[[BITCAST:.+]] = vector.bitcast %[[EMULATED_LOAD]] : vector<2xi8> to vector<8xi2>
9593// CHECK: %[[ZERO:.+]] = arith.constant dense<0> : vector<3xi2>
@@ -101,7 +99,7 @@ func.func @vector_load_i2_dynamic_indexing(%idx1: index, %idx2: index) -> vector
10199// CHECK: %[[OFFSET2:.+]] = arith.addi %1, %c2 : index
102100// CHECK: %[[EXTRACT3:.+]] = vector.extract %[[BITCAST]][%[[OFFSET2]]] : i2 from vector<8xi2>
103101
104- //-----
102+ // -----
105103
106104func.func @vector_load_i2_dynamic_indexing_mixed (%idx: index ) -> vector <3 xi2 > {
107105 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -111,11 +109,13 @@ func.func @vector_load_i2_dynamic_indexing_mixed(%idx: index) -> vector<3xi2> {
111109 return %1 : vector <3 xi2 >
112110}
113111
114- // CHECK-LABEL: func @vector_load_i2_dynamic_indexing_mixed(
112+ // CHECK: #[[MAP:.+]] = affine_map<()[s0] -> ((s0 * 3 + 2) floordiv 4)>
113+ // CHECK: #[[MAP1:.+]] = affine_map<()[s0] -> (s0 * 3 - ((s0 * 3 + 2) floordiv 4) * 4 + 2)>
114+ // CHECK: func @vector_load_i2_dynamic_indexing_mixed(
115115// CHECK-SAME: %[[ARG0:.+]]: index) -> vector<3xi2>
116116// CHECK: %[[ALLOC:.+]]= memref.alloc() : memref<3xi8>
117- // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[$MAP2 ]]()[%[[ARG0]]]
118- // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[$MAP3 ]]()[%[[ARG0]]]
117+ // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[MAP ]]()[%[[ARG0]]]
118+ // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[MAP1 ]]()[%[[ARG0]]]
119119// CHECK: %[[EMULATED_LOAD:.+]] = vector.load %alloc[%[[LOADADDR1]]] : memref<3xi8>, vector<2xi8>
120120// CHECK: %[[BITCAST:.+]] = vector.bitcast %[[EMULATED_LOAD]] : vector<2xi8> to vector<8xi2>
121121// CHECK: %[[ZERO:.+]] = arith.constant dense<0> : vector<3xi2>
@@ -127,7 +127,7 @@ func.func @vector_load_i2_dynamic_indexing_mixed(%idx: index) -> vector<3xi2> {
127127// CHECK: %[[OFFSET2:.+]] = arith.addi %1, %c2 : index
128128// CHECK: %[[EXTRACT3:.+]] = vector.extract %[[BITCAST]][%[[OFFSET2]]] : i2 from vector<8xi2>
129129
130- //-----
130+ // -----
131131
132132func.func @vector_transfer_read_i2_dynamic_indexing (%idx1: index , %idx2: index ) -> vector <3 xi2 > {
133133 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -136,12 +136,14 @@ func.func @vector_transfer_read_i2_dynamic_indexing(%idx1: index, %idx2: index)
136136 return %1 : vector <3 xi2 >
137137}
138138
139- // CHECK-LABEL: func @vector_transfer_read_i2_dynamic_indexing(
139+ // CHECK: #[[MAP:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) floordiv 4)>
140+ // CHECK: #[[MAP1:.+]] = affine_map<()[s0, s1] -> ((s0 * 3 + s1) mod 4)>
141+ // CHECK: func @vector_transfer_read_i2_dynamic_indexing(
140142// CHECK-SAME: %[[ARG0:.+]]: index, %[[ARG1:.+]]: index) -> vector<3xi2>
141143// CHECK: %[[ALLOC:.+]] = memref.alloc() : memref<3xi8>
142144// CHECK: %[[C0:.+]] = arith.extui %c0_i2 : i2 to i8
143- // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[$ MAP]]()[%[[ARG0]], %[[ARG1]]]
144- // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[$ MAP1]]()[%[[ARG0]], %[[ARG1]]]
145+ // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[MAP]]()[%[[ARG0]], %[[ARG1]]]
146+ // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[MAP1]]()[%[[ARG0]], %[[ARG1]]]
145147// CHECK: %[[READ:.+]] = vector.transfer_read %[[ALLOC]][%[[LOADADDR1]]], %[[C0]] : memref<3xi8>, vector<2xi8>
146148// CHECK: %[[BITCAST:.+]] = vector.bitcast %[[READ]] : vector<2xi8> to vector<8xi2>
147149// CHECK: %[[CST:.+]] = arith.constant dense<0> : vector<3xi2>
@@ -153,7 +155,7 @@ func.func @vector_transfer_read_i2_dynamic_indexing(%idx1: index, %idx2: index)
153155// CHECK: %[[ADDI2:.+]] = arith.addi %[[LOADADDR2]], %[[C2]] : index
154156// CHECK: %[[EXTRACT3:.+]] = vector.extract %[[BITCAST]][%[[ADDI2]]] : i2 from vector<8xi2>
155157
156- //-----
158+ // -----
157159
158160func.func @vector_transfer_read_i2_dynamic_indexing_mixed (%idx1: index ) -> vector <3 xi2 > {
159161 %0 = memref.alloc () : memref <3 x3 xi2 >
@@ -163,12 +165,14 @@ func.func @vector_transfer_read_i2_dynamic_indexing_mixed(%idx1: index) -> vecto
163165 return %1 : vector <3 xi2 >
164166}
165167
166- // CHECK-LABEL: func @vector_transfer_read_i2_dynamic_indexing_mixed(
168+ // CHECK: #[[MAP:.+]] = affine_map<()[s0] -> ((s0 * 3 + 2) floordiv 4)>
169+ // CHECK: #[[MAP1:.+]] = affine_map<()[s0] -> (s0 * 3 - ((s0 * 3 + 2) floordiv 4) * 4 + 2)>
170+ // CHECK: func @vector_transfer_read_i2_dynamic_indexing_mixed(
167171// CHECK-SAME: %[[ARG0:.+]]: index) -> vector<3xi2>
168172// CHECK: %[[ALLOC:.+]] = memref.alloc() : memref<3xi8>
169173// CHECK: %[[C0:.+]] = arith.extui %c0_i2 : i2 to i8
170- // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[$MAP2 ]]()[%[[ARG0]]]
171- // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[$MAP3 ]]()[%[[ARG0]]]
174+ // CHECK: %[[LOADADDR1:.+]] = affine.apply #[[MAP ]]()[%[[ARG0]]]
175+ // CHECK: %[[LOADADDR2:.+]] = affine.apply #[[MAP1 ]]()[%[[ARG0]]]
172176// CHECK: %[[READ:.+]] = vector.transfer_read %[[ALLOC]][%[[LOADADDR1]]], %[[C0]] : memref<3xi8>, vector<2xi8>
173177// CHECK: %[[BITCAST:.+]] = vector.bitcast %[[READ]] : vector<2xi8> to vector<8xi2>
174178// CHECK: %[[CST:.+]] = arith.constant dense<0> : vector<3xi2>
0 commit comments