@@ -67,6 +67,112 @@ func.func @create_mask_transpose_to_transposed_create_mask(
67
67
68
68
// -----
69
69
70
+ // CHECK-LABEL: extract_from_create_mask
71
+ // CHECK-SAME: %[[DIM0:.*]]: index, %[[DIM1:.*]]: index
72
+ func.func @extract_from_create_mask (%dim0: index , %dim1: index ) -> vector <[4 ]x[4 ]xi1 > {
73
+ %c2 = arith.constant 2 : index
74
+ %mask = vector.create_mask %c2 , %dim0 , %dim1 : vector <4 x[4 ]x[4 ]xi1 >
75
+ // CHECK: vector.create_mask %[[DIM0]], %[[DIM1]] : vector<[4]x[4]xi1>
76
+ // CHECK-NOT: vector.extract
77
+ %extract = vector.extract %mask [1 ] : vector <[4 ]x[4 ]xi1 > from vector <4 x[4 ]x[4 ]xi1 >
78
+ return %extract : vector <[4 ]x[4 ]xi1 >
79
+ }
80
+
81
+ // -----
82
+
83
+ // CHECK-LABEL: extract_from_create_mask_all_false
84
+ func.func @extract_from_create_mask_all_false (%dim0: index , %dim1: index ) -> vector <[4 ]x[4 ]xi1 > {
85
+ %c2 = arith.constant 2 : index
86
+ %mask = vector.create_mask %c2 , %dim0 , %dim1 : vector <4 x[4 ]x[4 ]xi1 >
87
+ // CHECK: arith.constant dense<false> : vector<[4]x[4]xi1>
88
+ // CHECK-NOT: vector.extract
89
+ %extract = vector.extract %mask [2 ] : vector <[4 ]x[4 ]xi1 > from vector <4 x[4 ]x[4 ]xi1 >
90
+ return %extract : vector <[4 ]x[4 ]xi1 >
91
+ }
92
+
93
+ // -----
94
+
95
+ // CHECK-LABEL: extract_from_create_mask_leading_scalable
96
+ // CHECK-SAME: %[[DIM0:.*]]: index
97
+ func.func @extract_from_create_mask_leading_scalable (%dim0: index ) -> vector <8 xi1 > {
98
+ %c3 = arith.constant 3 : index
99
+ %mask = vector.create_mask %c3 , %dim0 : vector <[4 ]x8 xi1 >
100
+ // CHECK: vector.create_mask %[[DIM0]] : vector<8xi1>
101
+ // CHECK-NOT: vector.extract
102
+ %extract = vector.extract %mask [1 ] : vector <8 xi1 > from vector <[4 ]x8 xi1 >
103
+ return %extract : vector <8 xi1 >
104
+ }
105
+
106
+ // -----
107
+
108
+ // CHECK-LABEL: extract_from_create_mask_dynamic_position
109
+ // CHECK-SAME: %[[DIM0:.*]]: index, %[[INDEX:.*]]: index
110
+ func.func @extract_from_create_mask_dynamic_position (%dim0: index , %index: index ) -> vector <6 xi1 > {
111
+ %c4 = arith.constant 4 : index
112
+ %c3 = arith.constant 3 : index
113
+ %mask = vector.create_mask %c3 , %c4 , %dim0 : vector <4 x4 x6 xi1 >
114
+ // CHECK: vector.create_mask %[[DIM0]] : vector<6xi1>
115
+ // CHECK-NOT: vector.extract
116
+ %extract = vector.extract %mask [2 , %index ] : vector <6 xi1 > from vector <4 x4 x6 xi1 >
117
+ return %extract : vector <6 xi1 >
118
+ }
119
+
120
+ // -----
121
+
122
+ // CHECK-LABEL: extract_from_create_mask_dynamic_position_all_false
123
+ // CHECK-SAME: %[[DIM0:.*]]: index, %[[INDEX:.*]]: index
124
+ func.func @extract_from_create_mask_dynamic_position_all_false (%dim0: index , %index: index ) -> vector <6 xi1 > {
125
+ %c0 = arith.constant 0 : index
126
+ %c1 = arith.constant 1 : index
127
+ %mask = vector.create_mask %c1 , %c0 , %dim0 : vector <1 x4 x6 xi1 >
128
+ // CHECK: arith.constant dense<false> : vector<6xi1>
129
+ // CHECK-NOT: vector.extract
130
+ %extract = vector.extract %mask [0 , %index ] : vector <6 xi1 > from vector <1 x4 x6 xi1 >
131
+ return %extract : vector <6 xi1 >
132
+ }
133
+
134
+ // -----
135
+
136
+ // CHECK-LABEL: extract_from_create_mask_dynamic_position_unknown
137
+ // CHECK-SAME: %[[DIM0:.*]]: index, %[[INDEX:.*]]: index
138
+ func.func @extract_from_create_mask_dynamic_position_unknown (%dim0: index , %index: index ) -> vector <6 xi1 > {
139
+ %c2 = arith.constant 2 : index
140
+ %mask = vector.create_mask %c2 , %dim0 : vector <4 x6 xi1 >
141
+ // CHECK: %[[C2:.*]] = arith.constant 2 : index
142
+ // CHECK-NEXT: %[[MASK:.*]] = vector.create_mask %[[C2]], %[[DIM0]] : vector<4x6xi1>
143
+ // CHECK-NEXT: vector.extract %[[MASK]][%[[INDEX]]] : vector<6xi1> from vector<4x6xi1>
144
+ %extract = vector.extract %mask [%index ] : vector <6 xi1 > from vector <4 x6 xi1 >
145
+ return %extract : vector <6 xi1 >
146
+ }
147
+
148
+ // -----
149
+
150
+ // CHECK-LABEL: extract_from_create_mask_mixed_position_unknown
151
+ // CHECK-SAME: %[[DIM0:.*]]: index, %[[INDEX:.*]]: index
152
+ func.func @extract_from_create_mask_mixed_position_unknown (%dim0: index , %index0: index ) -> vector <4 xi1 > {
153
+ %c2 = arith.constant 2 : index
154
+ %mask = vector.create_mask %c2 , %c2 , %dim0 : vector <2 x4 x4 xi1 >
155
+ // CHECK: %[[C2:.*]] = arith.constant 2 : index
156
+ // CHECK-NEXT: %[[MASK:.*]] = vector.create_mask %[[C2]], %[[C2]], %[[DIM0]] : vector<2x4x4xi1>
157
+ // CHECK-NEXT: vector.extract %[[MASK]][1, %[[INDEX]]] : vector<4xi1> from vector<2x4x4xi1>
158
+ %extract = vector.extract %mask [1 , %index0 ] : vector <4 xi1 > from vector <2 x4 x4 xi1 >
159
+ return %extract : vector <4 xi1 >
160
+ }
161
+
162
+ // -----
163
+
164
+ // CHECK-LABEL: extract_from_non_constant_create_mask
165
+ // CHECK-SAME: %[[DIM0:.*]]: index
166
+ func.func @extract_from_non_constant_create_mask (%dim0: index ) -> vector <[2 ]xi1 > {
167
+ %mask = vector.create_mask %dim0 , %dim0 : vector <[2 ]x[2 ]xi1 >
168
+ // CHECK: %[[MASK:.*]] = vector.create_mask %[[DIM0]], %[[DIM0]] : vector<[2]x[2]xi1>
169
+ // CHECK-NEXT: vector.extract %[[MASK]][0] : vector<[2]xi1> from vector<[2]x[2]xi1>
170
+ %extract = vector.extract %mask [0 ] : vector <[2 ]xi1 > from vector <[2 ]x[2 ]xi1 >
171
+ return %extract : vector <[2 ]xi1 >
172
+ }
173
+
174
+ // -----
175
+
70
176
// CHECK-LABEL: constant_mask_transpose_to_transposed_constant_mask
71
177
func.func @constant_mask_transpose_to_transposed_constant_mask () -> (vector <2 x3 x4 xi1 >, vector <4 x2 x3 xi1 >) {
72
178
// CHECK: vector.constant_mask [1, 2, 3] : vector<2x3x4xi1>
0 commit comments