@@ -293,11 +293,8 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
293
293
define i8 @extract_last_i8_scalable (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %mask , i8 %passthru ) #0 {
294
294
; CHECK-LABEL: extract_last_i8_scalable:
295
295
; CHECK: // %bb.0:
296
- ; CHECK-NEXT: index z1.b, #0, #1
297
- ; CHECK-NEXT: lastb w8, p0, z1.b
298
- ; CHECK-NEXT: whilels p1.b, xzr, x8
296
+ ; CHECK-NEXT: lastb w8, p0, z0.b
299
297
; CHECK-NEXT: ptest p0, p0.b
300
- ; CHECK-NEXT: lastb w8, p1, z0.b
301
298
; CHECK-NEXT: csel w0, w8, w0, ne
302
299
; CHECK-NEXT: ret
303
300
%res = call i8 @llvm.experimental.vector.extract.last.active.nxv16i8 (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %mask , i8 %passthru )
@@ -307,10 +304,7 @@ define i8 @extract_last_i8_scalable(<vscale x 16 x i8> %data, <vscale x 16 x i1>
307
304
define i16 @extract_last_i16_scalable (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %mask , i16 %passthru ) #0 {
308
305
; CHECK-LABEL: extract_last_i16_scalable:
309
306
; CHECK: // %bb.0:
310
- ; CHECK-NEXT: index z1.h, #0, #1
311
- ; CHECK-NEXT: lastb w8, p0, z1.h
312
- ; CHECK-NEXT: whilels p1.h, xzr, x8
313
- ; CHECK-NEXT: lastb w8, p1, z0.h
307
+ ; CHECK-NEXT: lastb w8, p0, z0.h
314
308
; CHECK-NEXT: ptrue p1.h
315
309
; CHECK-NEXT: ptest p1, p0.b
316
310
; CHECK-NEXT: csel w0, w8, w0, ne
@@ -322,10 +316,7 @@ define i16 @extract_last_i16_scalable(<vscale x 8 x i16> %data, <vscale x 8 x i1
322
316
define i32 @extract_last_i32_scalable (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %mask , i32 %passthru ) #0 {
323
317
; CHECK-LABEL: extract_last_i32_scalable:
324
318
; CHECK: // %bb.0:
325
- ; CHECK-NEXT: index z1.s, #0, #1
326
- ; CHECK-NEXT: lastb w8, p0, z1.s
327
- ; CHECK-NEXT: whilels p1.s, xzr, x8
328
- ; CHECK-NEXT: lastb w8, p1, z0.s
319
+ ; CHECK-NEXT: lastb w8, p0, z0.s
329
320
; CHECK-NEXT: ptrue p1.s
330
321
; CHECK-NEXT: ptest p1, p0.b
331
322
; CHECK-NEXT: csel w0, w8, w0, ne
@@ -337,10 +328,7 @@ define i32 @extract_last_i32_scalable(<vscale x 4 x i32> %data, <vscale x 4 x i1
337
328
define i64 @extract_last_i64_scalable (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %mask , i64 %passthru ) #0 {
338
329
; CHECK-LABEL: extract_last_i64_scalable:
339
330
; CHECK: // %bb.0:
340
- ; CHECK-NEXT: index z1.d, #0, #1
341
- ; CHECK-NEXT: lastb x8, p0, z1.d
342
- ; CHECK-NEXT: whilels p1.d, xzr, x8
343
- ; CHECK-NEXT: lastb x8, p1, z0.d
331
+ ; CHECK-NEXT: lastb x8, p0, z0.d
344
332
; CHECK-NEXT: ptrue p1.d
345
333
; CHECK-NEXT: ptest p1, p0.b
346
334
; CHECK-NEXT: csel x0, x8, x0, ne
@@ -352,10 +340,7 @@ define i64 @extract_last_i64_scalable(<vscale x 2 x i64> %data, <vscale x 2 x i1
352
340
define float @extract_last_float_scalable (<vscale x 4 x float > %data , <vscale x 4 x i1 > %mask , float %passthru ) #0 {
353
341
; CHECK-LABEL: extract_last_float_scalable:
354
342
; CHECK: // %bb.0:
355
- ; CHECK-NEXT: index z2.s, #0, #1
356
- ; CHECK-NEXT: lastb w8, p0, z2.s
357
- ; CHECK-NEXT: whilels p1.s, xzr, x8
358
- ; CHECK-NEXT: lastb s0, p1, z0.s
343
+ ; CHECK-NEXT: lastb s0, p0, z0.s
359
344
; CHECK-NEXT: ptrue p1.s
360
345
; CHECK-NEXT: ptest p1, p0.b
361
346
; CHECK-NEXT: fcsel s0, s0, s1, ne
@@ -367,10 +352,7 @@ define float @extract_last_float_scalable(<vscale x 4 x float> %data, <vscale x
367
352
define double @extract_last_double_scalable (<vscale x 2 x double > %data , <vscale x 2 x i1 > %mask , double %passthru ) #0 {
368
353
; CHECK-LABEL: extract_last_double_scalable:
369
354
; CHECK: // %bb.0:
370
- ; CHECK-NEXT: index z2.d, #0, #1
371
- ; CHECK-NEXT: lastb x8, p0, z2.d
372
- ; CHECK-NEXT: whilels p1.d, xzr, x8
373
- ; CHECK-NEXT: lastb d0, p1, z0.d
355
+ ; CHECK-NEXT: lastb d0, p0, z0.d
374
356
; CHECK-NEXT: ptrue p1.d
375
357
; CHECK-NEXT: ptest p1, p0.b
376
358
; CHECK-NEXT: fcsel d0, d0, d1, ne
@@ -383,9 +365,6 @@ define double @extract_last_double_scalable(<vscale x 2 x double> %data, <vscale
383
365
define i8 @extract_last_i8_scalable_poison_passthru (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %mask ) #0 {
384
366
; CHECK-LABEL: extract_last_i8_scalable_poison_passthru:
385
367
; CHECK: // %bb.0:
386
- ; CHECK-NEXT: index z1.b, #0, #1
387
- ; CHECK-NEXT: lastb w8, p0, z1.b
388
- ; CHECK-NEXT: whilels p0.b, xzr, x8
389
368
; CHECK-NEXT: lastb w0, p0, z0.b
390
369
; CHECK-NEXT: ret
391
370
%res = call i8 @llvm.experimental.vector.extract.last.active.nxv16i8 (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %mask , i8 poison)
0 commit comments