4
4
define i8 @clastb_i8 (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %pg , i8 %existing ) {
5
5
; CHECK-LABEL: clastb_i8:
6
6
; CHECK: // %bb.0:
7
- ; CHECK-NEXT: lastb w8, p0, z0.b
8
- ; CHECK-NEXT: ptest p0, p0.b
9
- ; CHECK-NEXT: csel w0, w8, w0, ne
7
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.b
10
8
; CHECK-NEXT: ret
11
9
%rev.pg = call <vscale x 16 x i1 > @llvm.vector.reverse.nxv16i1 (<vscale x 16 x i1 > %pg )
12
10
%tz.cnt = call i32 @llvm.experimental.cttz.elts.i32.nxv16i1 (<vscale x 16 x i1 > %rev.pg , i1 false )
@@ -23,10 +21,7 @@ define i8 @clastb_i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, i8 %exist
23
21
define i16 @clastb_i16 (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %pg , i16 %existing ) {
24
22
; CHECK-LABEL: clastb_i16:
25
23
; CHECK: // %bb.0:
26
- ; CHECK-NEXT: lastb w8, p0, z0.h
27
- ; CHECK-NEXT: ptrue p1.h
28
- ; CHECK-NEXT: ptest p1, p0.b
29
- ; CHECK-NEXT: csel w0, w8, w0, ne
24
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.h
30
25
; CHECK-NEXT: ret
31
26
%rev.pg = call <vscale x 8 x i1 > @llvm.vector.reverse.nxv8i1 (<vscale x 8 x i1 > %pg )
32
27
%tz.cnt = call i32 @llvm.experimental.cttz.elts.i32.nxv8i1 (<vscale x 8 x i1 > %rev.pg , i1 false )
@@ -43,10 +38,7 @@ define i16 @clastb_i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pg, i16 %exi
43
38
define i32 @clastb_i32 (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %pg , i32 %existing ) {
44
39
; CHECK-LABEL: clastb_i32:
45
40
; CHECK: // %bb.0:
46
- ; CHECK-NEXT: lastb w8, p0, z0.s
47
- ; CHECK-NEXT: ptrue p1.s
48
- ; CHECK-NEXT: ptest p1, p0.b
49
- ; CHECK-NEXT: csel w0, w8, w0, ne
41
+ ; CHECK-NEXT: clastb w0, p0, w0, z0.s
50
42
; CHECK-NEXT: ret
51
43
%rev.pg = call <vscale x 4 x i1 > @llvm.vector.reverse.nxv4i1 (<vscale x 4 x i1 > %pg )
52
44
%tz.cnt = call i32 @llvm.experimental.cttz.elts.i32.nxv4i1 (<vscale x 4 x i1 > %rev.pg , i1 false )
@@ -63,10 +55,7 @@ define i32 @clastb_i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, i32 %exi
63
55
define i64 @clastb_i64 (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %pg , i64 %existing ) {
64
56
; CHECK-LABEL: clastb_i64:
65
57
; CHECK: // %bb.0:
66
- ; CHECK-NEXT: lastb x8, p0, z0.d
67
- ; CHECK-NEXT: ptrue p1.d
68
- ; CHECK-NEXT: ptest p1, p0.b
69
- ; CHECK-NEXT: csel x0, x8, x0, ne
58
+ ; CHECK-NEXT: clastb x0, p0, x0, z0.d
70
59
; CHECK-NEXT: ret
71
60
%rev.pg = call <vscale x 2 x i1 > @llvm.vector.reverse.nxv2i1 (<vscale x 2 x i1 > %pg )
72
61
%tz.cnt = call i32 @llvm.experimental.cttz.elts.i32.nxv2i1 (<vscale x 2 x i1 > %rev.pg , i1 false )
@@ -80,13 +69,10 @@ define i64 @clastb_i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, i64 %exi
80
69
ret i64 %res
81
70
}
82
71
83
- define float @clastb_float (<vscale x 4 x float > %data , <vscale x 4 x i1 > %pg , float %existing ) {
72
+ define float @clastb_float (float %existing , <vscale x 4 x float > %data , <vscale x 4 x i1 > %pg ) {
84
73
; CHECK-LABEL: clastb_float:
85
74
; CHECK: // %bb.0:
86
- ; CHECK-NEXT: lastb s0, p0, z0.s
87
- ; CHECK-NEXT: ptrue p1.s
88
- ; CHECK-NEXT: ptest p1, p0.b
89
- ; CHECK-NEXT: fcsel s0, s0, s1, ne
75
+ ; CHECK-NEXT: clastb s0, p0, s0, z1.s
90
76
; CHECK-NEXT: ret
91
77
%rev.pg = call <vscale x 4 x i1 > @llvm.vector.reverse.nxv4i1 (<vscale x 4 x i1 > %pg )
92
78
%tz.cnt = call i32 @llvm.experimental.cttz.elts.float.nxv4i1 (<vscale x 4 x i1 > %rev.pg , i1 false )
@@ -100,13 +86,10 @@ define float @clastb_float(<vscale x 4 x float> %data, <vscale x 4 x i1> %pg, fl
100
86
ret float %res
101
87
}
102
88
103
- define double @clastb_double (<vscale x 2 x double > %data , <vscale x 2 x i1 > %pg , double %existing ) {
89
+ define double @clastb_double (double %existing , <vscale x 2 x double > %data , <vscale x 2 x i1 > %pg ) {
104
90
; CHECK-LABEL: clastb_double:
105
91
; CHECK: // %bb.0:
106
- ; CHECK-NEXT: lastb d0, p0, z0.d
107
- ; CHECK-NEXT: ptrue p1.d
108
- ; CHECK-NEXT: ptest p1, p0.b
109
- ; CHECK-NEXT: fcsel d0, d0, d1, ne
92
+ ; CHECK-NEXT: clastb d0, p0, d0, z1.d
110
93
; CHECK-NEXT: ret
111
94
%rev.pg = call <vscale x 2 x i1 > @llvm.vector.reverse.nxv2i1 (<vscale x 2 x i1 > %pg )
112
95
%tz.cnt = call i32 @llvm.experimental.cttz.elts.i32.nxv2i1 (<vscale x 2 x i1 > %rev.pg , i1 false )
0 commit comments