@@ -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
@@ -428,3 +467,117 @@ body: |
428467 $x0 = COPY %0:_(<16 x s32>)
429468 PseudoRET implicit $lr, implicit $x0
430469 ...
470+
471+ ---
472+ name : extract_vector_1024_to_128
473+ legalized : false
474+ body : |
475+ bb.1.entry:
476+ liveins: $y2
477+ ; CHECK-LABEL: name: extract_vector_1024_to_128
478+ ; CHECK: liveins: $y2
479+ ; CHECK-NEXT: {{ $}}
480+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<32 x s32>) = COPY $y2
481+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<16 x s32>), [[UV1:%[0-9]+]]:_(<16 x s32>) = G_UNMERGE_VALUES [[COPY]](<32 x s32>)
482+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<8 x s32>), [[UV3:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[UV]](<16 x s32>)
483+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_AIE_UNPAD_VECTOR [[UV2]](<8 x s32>)
484+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[AIE_UNPAD_VECTOR]](<4 x s32>)
485+ %1:_(<32 x s32>) = COPY $y2
486+ %0:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<32 x s32>), %1:_, shufflemask(0, 1, 2, 3)
487+ PseudoRET implicit $lr, implicit %0
488+ ...
489+
490+ ---
491+ name : extract_vector_1024_to_32
492+ legalized : false
493+ body : |
494+ bb.1.entry:
495+ liveins: $y2
496+ ; CHECK-LABEL: name: extract_vector_1024_to_32
497+ ; CHECK: liveins: $y2
498+ ; CHECK-NEXT: {{ $}}
499+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
500+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
501+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
502+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
503+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
504+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
505+ ; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<2 x s8>), [[UV9:%[0-9]+]]:_(<2 x s8>) = G_UNMERGE_VALUES [[UV6]](<4 x s8>)
506+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV8]](<2 x s8>)
507+ %1:_(<128 x s8>) = COPY $y2
508+ %0:_(<2 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_, shufflemask(0, 1)
509+ PseudoRET implicit $lr, implicit %0
510+ ...
511+
512+ ---
513+ name : extract_vector_second_half_512_to_256
514+ legalized : false
515+ body : |
516+ bb.1.entry:
517+ liveins: $x0, $x1
518+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_256
519+ ; CHECK: liveins: $x0, $x1
520+ ; CHECK-NEXT: {{ $}}
521+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
522+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
523+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<8 x s32>)
524+ %1:_(<16 x s32>) = COPY $x0
525+ %2:_(<8 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(8, 9, 10, 11, 12, 13, 14, 15)
526+ PseudoRET implicit $lr, implicit %2
527+ ...
528+
529+ ---
530+ name : extract_vector_second_half_512_to_128
531+ legalized : false
532+ body : |
533+ bb.1.entry:
534+ liveins: $x0, $x1
535+ ; CHECK-LABEL: name: extract_vector_second_half_512_to_128
536+ ; CHECK: liveins: $x0, $x1
537+ ; CHECK-NEXT: {{ $}}
538+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $x0
539+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s32>), [[UV1:%[0-9]+]]:_(<8 x s32>) = G_UNMERGE_VALUES [[COPY]](<16 x s32>)
540+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[UV]](<8 x s32>)
541+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV3]](<4 x s32>)
542+ %1:_(<16 x s32>) = COPY $x0
543+ %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %1:_(<16 x s32>), %1:_(<16 x s32>), shufflemask(4, 5, 6, 7)
544+ PseudoRET implicit $lr, implicit %2
545+ ...
546+
547+ ---
548+ name : extract_vector_second_half_1024_to_512
549+ legalized : false
550+ body : |
551+ bb.1.entry:
552+ liveins: $y2, $y3
553+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_512
554+ ; CHECK: liveins: $y2, $y3
555+ ; CHECK-NEXT: {{ $}}
556+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
557+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
558+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV1]](<64 x s8>)
559+ %1:_(<128 x s8>) = COPY $y2
560+ %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)
561+ PseudoRET implicit $lr, implicit %2
562+ ...
563+
564+ ---
565+ name : extract_vector_second_half_1024_to_32
566+ legalized : false
567+ body : |
568+ bb.1.entry:
569+ liveins: $y2, $y3
570+ ; CHECK-LABEL: name: extract_vector_second_half_1024_to_32
571+ ; CHECK: liveins: $y2, $y3
572+ ; CHECK-NEXT: {{ $}}
573+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<128 x s8>) = COPY $y2
574+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<64 x s8>), [[UV1:%[0-9]+]]:_(<64 x s8>) = G_UNMERGE_VALUES [[COPY]](<128 x s8>)
575+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[UV]](<64 x s8>)
576+ ; CHECK-NEXT: [[AIE_UNPAD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_AIE_UNPAD_VECTOR [[UV2]](<32 x s8>)
577+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<8 x s8>), [[UV5:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[AIE_UNPAD_VECTOR]](<16 x s8>)
578+ ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s8>), [[UV7:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[UV4]](<8 x s8>)
579+ ; CHECK-NEXT: PseudoRET implicit $lr, implicit [[UV7]](<4 x s8>)
580+ %1:_(<128 x s8>) = COPY $y2
581+ %2:_(<4 x s8>) = G_SHUFFLE_VECTOR %1:_(<128 x s8>), %1:_(<128 x s8>), shufflemask(4, 5, 6, 7)
582+ PseudoRET implicit $lr, implicit %2
583+ ...
0 commit comments