@@ -37,6 +37,71 @@ builtin.module attributes { transform.with_named_sequence } {
3737
3838// -----
3939
40+ #layout = #iree_vector_ext.nested_layout <
41+ subgroup_tile = [1 , 1 ],
42+ batch_tile = [1 , 1 ],
43+ outer_tile = [1 , 1 ],
44+ thread_tile = [1 , 1 ],
45+ element_tile = [16 , 32 ],
46+
47+ subgroup_strides = [0 , 0 ],
48+ thread_strides = [0 , 0 ]
49+ >
50+
51+ builtin.module attributes { transform.with_named_sequence } {
52+ func.func @transfer_read_mask (%arr: memref <16 x32 xf16 >, %a: vector <16 x32 xf16 >, %b: vector <16 x32 xf16 >, %cond: i1 ) -> vector <16 x32 xf16 > {
53+ %c0 = arith.constant 0 : index
54+ %c12 = arith.constant 12 : index
55+ %mask = vector.create_mask %c12 : vector <16 xi1 >
56+ // expected-remark @above {{element_tile = [16]}}
57+ %cst_0 = arith.constant 0.0 : f16
58+ %root = vector.transfer_read %arr [%c0 , %c0 ], %cst_0 , %mask {permutation_map = affine_map <(d0 , d1 ) -> (d1 , 0 )>, in_bounds = [true , true ]} : memref <16 x32 xf16 >, vector <16 x32 xf16 >
59+ // expected-remark @above {{element_tile = [16, 32]}}
60+ %rootl = iree_vector_ext.to_layout %root to layout (#layout ) : vector <16 x32 xf16 >
61+ func.return %rootl : vector <16 x32 xf16 >
62+ }
63+
64+ transform.named_sequence @__transform_main (%variant_op: !transform.any_op {transform.readonly }) {
65+ %top_level_func = transform.structured.match ops {[" func.func" ]} in %variant_op : (!transform.any_op ) -> !transform.any_op
66+ transform.iree.test_vector_layout_analysis %top_level_func : !transform.any_op
67+ transform.yield
68+ }
69+ }
70+
71+ // -----
72+
73+ #layout = #iree_vector_ext.nested_layout <
74+ subgroup_tile = [1 , 1 , 1 ],
75+ batch_tile = [1 , 1 , 1 ],
76+ outer_tile = [1 , 1 , 1 ],
77+ thread_tile = [1 , 1 , 1 ],
78+ element_tile = [16 , 8 , 4 ],
79+
80+ subgroup_strides = [0 , 0 , 0 ],
81+ thread_strides = [0 , 0 , 0 ]
82+ >
83+
84+ builtin.module attributes { transform.with_named_sequence } {
85+ func.func @transfer_write_mask (%arr: memref <32 x32 x32 x32 xf16 >, %d: vector <16 x8 x4 xf16 >) {
86+ %c0 = arith.constant 0 : index
87+ %c12 = arith.constant 12 : index
88+ %mask = vector.create_mask %c12 , %c12 , %c12 : vector <8 x16 x4 xi1 >
89+ // expected-remark @above {{element_tile = [8, 16, 4]}}
90+ %dl = iree_vector_ext.to_layout %d to layout (#layout ) : vector <16 x8 x4 xf16 >
91+ vector.transfer_write %dl , %arr [%c0 , %c0 , %c0 , %c0 ], %mask {permutation_map = affine_map <(d0 , d1 , d2 , d3 ) -> (d1 , d0 , d3 )>, in_bounds = [true , true , true ]} : vector <16 x8 x4 xf16 >, memref <32 x32 x32 x32 xf16 >
92+ return
93+ }
94+
95+ transform.named_sequence @__transform_main (%variant_op: !transform.any_op {transform.readonly }) {
96+ %top_level_func = transform.structured.match ops {[" func.func" ]} in %variant_op : (!transform.any_op ) -> !transform.any_op
97+ transform.iree.test_vector_layout_analysis %top_level_func : !transform.any_op
98+ transform.yield
99+ }
100+ }
101+
102+ // -----
103+
104+
40105#layout = #iree_vector_ext.nested_layout <
41106 subgroup_tile = [1 , 1 ],
42107 batch_tile = [1 , 1 ],
@@ -759,3 +824,60 @@ builtin.module attributes { transform.with_named_sequence } {
759824 transform.yield
760825 }
761826}
827+
828+ // -----
829+
830+ #layout_1d = #iree_vector_ext.nested_layout <
831+ subgroup_tile = [4 ],
832+ batch_tile = [4 ],
833+ outer_tile = [1 ],
834+ thread_tile = [1 ],
835+ element_tile = [1 ],
836+
837+ subgroup_strides = [1 ],
838+ thread_strides = [0 ]
839+ >
840+
841+ #layout = #iree_vector_ext.nested_layout <
842+ subgroup_tile = [4 , 1 ],
843+ batch_tile = [4 , 1 ],
844+ outer_tile = [1 , 1 ],
845+ thread_tile = [1 , 1 ],
846+ element_tile = [1 , 8 ],
847+
848+ subgroup_strides = [1 , 0 ],
849+ thread_strides = [0 , 0 ]
850+ >
851+
852+ builtin.module attributes { transform.with_named_sequence } {
853+ func.func @paged_transfer_gather (%indices: vector <16 xindex >,
854+ %source: memref <4096 x512 x8 xf16 >) -> vector <16 x8 xf16 > {
855+
856+ %cst0 = arith.constant 0.0 : f16
857+ %c0 = arith.constant 0 : index
858+ %c1 = arith.constant dense <1 > : vector <16 xindex >
859+ // expected-remark @above {{element_tile = [1]}}
860+ %c7 = arith.constant 7 : index
861+ %dim = memref.dim %source , %c0 : memref <4096 x512 x8 xf16 >
862+ %mask = vector.create_mask %c7 , %c7 : vector <16 x8 xi1 >
863+ // expected-remark @above {{element_tile = [1, 8]}}
864+ %indices1 = arith.addi %indices , %c1 : vector <16 xindex >
865+ // expected-remark @above {{element_tile = [1]}}
866+ %out = iree_vector_ext.transfer_gather %source [%c0 , %c0 , %c0 ]
867+ // expected-remark @above {{element_tile = [1, 8]}}
868+ [None , %indices1: vector <16 xindex >, None ], %cst0 , %mask { index ed_maps = [
869+ affine_map <(d0 , d1 , d2 ) -> (d1 )>],
870+ permutation_map = affine_map <(d0 , d1 , d2 ) -> (d1 , d2 )>,
871+ in_bounds = [true , true ] }
872+ : memref <4096 x512 x8 xf16 >, vector <16 x8 xf16 >
873+ %l_out = iree_vector_ext.to_layout %out to layout (#layout ) : vector <16 x8 xf16 >
874+
875+ return %l_out : vector <16 x8 xf16 >
876+ }
877+
878+ transform.named_sequence @__transform_main (%variant_op: !transform.any_op {transform.readonly }) {
879+ %top_level_func = transform.structured.match ops {[" func.func" ]} in %variant_op : (!transform.any_op ) -> !transform.any_op
880+ transform.iree.test_vector_layout_analysis %top_level_func : !transform.any_op
881+ transform.yield
882+ }
883+ }
0 commit comments