@@ -134,6 +134,25 @@ body: |
134134 PseudoRET implicit $lr, implicit $x0
135135 ...
136136
137+ ---
138+ name : extract_vector_1024_to_512
139+ legalized : false
140+ body : |
141+ bb.1.entry:
142+ liveins: $y2
143+ ; CHECK-LABEL: name: extract_vector_1024_to_512
144+ ; CHECK: liveins: $y2
145+ ; CHECK-NEXT: {{ $}}
146+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
147+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
148+ ; CHECK-NEXT: $x0 = COPY [[UV]](<16 x s32>)
149+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
150+ %1:_(<32 x s32>) = COPY $y2
151+ %0:_(<16 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
152+ $x0 = COPY %0:_(<16 x s32>)
153+ PseudoRET implicit $lr, implicit $x0
154+ ...
155+
137156---
138157name : concat_vector_32_512_first_start
139158legalized : false
@@ -155,6 +174,26 @@ body: |
155174 PseudoRET implicit $lr, implicit $x0
156175 ...
157176
177+ ---
178+ name : extract_vector_1024_to_256
179+ legalized : false
180+ body : |
181+ bb.1.entry:
182+ liveins: $y2
183+ ; CHECK-LABEL: name: extract_vector_1024_to_256
184+ ; CHECK: liveins: $y2
185+ ; CHECK-NEXT: {{ $}}
186+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
187+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
188+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<8 x s32>), [[UV3:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[UV]](<16 x s32>)
189+ ; CHECK-NEXT: $wl0 = COPY [[UV2]](<8 x s32>)
190+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
191+ %1:_(<32 x s32>) = COPY $y2
192+ %0:_(<8 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3, 4, 5, 6, 7)
193+ $wl0 = COPY %0:_(<8 x s32>)
194+ PseudoRET implicit $lr, implicit $x0
195+ ...
196+
158197---
159198name : concat_vector_32_512_first_end
160199legalized : false
@@ -258,3 +297,117 @@ body: |
258297 %0:_(<16 x s32>) = G_SHUFFLE_VECTOR %1:_(<8 x s32>), %2:_, shufflemask(0, -1, 2, -1, 4, -1, -1, 7, 8, 9, -1, 11, 12, -1, 14, -1)
259298 $x0 = COPY %0:_(<16 x s32>)
260299 PseudoRET implicit $lr, implicit $x0
300+ ...
301+
302+ ---
303+ name : extract_vector_1024_to_128
304+ legalized : false
305+ body : |
306+ bb.1.entry:
307+ liveins: $y2
308+ ; CHECK-LABEL: name: extract_vector_1024_to_128
309+ ; CHECK: liveins: $y2
310+ ; CHECK-NEXT: {{ $}}
311+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
312+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
313+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<8 x s32>), [[UV3:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[UV]](<16 x s32>)
314+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_AIE_UNPAD_VECTOR [[UV2]](<8 x s32>)
315+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[AIE_UNPAD_VECTOR]](<4 x s32>)
316+ %1:_(<32 x s32>) = COPY $y2
317+ %0:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3)
318+ PseudoRET implicit $lr, implicit %0
319+ ...
320+
321+ ---
322+ name : extract_vector_1024_to_32
323+ legalized : false
324+ body : |
325+ bb.1.entry:
326+ liveins: $y2
327+ ; CHECK-LABEL: name: extract_vector_1024_to_32
328+ ; CHECK: liveins: $y2
329+ ; CHECK-NEXT: {{ $}}
330+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
331+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
332+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
333+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
334+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
335+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
336+ ; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<2 x s8>), [[UV9:%[0-9]+]]:_(<2 x s8>) = G_UNMERGE_VALUES [[UV6]](<4 x s8>)
337+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV8]](<2 x s8>)
338+ %1:_(<128 x s8>) = COPY $y2
339+ %0:_(<2 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_, shufflemask(0, 1)
340+ PseudoRET implicit $lr, implicit %0
341+ ...
342+
343+ ---
344+ name : extract_vector_second_half_512_to_256
345+ legalized : false
346+ body : |
347+ bb.1.entry:
348+ liveins: $x0, $x1
349+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_256
350+ ; CHECK: liveins: $x0, $x1
351+ ; CHECK-NEXT: {{ $}}
352+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
353+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
354+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<8 x s32>)
355+ %1:_(<16 x s32>) = COPY $x0
356+ %2:_(<8 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(8, 9, 10, 11, 12, 13, 14, 15)
357+ PseudoRET implicit $lr, implicit %2
358+ ...
359+
360+ ---
361+ name : extract_vector_second_half_512_to_128
362+ legalized : false
363+ body : |
364+ bb.1.entry:
365+ liveins: $x0, $x1
366+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_128
367+ ; CHECK: liveins: $x0, $x1
368+ ; CHECK-NEXT: {{ $}}
369+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
370+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
371+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[UV]](<8 x s32>)
372+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV3]](<4 x s32>)
373+ %1:_(<16 x s32>) = COPY $x0
374+ %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(4, 5, 6, 7)
375+ PseudoRET implicit $lr, implicit %2
376+ ...
377+
378+ ---
379+ name : extract_vector_second_half_1024_to_512
380+ legalized : false
381+ body : |
382+ bb.1.entry:
383+ liveins: $y2, $y3
384+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_512
385+ ; CHECK: liveins: $y2, $y3
386+ ; CHECK-NEXT: {{ $}}
387+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
388+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
389+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<64 x s8>)
390+ %1:_(<128 x s8>) = COPY $y2
391+ %2:_(<64 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_(<128 x s8>), shufflemask(64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127)
392+ PseudoRET implicit $lr, implicit %2
393+ ...
394+
395+ ---
396+ name : extract_vector_second_half_1024_to_32
397+ legalized : false
398+ body : |
399+ bb.1.entry:
400+ liveins: $y2, $y3
401+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_32
402+ ; CHECK: liveins: $y2, $y3
403+ ; CHECK-NEXT: {{ $}}
404+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
405+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
406+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
407+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
408+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
409+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
410+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV7]](<4 x s8>)
411+ %1:_(<128 x s8>) = COPY $y2
412+ %2:_(<4 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_(<128 x s8>), shufflemask(4, 5, 6, 7)
413+ PseudoRET implicit $lr, implicit %2
0 commit comments