@@ -135,3 +135,68 @@ define <2 x ptr> @test_v2p0(<2 x ptr> %a, <2 x ptr> %b) {
135
135
%s = shufflevector <2 x ptr > %a , <2 x ptr > %b , <2 x i32 > <i32 3 , i32 0 >
136
136
ret <2 x ptr > %s
137
137
}
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