xref: /llvm-project/mlir/test/Dialect/ArmSME/basic-tile-allocation.mlir (revision 041baf2f60ac3e107399641aea04c77019e7eab8)
1// RUN: mlir-opt %s -test-arm-sme-tile-allocation -split-input-file | FileCheck %s
2
3// -----
4
5// Note: Tile IDs >= 16 are in-memory tile IDs (i.e. spills).
6
7// CHECK-LABEL: mixed_tiles
8func.func @mixed_tiles() {
9  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q
10  // CHECK-NEXT: tile_id = 0
11  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>
12  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q
13  // CHECK-NEXT: tile_id = 1
14  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>
15  // ZA3.D ZA3.Q, ZA11.Q
16  // CHECK-NEXT: tile_id = 3
17  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>
18  // ZA7.Q
19  // CHECK-NEXT: tile_id = 7
20  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>
21  // ZA15.Q is still free.
22  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()
23  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()
24  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()
25  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()
26  return
27}
28
29// -----
30
31// CHECK-LABEL: za_b
32func.func @za_b() {
33  // CHECK-NEXT: tile_id = 0
34  %za0_b = arm_sme.get_tile : vector<[16]x[16]xi8>
35  // Next tile is in-memory:
36  // CHECK-NEXT: tile_id = 16
37  %next_tile = arm_sme.get_tile : vector<[16]x[16]xi8>
38  "test.some_use"(%za0_b) : (vector<[16]x[16]xi8>) -> ()
39  "test.some_use"(%next_tile) : (vector<[16]x[16]xi8>) -> ()
40  return
41}
42
43// -----
44
45// CHECK-LABEL: za_b_overlapping_za_q
46func.func @za_b_overlapping_za_q() {
47  // CHECK-NEXT: tile_id = 0
48  %za0_b = arm_sme.get_tile : vector<[16]x[16]xi8>
49  // Next tile is in-memory:
50  // CHECK-NEXT: tile_id = 16
51  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>
52  "test.some_use"(%za0_b) : (vector<[16]x[16]xi8>) -> ()
53  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()
54  return
55}
56
57// -----
58
59// CHECK-LABEL: za_h
60func.func @za_h() {
61  // CHECK-NEXT: tile_id = 0
62  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>
63  // CHECK-NEXT: tile_id = 1
64  %za1_h = arm_sme.get_tile : vector<[8]x[8]xi16>
65  // Next tile is in-memory:
66  // CHECK-NEXT: tile_id = 16
67  %next_tile = arm_sme.get_tile : vector<[8]x[8]xi16>
68  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()
69  "test.some_use"(%za1_h) : (vector<[8]x[8]xi16>) -> ()
70  "test.some_use"(%next_tile) : (vector<[8]x[8]xi16>) -> ()
71  return
72}
73
74// -----
75
76// CHECK-LABEL: za_h_overlapping_za_s
77func.func @za_h_overlapping_za_s() {
78  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q
79  // CHECK-NEXT: tile_id = 0
80  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>
81  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q
82  // CHECK-NEXT: tile_id = 1
83  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>
84  // ZA3.Q, ZA7.Q, ZA11.Q, ZA15.Q
85  // CHECK-NEXT: tile_id = 3
86  %za3_s = arm_sme.get_tile : vector<[4]x[4]xi32>
87  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()
88  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()
89  "test.some_use"(%za3_s) : (vector<[4]x[4]xi32>) -> ()
90  return
91}
92
93// -----
94
95// CHECK-LABEL: za_h_overlapping_za_d
96func.func @za_h_overlapping_za_d() {
97  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q
98  // CHECK-NEXT: tile_id = 0
99  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>
100  // ZA1.Q, ZA9.Q
101  // CHECK-NEXT: tile_id = 1
102  %za1_d = arm_sme.get_tile : vector<[2]x[2]xi64>
103  // ZA3.Q, ZA11.Q
104  // CHECK-NEXT: tile_id = 3
105  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>
106  // ZA5.Q, ZA13.Q
107  // CHECK-NEXT: tile_id = 5
108  %za5_d = arm_sme.get_tile : vector<[2]x[2]xi64>
109  // ZA7.Q, ZA15.Q
110  // CHECK-NEXT: tile_id = 7
111  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>
112  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()
113  "test.some_use"(%za1_d) : (vector<[2]x[2]xi64>) -> ()
114  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()
115  "test.some_use"(%za5_d) : (vector<[2]x[2]xi64>) -> ()
116  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()
117  return
118}
119
120// -----
121
122// CHECK-LABEL: za_h_overlapping_za_q
123func.func @za_h_overlapping_za_q() {
124  // CHECK-NEXT: tile_id = 0
125  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>
126  // CHECK-NEXT: tile_id = 1
127  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>
128  // CHECK-NEXT: tile_id = 3
129  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>
130  // CHECK-NEXT: tile_id = 5
131  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>
132  // CHECK-NEXT: tile_id = 7
133  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>
134  // CHECK-NEXT: tile_id = 9
135  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>
136  // CHECK-NEXT: tile_id = 11
137  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>
138  // CHECK-NEXT: tile_id = 13
139  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>
140  // CHECK-NEXT: tile_id = 15
141  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>
142  // Next tile is in-memory:
143  // CHECK-NEXT: tile_id = 16
144  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>
145  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()
146  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()
147  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()
148  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()
149  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()
150  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()
151  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()
152  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()
153  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()
154  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()
155  return
156}
157
158// -----
159
160// CHECK-LABEL: za_s
161func.func @za_s() {
162  // CHECK-NEXT: tile_id = 0
163  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>
164  // CHECK-NEXT: tile_id = 1
165  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>
166  // CHECK-NEXT: tile_id = 2
167  %za2_s = arm_sme.get_tile : vector<[4]x[4]xi32>
168  // CHECK-NEXT: tile_id = 3
169  %za3_s = arm_sme.get_tile : vector<[4]x[4]xi32>
170  // Next tile is in-memory:
171  // CHECK-NEXT: tile_id = 16
172  %next_tile = arm_sme.get_tile : vector<[4]x[4]xi32>
173  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()
174  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()
175  "test.some_use"(%za2_s) : (vector<[4]x[4]xi32>) -> ()
176  "test.some_use"(%za3_s) : (vector<[4]x[4]xi32>) -> ()
177  "test.some_use"(%next_tile) : (vector<[4]x[4]xi32>) -> ()
178  return
179}
180
181// -----
182
183// CHECK-LABEL: za_s_overlapping_za_d
184func.func @za_s_overlapping_za_d() {
185  // ZA0.Q, ZA4.Q, ZA8.Q, ZA12.Q
186  // CHECK-NEXT: tile_id = 0
187  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>
188  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q
189  // CHECK-NEXT: tile_id = 1
190  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>
191  // ZA2.Q, ZA6.Q, ZA10.Q, ZA14.Q
192  // CHECK-NEXT: tile_id = 2
193  %za2_s = arm_sme.get_tile : vector<[4]x[4]xi32>
194  // ZA3.Q, ZA11.Q
195  // CHECK-NEXT: tile_id = 3
196  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>
197  // ZA7.Q, ZA15.Q
198  // CHECK-NEXT: tile_id = 7
199  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>
200  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()
201  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()
202  "test.some_use"(%za2_s) : (vector<[4]x[4]xi32>) -> ()
203  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()
204  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()
205  return
206}
207
208// -----
209
210// CHECK-LABEL: za_s_overlapping_za_q
211func.func @za_s_overlapping_za_q() {
212  // CHECK-NEXT: tile_id = 0
213  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>
214  // CHECK-NEXT: tile_id = 1
215  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>
216  // CHECK-NEXT: tile_id = 2
217  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>
218  // CHECK-NEXT: tile_id = 3
219  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>
220  // CHECK-NEXT: tile_id = 5
221  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>
222  // CHECK-NEXT: tile_id = 6
223  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>
224  // CHECK-NEXT: tile_id = 7
225  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>
226  // CHECK-NEXT: tile_id = 9
227  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>
228  // CHECK-NEXT: tile_id = 10
229  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>
230  // CHECK-NEXT: tile_id = 11
231  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>
232  // CHECK-NEXT: tile_id = 13
233  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>
234  // CHECK-NEXT: tile_id = 14
235  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>
236  // CHECK-NEXT: tile_id = 15
237  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>
238  // Next tile is in-memory:
239  // CHECK-NEXT: tile_id = 16
240  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>
241  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()
242  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()
243  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()
244  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()
245  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()
246  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()
247  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()
248  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()
249  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()
250  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()
251  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()
252  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()
253  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()
254  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()
255  return
256}
257
258// -----
259
260// CHECK-LABEL: za_d
261func.func @za_d() {
262  // CHECK-NEXT: tile_id = 0
263  %za0_d = arm_sme.get_tile : vector<[2]x[2]xi64>
264  // CHECK-NEXT: tile_id = 1
265  %za1_d = arm_sme.get_tile : vector<[2]x[2]xi64>
266  // CHECK-NEXT: tile_id = 2
267  %za2_d = arm_sme.get_tile : vector<[2]x[2]xi64>
268  // CHECK-NEXT: tile_id = 3
269  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>
270  // CHECK-NEXT: tile_id = 4
271  %za4_d = arm_sme.get_tile : vector<[2]x[2]xi64>
272  // CHECK-NEXT: tile_id = 5
273  %za5_d = arm_sme.get_tile : vector<[2]x[2]xi64>
274  // CHECK-NEXT: tile_id = 6
275  %za6_d = arm_sme.get_tile : vector<[2]x[2]xi64>
276  // CHECK-NEXT: tile_id = 7
277  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>
278  // Next tile is in-memory:
279  // CHECK-NEXT: tile_id = 16
280  %next_tile = arm_sme.get_tile : vector<[2]x[2]xi64>
281  "test.some_use"(%za0_d) : (vector<[2]x[2]xi64>) -> ()
282  "test.some_use"(%za1_d) : (vector<[2]x[2]xi64>) -> ()
283  "test.some_use"(%za2_d) : (vector<[2]x[2]xi64>) -> ()
284  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()
285  "test.some_use"(%za4_d) : (vector<[2]x[2]xi64>) -> ()
286  "test.some_use"(%za5_d) : (vector<[2]x[2]xi64>) -> ()
287  "test.some_use"(%za6_d) : (vector<[2]x[2]xi64>) -> ()
288  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()
289  "test.some_use"(%next_tile) : (vector<[2]x[2]xi64>) -> ()
290  return
291}
292
293// -----
294
295// CHECK-LABEL: za_d_overlapping_za_q
296func.func @za_d_overlapping_za_q() {
297  // CHECK-NEXT: tile_id = 0
298  %za0_d = arm_sme.get_tile : vector<[2]x[2]xi64>
299  // CHECK-NEXT: tile_id = 1
300  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>
301  // CHECK-NEXT: tile_id = 2
302  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>
303  // CHECK-NEXT: tile_id = 3
304  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>
305  // CHECK-NEXT: tile_id = 4
306  %za4_q = arm_sme.get_tile : vector<[1]x[1]xi128>
307  // CHECK-NEXT: tile_id = 5
308  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>
309  // CHECK-NEXT: tile_id = 6
310  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>
311  // CHECK-NEXT: tile_id = 7
312  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>
313  // CHECK-NEXT: tile_id = 9
314  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>
315  // CHECK-NEXT: tile_id = 10
316  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>
317  // CHECK-NEXT: tile_id = 11
318  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>
319  // CHECK-NEXT: tile_id = 12
320  %za12_q = arm_sme.get_tile : vector<[1]x[1]xi128>
321  // CHECK-NEXT: tile_id = 13
322  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>
323  // CHECK-NEXT: tile_id = 14
324  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>
325  // CHECK-NEXT: tile_id = 15
326  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>
327  // Next tile is in-memory:
328  // CHECK-NEXT: tile_id = 16
329  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>
330  "test.some_use"(%za0_d) : (vector<[2]x[2]xi64>) -> ()
331  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()
332  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()
333  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()
334  "test.some_use"(%za4_q) : (vector<[1]x[1]xi128>) -> ()
335  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()
336  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()
337  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()
338  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()
339  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()
340  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()
341  "test.some_use"(%za12_q) : (vector<[1]x[1]xi128>) -> ()
342  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()
343  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()
344  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()
345  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()
346  return
347}
348
349// -----
350
351// CHECK-LABEL: za_q
352func.func @za_q() {
353  // CHECK-NEXT: tile_id = 0
354  %za0_q = arm_sme.get_tile : vector<[1]x[1]xi128>
355  // CHECK-NEXT: tile_id = 1
356  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>
357  // CHECK-NEXT: tile_id = 2
358  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>
359  // CHECK-NEXT: tile_id = 3
360  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>
361  // CHECK-NEXT: tile_id = 4
362  %za4_q = arm_sme.get_tile : vector<[1]x[1]xi128>
363  // CHECK-NEXT: tile_id = 5
364  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>
365  // CHECK-NEXT: tile_id = 6
366  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>
367  // CHECK-NEXT: tile_id = 7
368  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>
369  // CHECK-NEXT: tile_id = 8
370  %za8_q = arm_sme.get_tile : vector<[1]x[1]xi128>
371  // CHECK-NEXT: tile_id = 9
372  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>
373  // CHECK-NEXT: tile_id = 10
374  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>
375  // CHECK-NEXT: tile_id = 11
376  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>
377  // CHECK-NEXT: tile_id = 12
378  %za12_q = arm_sme.get_tile : vector<[1]x[1]xi128>
379  // CHECK-NEXT: tile_id = 13
380  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>
381  // CHECK-NEXT: tile_id = 14
382  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>
383  // CHECK-NEXT: tile_id = 15
384  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>
385  // Next tile is in-memory:
386  // CHECK-NEXT: tile_id = 16
387  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>
388  "test.some_use"(%za0_q) : (vector<[1]x[1]xi128>) -> ()
389  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()
390  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()
391  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()
392  "test.some_use"(%za4_q) : (vector<[1]x[1]xi128>) -> ()
393  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()
394  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()
395  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()
396  "test.some_use"(%za8_q) : (vector<[1]x[1]xi128>) -> ()
397  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()
398  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()
399  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()
400  "test.some_use"(%za12_q) : (vector<[1]x[1]xi128>) -> ()
401  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()
402  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()
403  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()
404  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()
405  return
406}
407