@@ -140,52 +140,64 @@ define <8 x i8> @shuffle_index_indices_from_both_ops(ptr %a, ptr %b) {
140140;
141141; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
142142; SVE2_128_NOMAX: // %bb.0:
143- ; SVE2_128_NOMAX-NEXT: ldr d0, [x0]
144- ; SVE2_128_NOMAX-NEXT: ldr d1, [x1]
145- ; SVE2_128_NOMAX-NEXT: mov z2.b, z1.b[4]
146- ; SVE2_128_NOMAX-NEXT: mov z3.b, z1.b[1]
147- ; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[1]
148- ; SVE2_128_NOMAX-NEXT: mov z4.h, z1.h[3]
149- ; SVE2_128_NOMAX-NEXT: mov z1.h, z1.h[1]
150- ; SVE2_128_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
151- ; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
152- ; SVE2_128_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
153- ; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
154- ; SVE2_128_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
143+ ; SVE2_128_NOMAX-NEXT: ldr d0, [x1]
144+ ; SVE2_128_NOMAX-NEXT: ldr d1, [x0]
145+ ; SVE2_128_NOMAX-NEXT: mov z2.b, z0.b[3]
146+ ; SVE2_128_NOMAX-NEXT: mov z3.b, z0.b[2]
147+ ; SVE2_128_NOMAX-NEXT: mov z4.b, z0.b[1]
148+ ; SVE2_128_NOMAX-NEXT: mov z1.b, z1.b[1]
149+ ; SVE2_128_NOMAX-NEXT: mov z5.b, z0.b[7]
150+ ; SVE2_128_NOMAX-NEXT: mov z6.b, z0.b[6]
151+ ; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[4]
152+ ; SVE2_128_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
153+ ; SVE2_128_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
154+ ; SVE2_128_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
155+ ; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
156+ ; SVE2_128_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
157+ ; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
158+ ; SVE2_128_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
155159; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
156160; SVE2_128_NOMAX-NEXT: ret
157161;
158162; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
159163; SVE2_NOMIN_NOMAX: // %bb.0:
160- ; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x0]
161- ; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x1]
162- ; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z1.b[4]
163- ; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z1.b[1]
164- ; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[1]
165- ; SVE2_NOMIN_NOMAX-NEXT: mov z4.h, z1.h[3]
166- ; SVE2_NOMIN_NOMAX-NEXT: mov z1.h, z1.h[1]
167- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
168- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
169- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
170- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
171- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
164+ ; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x1]
165+ ; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x0]
166+ ; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z0.b[3]
167+ ; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z0.b[2]
168+ ; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z0.b[1]
169+ ; SVE2_NOMIN_NOMAX-NEXT: mov z1.b, z1.b[1]
170+ ; SVE2_NOMIN_NOMAX-NEXT: mov z5.b, z0.b[7]
171+ ; SVE2_NOMIN_NOMAX-NEXT: mov z6.b, z0.b[6]
172+ ; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[4]
173+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
174+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
175+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
176+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
177+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
178+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
179+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
172180; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
173181; SVE2_NOMIN_NOMAX-NEXT: ret
174182;
175183; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
176184; SVE2_MIN_256_NOMAX: // %bb.0:
177- ; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x0]
178- ; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x1]
179- ; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z1.b[4]
180- ; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z1.b[1]
181- ; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[1]
182- ; SVE2_MIN_256_NOMAX-NEXT: mov z4.h, z1.h[3]
183- ; SVE2_MIN_256_NOMAX-NEXT: mov z1.h, z1.h[1]
184- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
185- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
186- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
187- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
188- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
185+ ; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x1]
186+ ; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x0]
187+ ; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z0.b[3]
188+ ; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z0.b[2]
189+ ; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z0.b[1]
190+ ; SVE2_MIN_256_NOMAX-NEXT: mov z1.b, z1.b[1]
191+ ; SVE2_MIN_256_NOMAX-NEXT: mov z5.b, z0.b[7]
192+ ; SVE2_MIN_256_NOMAX-NEXT: mov z6.b, z0.b[6]
193+ ; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[4]
194+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
195+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
196+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
197+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
198+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
199+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
200+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
189201; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
190202; SVE2_MIN_256_NOMAX-NEXT: ret
191203 %op1 = load <8 x i8 >, ptr %a
@@ -218,52 +230,58 @@ define <8 x i8> @shuffle_index_poison_value(ptr %a, ptr %b) {
218230;
219231; SVE2_128_NOMAX-LABEL: shuffle_index_poison_value:
220232; SVE2_128_NOMAX: // %bb.0:
221- ; SVE2_128_NOMAX-NEXT: ldr d0, [x0]
222- ; SVE2_128_NOMAX-NEXT: ldr d1, [x1]
223- ; SVE2_128_NOMAX-NEXT: mov z2.b, z1.b[4]
224- ; SVE2_128_NOMAX-NEXT: mov z3.b, z1.b[1]
225- ; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[1]
226- ; SVE2_128_NOMAX-NEXT: mov z4.b, z1.b[6]
227- ; SVE2_128_NOMAX-NEXT: mov z1.h, z1.h[1]
228- ; SVE2_128_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
229- ; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
230- ; SVE2_128_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
231- ; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
232- ; SVE2_128_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
233+ ; SVE2_128_NOMAX-NEXT: ldr d0, [x1]
234+ ; SVE2_128_NOMAX-NEXT: ldr d1, [x0]
235+ ; SVE2_128_NOMAX-NEXT: mov z2.b, z0.b[3]
236+ ; SVE2_128_NOMAX-NEXT: mov z3.b, z0.b[2]
237+ ; SVE2_128_NOMAX-NEXT: mov z4.b, z0.b[1]
238+ ; SVE2_128_NOMAX-NEXT: mov z1.b, z1.b[1]
239+ ; SVE2_128_NOMAX-NEXT: mov z5.b, z0.b[4]
240+ ; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[6]
241+ ; SVE2_128_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
242+ ; SVE2_128_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
243+ ; SVE2_128_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
244+ ; SVE2_128_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
245+ ; SVE2_128_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
246+ ; SVE2_128_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
233247; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
234248; SVE2_128_NOMAX-NEXT: ret
235249;
236250; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_poison_value:
237251; SVE2_NOMIN_NOMAX: // %bb.0:
238- ; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x0]
239- ; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x1]
240- ; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z1.b[4]
241- ; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z1.b[1]
242- ; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[1]
243- ; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z1.b[6]
244- ; SVE2_NOMIN_NOMAX-NEXT: mov z1.h, z1.h[1]
245- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
246- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
247- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
248- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
249- ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
252+ ; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x1]
253+ ; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x0]
254+ ; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z0.b[3]
255+ ; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z0.b[2]
256+ ; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z0.b[1]
257+ ; SVE2_NOMIN_NOMAX-NEXT: mov z1.b, z1.b[1]
258+ ; SVE2_NOMIN_NOMAX-NEXT: mov z5.b, z0.b[4]
259+ ; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[6]
260+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
261+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
262+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
263+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
264+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
265+ ; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
250266; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
251267; SVE2_NOMIN_NOMAX-NEXT: ret
252268;
253269; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_poison_value:
254270; SVE2_MIN_256_NOMAX: // %bb.0:
255- ; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x0]
256- ; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x1]
257- ; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z1.b[4]
258- ; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z1.b[1]
259- ; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[1]
260- ; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z1.b[6]
261- ; SVE2_MIN_256_NOMAX-NEXT: mov z1.h, z1.h[1]
262- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
263- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
264- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
265- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
266- ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
271+ ; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x1]
272+ ; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x0]
273+ ; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z0.b[3]
274+ ; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z0.b[2]
275+ ; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z0.b[1]
276+ ; SVE2_MIN_256_NOMAX-NEXT: mov z1.b, z1.b[1]
277+ ; SVE2_MIN_256_NOMAX-NEXT: mov z5.b, z0.b[4]
278+ ; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[6]
279+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
280+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
281+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
282+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
283+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
284+ ; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
267285; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
268286; SVE2_MIN_256_NOMAX-NEXT: ret
269287 %op1 = load <8 x i8 >, ptr %a
@@ -320,18 +338,22 @@ define <8 x i8> @shuffle_op1_poison(ptr %a, ptr %b) {
320338define <8 x i8 > @negative_test_shuffle_index_size_op_both_maxhw (ptr %a , ptr %b ) "target-features" ="+sve2" vscale_range(16 ,16 ) {
321339; CHECK-LABEL: negative_test_shuffle_index_size_op_both_maxhw:
322340; CHECK: // %bb.0:
323- ; CHECK-NEXT: ldr d0, [x0]
324- ; CHECK-NEXT: ldr d1, [x1]
325- ; CHECK-NEXT: mov z2.b, z1.b[4]
326- ; CHECK-NEXT: mov z3.b, z1.b[1]
327- ; CHECK-NEXT: mov z0.b, z0.b[1]
328- ; CHECK-NEXT: mov z4.h, z1.h[3]
329- ; CHECK-NEXT: mov z1.h, z1.h[1]
330- ; CHECK-NEXT: zip1 z2.b, z2.b, z2.b
331- ; CHECK-NEXT: zip1 z0.b, z0.b, z3.b
332- ; CHECK-NEXT: zip1 z2.h, z2.h, z4.h
333- ; CHECK-NEXT: zip1 z0.h, z0.h, z1.h
334- ; CHECK-NEXT: zip1 z0.s, z0.s, z2.s
341+ ; CHECK-NEXT: ldr d0, [x1]
342+ ; CHECK-NEXT: ldr d1, [x0]
343+ ; CHECK-NEXT: mov z2.b, z0.b[3]
344+ ; CHECK-NEXT: mov z3.b, z0.b[2]
345+ ; CHECK-NEXT: mov z4.b, z0.b[1]
346+ ; CHECK-NEXT: mov z1.b, z1.b[1]
347+ ; CHECK-NEXT: mov z5.b, z0.b[7]
348+ ; CHECK-NEXT: mov z6.b, z0.b[6]
349+ ; CHECK-NEXT: mov z0.b, z0.b[4]
350+ ; CHECK-NEXT: zip1 z2.b, z3.b, z2.b
351+ ; CHECK-NEXT: zip1 z1.b, z1.b, z4.b
352+ ; CHECK-NEXT: zip1 z3.b, z6.b, z5.b
353+ ; CHECK-NEXT: zip1 z0.b, z0.b, z0.b
354+ ; CHECK-NEXT: zip1 z1.h, z1.h, z2.h
355+ ; CHECK-NEXT: zip1 z0.h, z0.h, z3.h
356+ ; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
335357; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
336358; CHECK-NEXT: ret
337359 %op1 = load <8 x i8 >, ptr %a
0 commit comments