44define i8 @clastb_i8 (<vscale x 16 x i8 > %data , <vscale x 16 x i1 > %pg , i8 %existing ) {
55; CHECK-LABEL: clastb_i8:
66; CHECK: // %bb.0:
7- ; CHECK-NEXT: ptrue p1.b
8- ; CHECK-NEXT: rdvl x9, #1
9- ; CHECK-NEXT: rev p2.b, p0.b
10- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
11- ; CHECK-NEXT: cntp x8, p1, p1.b
12- ; CHECK-NEXT: mvn w8, w8
13- ; CHECK-NEXT: add w8, w8, w9
14- ; CHECK-NEXT: whilels p1.b, xzr, x8
7+ ; CHECK-NEXT: lastb w8, p0, z0.b
158; CHECK-NEXT: ptest p0, p0.b
16- ; CHECK-NEXT: lastb w8, p1, z0.b
179; CHECK-NEXT: csel w0, w8, w0, ne
1810; CHECK-NEXT: ret
1911 %rev.pg = call <vscale x 16 x i1 > @llvm.vector.reverse.nxv16i1 (<vscale x 16 x i1 > %pg )
@@ -31,15 +23,7 @@ define i8 @clastb_i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, i8 %exist
3123define i16 @clastb_i16 (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %pg , i16 %existing ) {
3224; CHECK-LABEL: clastb_i16:
3325; CHECK: // %bb.0:
34- ; CHECK-NEXT: ptrue p1.h
35- ; CHECK-NEXT: cnth x9
36- ; CHECK-NEXT: rev p2.h, p0.h
37- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
38- ; CHECK-NEXT: cntp x8, p1, p1.h
39- ; CHECK-NEXT: mvn w8, w8
40- ; CHECK-NEXT: add w8, w8, w9
41- ; CHECK-NEXT: whilels p1.h, xzr, x8
42- ; CHECK-NEXT: lastb w8, p1, z0.h
26+ ; CHECK-NEXT: lastb w8, p0, z0.h
4327; CHECK-NEXT: ptrue p1.h
4428; CHECK-NEXT: ptest p1, p0.b
4529; CHECK-NEXT: csel w0, w8, w0, ne
@@ -59,15 +43,7 @@ define i16 @clastb_i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pg, i16 %exi
5943define i32 @clastb_i32 (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %pg , i32 %existing ) {
6044; CHECK-LABEL: clastb_i32:
6145; CHECK: // %bb.0:
62- ; CHECK-NEXT: ptrue p1.s
63- ; CHECK-NEXT: cntw x9
64- ; CHECK-NEXT: rev p2.s, p0.s
65- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
66- ; CHECK-NEXT: cntp x8, p1, p1.s
67- ; CHECK-NEXT: mvn w8, w8
68- ; CHECK-NEXT: add w8, w8, w9
69- ; CHECK-NEXT: whilels p1.s, xzr, x8
70- ; CHECK-NEXT: lastb w8, p1, z0.s
46+ ; CHECK-NEXT: lastb w8, p0, z0.s
7147; CHECK-NEXT: ptrue p1.s
7248; CHECK-NEXT: ptest p1, p0.b
7349; CHECK-NEXT: csel w0, w8, w0, ne
@@ -87,15 +63,7 @@ define i32 @clastb_i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, i32 %exi
8763define i64 @clastb_i64 (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %pg , i64 %existing ) {
8864; CHECK-LABEL: clastb_i64:
8965; CHECK: // %bb.0:
90- ; CHECK-NEXT: ptrue p1.d
91- ; CHECK-NEXT: cntd x9
92- ; CHECK-NEXT: rev p2.d, p0.d
93- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
94- ; CHECK-NEXT: cntp x8, p1, p1.d
95- ; CHECK-NEXT: mvn w8, w8
96- ; CHECK-NEXT: add w8, w8, w9
97- ; CHECK-NEXT: whilels p1.d, xzr, x8
98- ; CHECK-NEXT: lastb x8, p1, z0.d
66+ ; CHECK-NEXT: lastb x8, p0, z0.d
9967; CHECK-NEXT: ptrue p1.d
10068; CHECK-NEXT: ptest p1, p0.b
10169; CHECK-NEXT: csel x0, x8, x0, ne
@@ -115,15 +83,7 @@ define i64 @clastb_i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, i64 %exi
11583define float @clastb_float (<vscale x 4 x float > %data , <vscale x 4 x i1 > %pg , float %existing ) {
11684; CHECK-LABEL: clastb_float:
11785; CHECK: // %bb.0:
118- ; CHECK-NEXT: ptrue p1.s
119- ; CHECK-NEXT: cntw x9
120- ; CHECK-NEXT: rev p2.s, p0.s
121- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
122- ; CHECK-NEXT: cntp x8, p1, p1.s
123- ; CHECK-NEXT: mvn w8, w8
124- ; CHECK-NEXT: add w8, w8, w9
125- ; CHECK-NEXT: whilels p1.s, xzr, x8
126- ; CHECK-NEXT: lastb s0, p1, z0.s
86+ ; CHECK-NEXT: lastb s0, p0, z0.s
12787; CHECK-NEXT: ptrue p1.s
12888; CHECK-NEXT: ptest p1, p0.b
12989; CHECK-NEXT: fcsel s0, s0, s1, ne
@@ -143,15 +103,7 @@ define float @clastb_float(<vscale x 4 x float> %data, <vscale x 4 x i1> %pg, fl
143103define double @clastb_double (<vscale x 2 x double > %data , <vscale x 2 x i1 > %pg , double %existing ) {
144104; CHECK-LABEL: clastb_double:
145105; CHECK: // %bb.0:
146- ; CHECK-NEXT: ptrue p1.d
147- ; CHECK-NEXT: cntd x9
148- ; CHECK-NEXT: rev p2.d, p0.d
149- ; CHECK-NEXT: brkb p1.b, p1/z, p2.b
150- ; CHECK-NEXT: cntp x8, p1, p1.d
151- ; CHECK-NEXT: mvn w8, w8
152- ; CHECK-NEXT: add w8, w8, w9
153- ; CHECK-NEXT: whilels p1.d, xzr, x8
154- ; CHECK-NEXT: lastb d0, p1, z0.d
106+ ; CHECK-NEXT: lastb d0, p0, z0.d
155107; CHECK-NEXT: ptrue p1.d
156108; CHECK-NEXT: ptest p1, p0.b
157109; CHECK-NEXT: fcsel d0, d0, d1, ne
0 commit comments