@@ -145,3 +145,46 @@ builtin.module attributes { transform.with_named_sequence } {
145
145
transform.yield
146
146
}
147
147
}
148
+
149
+ // -----
150
+
151
+ #layout = #iree_vector_ext.layout <<[VECTORY ], [16 ]>, <[BATCHY , VECTORX ], [2 , 8 ]>>
152
+
153
+ // Propagate and enforce through scf.for
154
+ builtin.module attributes { transform.with_named_sequence } {
155
+ func.func @scffor (%arr: memref <16 x16 xf16 >, %arr2: memref <16 xf16 >, %a: vector <16 xf16 >, %b: vector <16 xf16 >) -> vector <16 xf16 > {
156
+ %c0 = arith.constant 0 : index
157
+ %c1 = arith.constant 1 : index
158
+ %c1024 = arith.constant 1024 : index
159
+ %cst_0 = arith.constant 0.0 : f16
160
+ %cst0_1 = arith.constant dense <0.0 > : vector <16 xf16 >
161
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
162
+
163
+ %out = scf.for %iv = %c0 to %c1024 step %c1 iter_args (%arg1 = %cst0_1 ) -> (vector <16 xf16 >) {
164
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
165
+ %root = vector.transfer_read %arr [%c0 , %c0 ], %cst_0 {in_bounds = [true , true ], " __vector_layout_test_anchor_result_0" = #layout } : memref <16 x16 xf16 >, vector <16 x16 xf16 >
166
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>, <[ BATCHY, VECTORX], [2, 8]>>}}
167
+ %root2 = vector.transfer_read %arr2 [%c0 ], %cst_0 {in_bounds = [true ]} : memref <16 xf16 >, vector <16 xf16 >
168
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
169
+ %root_transpose = vector.transpose %root , [1 , 0 ] : vector <16 x16 xf16 > to vector <16 x16 xf16 >
170
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ BATCHY, VECTORX], [2, 8]>, <[ VECTORY], [16]>>}}
171
+ %root_red = vector.multi_reduction <add >, %root_transpose , %arg1 [0 ] : vector <16 x16 xf16 > to vector <16 xf16 >
172
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
173
+ %c = arith.mulf %root_red , %b : vector <16 xf16 >
174
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
175
+ %d = arith.addf %c , %a : vector <16 xf16 >
176
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
177
+ %e = arith.divf %d , %root2 : vector <16 xf16 >
178
+ // expected-remark @above {{layout of result #0 is #iree_vector_ext.layout<<[ VECTORY], [16]>>}}
179
+ scf.yield %e : vector <16 xf16 >
180
+ }
181
+
182
+ func.return %out : vector <16 xf16 >
183
+ }
184
+
185
+ transform.named_sequence @__transform_main (%variant_op: !transform.any_op {transform.readonly }) {
186
+ %top_level_func = transform.structured.match ops {[" func.func" ]} in %variant_op : (!transform.any_op ) -> !transform.any_op
187
+ transform.iree.test_vector_layout_analysis %top_level_func : !transform.any_op
188
+ transform.yield
189
+ }
190
+ }
0 commit comments