@@ -135,3 +135,68 @@ define <2 x ptr> @test_v2p0(<2 x ptr> %a, <2 x ptr> %b) {
135135 %s = shufflevector <2 x ptr > %a , <2 x ptr > %b , <2 x i32 > <i32 3 , i32 0 >
136136 ret <2 x ptr > %s
137137}
138+
139+ define <16 x i8 > @reverse_vector_s8x16b (<16 x i8 > noundef %x ) {
140+ ; CHECK-SD-LABEL: reverse_vector_s8x16b:
141+ ; CHECK-SD: // %bb.0: // %entry
142+ ; CHECK-SD-NEXT: rev64 v1.16b, v0.16b
143+ ; CHECK-SD-NEXT: ext v0.16b, v1.16b, v1.16b, #8
144+ ; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
145+ ; CHECK-SD-NEXT: ret
146+ ;
147+ ; CHECK-GI-LABEL: reverse_vector_s8x16b:
148+ ; CHECK-GI: // %bb.0: // %entry
149+ ; CHECK-GI-NEXT: rev64 v1.16b, v0.16b
150+ ; CHECK-GI-NEXT: mov d0, v1.d[1]
151+ ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
152+ ; CHECK-GI-NEXT: ret
153+ entry:
154+ %shuffle.i = shufflevector <16 x i8 > %x , <16 x i8 > poison, <16 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 , i32 15 , i32 14 , i32 13 , i32 12 , i32 11 , i32 10 , i32 9 , i32 8 >
155+ %shuffle.i6 = shufflevector <16 x i8 > %shuffle.i , <16 x i8 > poison, <8 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
156+ %shuffle.i7 = shufflevector <16 x i8 > %shuffle.i , <16 x i8 > poison, <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
157+ %shuffle.i5 = shufflevector <8 x i8 > %shuffle.i6 , <8 x i8 > %shuffle.i7 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
158+ ret <16 x i8 > %shuffle.i5
159+ }
160+
161+ define <8 x i16 > @reverse_vector_s16x8b (<8 x i16 > noundef %x ) {
162+ ; CHECK-SD-LABEL: reverse_vector_s16x8b:
163+ ; CHECK-SD: // %bb.0: // %entry
164+ ; CHECK-SD-NEXT: rev64 v1.8h, v0.8h
165+ ; CHECK-SD-NEXT: ext v0.16b, v1.16b, v1.16b, #8
166+ ; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
167+ ; CHECK-SD-NEXT: ret
168+ ;
169+ ; CHECK-GI-LABEL: reverse_vector_s16x8b:
170+ ; CHECK-GI: // %bb.0: // %entry
171+ ; CHECK-GI-NEXT: rev64 v1.8h, v0.8h
172+ ; CHECK-GI-NEXT: mov d0, v1.d[1]
173+ ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
174+ ; CHECK-GI-NEXT: ret
175+ entry:
176+ %shuffle.i = shufflevector <8 x i16 > %x , <8 x i16 > poison, <8 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 , i32 7 , i32 6 , i32 5 , i32 4 >
177+ %shuffle.i6 = shufflevector <8 x i16 > %shuffle.i , <8 x i16 > poison, <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
178+ %shuffle.i7 = shufflevector <8 x i16 > %shuffle.i , <8 x i16 > poison, <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
179+ %shuffle.i5 = shufflevector <4 x i16 > %shuffle.i6 , <4 x i16 > %shuffle.i7 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
180+ ret <8 x i16 > %shuffle.i5
181+ }
182+
183+ define <4 x i32 > @reverse_vector_s32x4b (<4 x i32 > noundef %x ) {
184+ ; CHECK-SD-LABEL: reverse_vector_s32x4b:
185+ ; CHECK-SD: // %bb.0: // %entry
186+ ; CHECK-SD-NEXT: rev64 v0.4s, v0.4s
187+ ; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
188+ ; CHECK-SD-NEXT: ret
189+ ;
190+ ; CHECK-GI-LABEL: reverse_vector_s32x4b:
191+ ; CHECK-GI: // %bb.0: // %entry
192+ ; CHECK-GI-NEXT: rev64 v1.4s, v0.4s
193+ ; CHECK-GI-NEXT: mov d0, v1.d[1]
194+ ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
195+ ; CHECK-GI-NEXT: ret
196+ entry:
197+ %shuffle.i = shufflevector <4 x i32 > %x , <4 x i32 > poison, <4 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 >
198+ %shuffle.i6 = shufflevector <4 x i32 > %shuffle.i , <4 x i32 > poison, <2 x i32 > <i32 2 , i32 3 >
199+ %shuffle.i7 = shufflevector <4 x i32 > %shuffle.i , <4 x i32 > poison, <2 x i32 > <i32 0 , i32 1 >
200+ %shuffle.i5 = shufflevector <2 x i32 > %shuffle.i6 , <2 x i32 > %shuffle.i7 , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
201+ ret <4 x i32 > %shuffle.i5
202+ }
0 commit comments