@@ -133,6 +133,25 @@ body: |
133133 PseudoRET implicit $lr, implicit $x0
134134 ...
135135
136+ ---
137+ name : extract_vector_1024_to_512
138+ legalized : false
139+ body : |
140+ bb.1.entry:
141+ liveins: $y2
142+ ; CHECK-LABEL: name: extract_vector_1024_to_512
143+ ; CHECK: liveins: $y2
144+ ; CHECK-NEXT: {{ $}}
145+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
146+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
147+ ; CHECK-NEXT: $x0 = COPY [[UV]](<16 x s32>)
148+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
149+ %1:_(<32 x s32>) = COPY $y2
150+ %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)
151+ $x0 = COPY %0:_(<16 x s32>)
152+ PseudoRET implicit $lr, implicit $x0
153+ ...
154+
136155---
137156name : concat_vector_32_512_first_start
138157legalized : false
@@ -154,6 +173,26 @@ body: |
154173 PseudoRET implicit $lr, implicit $x0
155174 ...
156175
176+ ---
177+ name : extract_vector_1024_to_256
178+ legalized : false
179+ body : |
180+ bb.1.entry:
181+ liveins: $y2
182+ ; CHECK-LABEL: name: extract_vector_1024_to_256
183+ ; CHECK: liveins: $y2
184+ ; CHECK-NEXT: {{ $}}
185+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
186+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
187+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<8 x s32>), [[UV3:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[UV]](<16 x s32>)
188+ ; CHECK-NEXT: $wl0 = COPY [[UV2]](<8 x s32>)
189+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit $x0
190+ %1:_(<32 x s32>) = COPY $y2
191+ %0:_(<8 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3, 4, 5, 6, 7)
192+ $wl0 = COPY %0:_(<8 x s32>)
193+ PseudoRET implicit $lr, implicit $x0
194+ ...
195+
157196---
158197name : concat_vector_32_512_first_end
159198legalized : false
@@ -427,4 +466,116 @@ body: |
427466 %0:_(<16 x s32>) = G_SHUFFLE_VECTOR %1:_(<8 x s32>), %2:_, shufflemask(8, 9, -1, 11, 12, 13, -1, 15, 0, 1, -1, 3, 4, 5, -1, 7)
428467 $x0 = COPY %0:_(<16 x s32>)
429468 PseudoRET implicit $lr, implicit $x0
430- ...
469+ ...
470+ name : extract_vector_1024_to_128
471+ legalized : false
472+ body : |
473+ bb.1.entry:
474+ liveins: $y2
475+ ; CHECK-LABEL: name: extract_vector_1024_to_128
476+ ; CHECK: liveins: $y2
477+ ; CHECK-NEXT: {{ $}}
478+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
479+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
480+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<8 x s32>), [[UV3:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[UV]](<16 x s32>)
481+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_AIE_UNPAD_VECTOR [[UV2]](<8 x s32>)
482+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[AIE_UNPAD_VECTOR]](<4 x s32>)
483+ %1:_(<32 x s32>) = COPY $y2
484+ %0:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3)
485+ PseudoRET implicit $lr, implicit %0
486+ ...
487+
488+ ---
489+ name : extract_vector_1024_to_32
490+ legalized : false
491+ body : |
492+ bb.1.entry:
493+ liveins: $y2
494+ ; CHECK-LABEL: name: extract_vector_1024_to_32
495+ ; CHECK: liveins: $y2
496+ ; CHECK-NEXT: {{ $}}
497+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
498+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
499+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
500+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
501+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
502+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
503+ ; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<2 x s8>), [[UV9:%[0-9]+]]:_(<2 x s8>) = G_UNMERGE_VALUES [[UV6]](<4 x s8>)
504+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV8]](<2 x s8>)
505+ %1:_(<128 x s8>) = COPY $y2
506+ %0:_(<2 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_, shufflemask(0, 1)
507+ PseudoRET implicit $lr, implicit %0
508+ ...
509+
510+ ---
511+ name : extract_vector_second_half_512_to_256
512+ legalized : false
513+ body : |
514+ bb.1.entry:
515+ liveins: $x0, $x1
516+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_256
517+ ; CHECK: liveins: $x0, $x1
518+ ; CHECK-NEXT: {{ $}}
519+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
520+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
521+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<8 x s32>)
522+ %1:_(<16 x s32>) = COPY $x0
523+ %2:_(<8 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(8, 9, 10, 11, 12, 13, 14, 15)
524+ PseudoRET implicit $lr, implicit %2
525+ ...
526+
527+ ---
528+ name : extract_vector_second_half_512_to_128
529+ legalized : false
530+ body : |
531+ bb.1.entry:
532+ liveins: $x0, $x1
533+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_128
534+ ; CHECK: liveins: $x0, $x1
535+ ; CHECK-NEXT: {{ $}}
536+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
537+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
538+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[UV]](<8 x s32>)
539+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV3]](<4 x s32>)
540+ %1:_(<16 x s32>) = COPY $x0
541+ %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(4, 5, 6, 7)
542+ PseudoRET implicit $lr, implicit %2
543+ ...
544+
545+ ---
546+ name : extract_vector_second_half_1024_to_512
547+ legalized : false
548+ body : |
549+ bb.1.entry:
550+ liveins: $y2, $y3
551+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_512
552+ ; CHECK: liveins: $y2, $y3
553+ ; CHECK-NEXT: {{ $}}
554+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
555+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
556+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<64 x s8>)
557+ %1:_(<128 x s8>) = COPY $y2
558+ %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)
559+ PseudoRET implicit $lr, implicit %2
560+ ...
561+
562+ ---
563+ name : extract_vector_second_half_1024_to_32
564+ legalized : false
565+ body : |
566+ bb.1.entry:
567+ liveins: $y2, $y3
568+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_32
569+ ; CHECK: liveins: $y2, $y3
570+ ; CHECK-NEXT: {{ $}}
571+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
572+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
573+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
574+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
575+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
576+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
577+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV7]](<4 x s8>)
578+ %1:_(<128 x s8>) = COPY $y2
579+ %2:_(<4 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_(<128 x s8>), shufflemask(4, 5, 6, 7)
580+ PseudoRET implicit $lr, implicit %2
581+ ...
0 commit comments