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: 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
15
8
; CHECK-NEXT: ptest p0, p0.b
16
- ; CHECK-NEXT: lastb w8, p1, z0.b
17
9
; CHECK-NEXT: csel w0, w8, w0, ne
18
10
; CHECK-NEXT: ret
19
11
%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
31
23
define i16 @clastb_i16 (<vscale x 8 x i16 > %data , <vscale x 8 x i1 > %pg , i16 %existing ) {
32
24
; CHECK-LABEL: clastb_i16:
33
25
; 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
43
27
; CHECK-NEXT: ptrue p1.h
44
28
; CHECK-NEXT: ptest p1, p0.b
45
29
; 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
59
43
define i32 @clastb_i32 (<vscale x 4 x i32 > %data , <vscale x 4 x i1 > %pg , i32 %existing ) {
60
44
; CHECK-LABEL: clastb_i32:
61
45
; 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
71
47
; CHECK-NEXT: ptrue p1.s
72
48
; CHECK-NEXT: ptest p1, p0.b
73
49
; 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
87
63
define i64 @clastb_i64 (<vscale x 2 x i64 > %data , <vscale x 2 x i1 > %pg , i64 %existing ) {
88
64
; CHECK-LABEL: clastb_i64:
89
65
; 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
99
67
; CHECK-NEXT: ptrue p1.d
100
68
; CHECK-NEXT: ptest p1, p0.b
101
69
; 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
115
83
define float @clastb_float (<vscale x 4 x float > %data , <vscale x 4 x i1 > %pg , float %existing ) {
116
84
; CHECK-LABEL: clastb_float:
117
85
; 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
127
87
; CHECK-NEXT: ptrue p1.s
128
88
; CHECK-NEXT: ptest p1, p0.b
129
89
; 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
143
103
define double @clastb_double (<vscale x 2 x double > %data , <vscale x 2 x i1 > %pg , double %existing ) {
144
104
; CHECK-LABEL: clastb_double:
145
105
; 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
155
107
; CHECK-NEXT: ptrue p1.d
156
108
; CHECK-NEXT: ptest p1, p0.b
157
109
; CHECK-NEXT: fcsel d0, d0, d1, ne
0 commit comments