@@ -293,9 +293,7 @@ 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: lastb w8, p0, z0.b
297
- ; CHECK-NEXT: ptest p0, p0.b
298
- ; CHECK-NEXT: csel w0, w8, w0, ne
296
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.b
299
297
; CHECK-NEXT: ret
300
298
%res = call i8 @llvm.experimental.vector.extract.last.active.nxv16i8 (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %mask , i8 %passthru )
301
299
ret i8 %res
@@ -304,10 +302,7 @@ define i8 @extract_last_i8_scalable(<vscale x 16 x i8> %data, <vscale x 16 x i1>
304
302
define i16 @extract_last_i16_scalable (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %mask , i16 %passthru ) #0 {
305
303
; CHECK-LABEL: extract_last_i16_scalable:
306
304
; CHECK: // %bb.0:
307
- ; CHECK-NEXT: lastb w8, p0, z0.h
308
- ; CHECK-NEXT: ptrue p1.h
309
- ; CHECK-NEXT: ptest p1, p0.b
310
- ; CHECK-NEXT: csel w0, w8, w0, ne
305
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.h
311
306
; CHECK-NEXT: ret
312
307
%res = call i16 @llvm.experimental.vector.extract.last.active.nxv8i16 (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %mask , i16 %passthru )
313
308
ret i16 %res
@@ -316,10 +311,7 @@ define i16 @extract_last_i16_scalable(<vscale x 8 x i16> %data, <vscale x 8 x i1
316
311
define i32 @extract_last_i32_scalable (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %mask , i32 %passthru ) #0 {
317
312
; CHECK-LABEL: extract_last_i32_scalable:
318
313
; CHECK: // %bb.0:
319
- ; CHECK-NEXT: lastb w8, p0, z0.s
320
- ; CHECK-NEXT: ptrue p1.s
321
- ; CHECK-NEXT: ptest p1, p0.b
322
- ; CHECK-NEXT: csel w0, w8, w0, ne
314
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.s
323
315
; CHECK-NEXT: ret
324
316
%res = call i32 @llvm.experimental.vector.extract.last.active.nxv4i32 (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %mask , i32 %passthru )
325
317
ret i32 %res
@@ -328,10 +320,7 @@ define i32 @extract_last_i32_scalable(<vscale x 4 x i32> %data, <vscale x 4 x i1
328
320
define i64 @extract_last_i64_scalable (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %mask , i64 %passthru ) #0 {
329
321
; CHECK-LABEL: extract_last_i64_scalable:
330
322
; CHECK: // %bb.0:
331
- ; CHECK-NEXT: lastb x8, p0, z0.d
332
- ; CHECK-NEXT: ptrue p1.d
333
- ; CHECK-NEXT: ptest p1, p0.b
334
- ; CHECK-NEXT: csel x0, x8, x0, ne
323
+ ; CHECK-NEXT: clastb x0, p0, x0, z0.d
335
324
; CHECK-NEXT: ret
336
325
%res = call i64 @llvm.experimental.vector.extract.last.active.nxv2i64 (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %mask , i64 %passthru )
337
326
ret i64 %res
@@ -340,10 +329,8 @@ define i64 @extract_last_i64_scalable(<vscale x 2 x i64> %data, <vscale x 2 x i1
340
329
define float @extract_last_float_scalable (<vscale x 4 x float > %data , <vscale x 4 x i1 > %mask , float %passthru ) #0 {
341
330
; CHECK-LABEL: extract_last_float_scalable:
342
331
; CHECK: // %bb.0:
343
- ; CHECK-NEXT: lastb s0, p0, z0.s
344
- ; CHECK-NEXT: ptrue p1.s
345
- ; CHECK-NEXT: ptest p1, p0.b
346
- ; CHECK-NEXT: fcsel s0, s0, s1, ne
332
+ ; CHECK-NEXT: clastb s1, p0, s1, z0.s
333
+ ; CHECK-NEXT: fmov s0, s1
347
334
; CHECK-NEXT: ret
348
335
%res = call float @llvm.experimental.vector.extract.last.active.nxv4f32 (<vscale x 4 x float > %data , <vscale x 4 x i1 > %mask , float %passthru )
349
336
ret float %res
@@ -352,10 +339,8 @@ define float @extract_last_float_scalable(<vscale x 4 x float> %data, <vscale x
352
339
define double @extract_last_double_scalable (<vscale x 2 x double > %data , <vscale x 2 x i1 > %mask , double %passthru ) #0 {
353
340
; CHECK-LABEL: extract_last_double_scalable:
354
341
; CHECK: // %bb.0:
355
- ; CHECK-NEXT: lastb d0, p0, z0.d
356
- ; CHECK-NEXT: ptrue p1.d
357
- ; CHECK-NEXT: ptest p1, p0.b
358
- ; CHECK-NEXT: fcsel d0, d0, d1, ne
342
+ ; CHECK-NEXT: clastb d1, p0, d1, z0.d
343
+ ; CHECK-NEXT: fmov d0, d1
359
344
; CHECK-NEXT: ret
360
345
%res = call double @llvm.experimental.vector.extract.last.active.nxv2f64 (<vscale x 2 x double > %data , <vscale x 2 x i1 > %mask , double %passthru )
361
346
ret double %res
0 commit comments