@@ -62,13 +62,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
6262; NEON-FIXED-NEXT: str q0, [sp]
6363; NEON-FIXED-NEXT: xtn v1.8b, v1.8h
6464; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
65- ; NEON-FIXED-NEXT: umaxv b1, v1.8b
65+ ; NEON-FIXED-NEXT: fcmp d1, #0.0
6666; NEON-FIXED-NEXT: umaxv b2, v2.8b
6767; NEON-FIXED-NEXT: fmov w8, s2
6868; NEON-FIXED-NEXT: bfi x9, x8, #1, #3
6969; NEON-FIXED-NEXT: ldrh w8, [x9]
70- ; NEON-FIXED-NEXT: fmov w9, s1
71- ; NEON-FIXED-NEXT: tst w9, #0x1
7270; NEON-FIXED-NEXT: csel w0, w8, w0, ne
7371; NEON-FIXED-NEXT: add sp, sp, #16
7472; NEON-FIXED-NEXT: ret
@@ -83,13 +81,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
8381; SVE-FIXED-NEXT: str q0, [sp]
8482; SVE-FIXED-NEXT: xtn v1.8b, v1.8h
8583; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
86- ; SVE-FIXED-NEXT: umaxv b1, v1.8b
84+ ; SVE-FIXED-NEXT: fcmp d1, #0.0
8785; SVE-FIXED-NEXT: umaxv b2, v2.8b
8886; SVE-FIXED-NEXT: fmov w8, s2
8987; SVE-FIXED-NEXT: bfi x9, x8, #1, #3
9088; SVE-FIXED-NEXT: ldrh w8, [x9]
91- ; SVE-FIXED-NEXT: fmov w9, s1
92- ; SVE-FIXED-NEXT: tst w9, #0x1
9389; SVE-FIXED-NEXT: csel w0, w8, w0, ne
9490; SVE-FIXED-NEXT: add sp, sp, #16
9591; SVE-FIXED-NEXT: ret
@@ -110,13 +106,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
110106; NEON-FIXED-NEXT: str q0, [sp]
111107; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
112108; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
113- ; NEON-FIXED-NEXT: umaxv h1, v1.4h
109+ ; NEON-FIXED-NEXT: fcmp d1, #0.0
114110; NEON-FIXED-NEXT: umaxv h2, v2.4h
115111; NEON-FIXED-NEXT: fmov w8, s2
116112; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
117113; NEON-FIXED-NEXT: ldr w8, [x9]
118- ; NEON-FIXED-NEXT: fmov w9, s1
119- ; NEON-FIXED-NEXT: tst w9, #0x1
120114; NEON-FIXED-NEXT: csel w0, w8, w0, ne
121115; NEON-FIXED-NEXT: add sp, sp, #16
122116; NEON-FIXED-NEXT: ret
@@ -131,13 +125,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
131125; SVE-FIXED-NEXT: str q0, [sp]
132126; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
133127; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
134- ; SVE-FIXED-NEXT: umaxv h1, v1.4h
128+ ; SVE-FIXED-NEXT: fcmp d1, #0.0
135129; SVE-FIXED-NEXT: umaxv h2, v2.4h
136130; SVE-FIXED-NEXT: fmov w8, s2
137131; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
138132; SVE-FIXED-NEXT: ldr w8, [x9]
139- ; SVE-FIXED-NEXT: fmov w9, s1
140- ; SVE-FIXED-NEXT: tst w9, #0x1
141133; SVE-FIXED-NEXT: csel w0, w8, w0, ne
142134; SVE-FIXED-NEXT: add sp, sp, #16
143135; SVE-FIXED-NEXT: ret
@@ -158,13 +150,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
158150; NEON-FIXED-NEXT: str q0, [sp]
159151; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
160152; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
161- ; NEON-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
153+ ; NEON-FIXED-NEXT: fcmp d1, #0.0
162154; NEON-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
163155; NEON-FIXED-NEXT: fmov w8, s2
164156; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
165157; NEON-FIXED-NEXT: ldr x8, [x9]
166- ; NEON-FIXED-NEXT: fmov w9, s1
167- ; NEON-FIXED-NEXT: tst w9, #0x1
168158; NEON-FIXED-NEXT: csel x0, x8, x0, ne
169159; NEON-FIXED-NEXT: add sp, sp, #16
170160; NEON-FIXED-NEXT: ret
@@ -179,13 +169,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
179169; SVE-FIXED-NEXT: str q0, [sp]
180170; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
181171; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
182- ; SVE-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
172+ ; SVE-FIXED-NEXT: fcmp d1, #0.0
183173; SVE-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
184174; SVE-FIXED-NEXT: fmov w8, s2
185175; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
186176; SVE-FIXED-NEXT: ldr x8, [x9]
187- ; SVE-FIXED-NEXT: fmov w9, s1
188- ; SVE-FIXED-NEXT: tst w9, #0x1
189177; SVE-FIXED-NEXT: csel x0, x8, x0, ne
190178; SVE-FIXED-NEXT: add sp, sp, #16
191179; SVE-FIXED-NEXT: ret
@@ -206,13 +194,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
206194; NEON-FIXED-NEXT: str q0, [sp]
207195; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
208196; NEON-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
209- ; NEON-FIXED-NEXT: umaxv h1, v1.4h
197+ ; NEON-FIXED-NEXT: fcmp d1, #0.0
210198; NEON-FIXED-NEXT: umaxv h3, v3.4h
211199; NEON-FIXED-NEXT: fmov w8, s3
212200; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
213- ; NEON-FIXED-NEXT: fmov w8, s1
214201; NEON-FIXED-NEXT: ldr s0, [x9]
215- ; NEON-FIXED-NEXT: tst w8, #0x1
216202; NEON-FIXED-NEXT: fcsel s0, s0, s2, ne
217203; NEON-FIXED-NEXT: add sp, sp, #16
218204; NEON-FIXED-NEXT: ret
@@ -227,13 +213,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
227213; SVE-FIXED-NEXT: str q0, [sp]
228214; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
229215; SVE-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
230- ; SVE-FIXED-NEXT: umaxv h1, v1.4h
216+ ; SVE-FIXED-NEXT: fcmp d1, #0.0
231217; SVE-FIXED-NEXT: umaxv h3, v3.4h
232218; SVE-FIXED-NEXT: fmov w8, s3
233219; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
234- ; SVE-FIXED-NEXT: fmov w8, s1
235220; SVE-FIXED-NEXT: ldr s0, [x9]
236- ; SVE-FIXED-NEXT: tst w8, #0x1
237221; SVE-FIXED-NEXT: fcsel s0, s0, s2, ne
238222; SVE-FIXED-NEXT: add sp, sp, #16
239223; SVE-FIXED-NEXT: ret
@@ -254,13 +238,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
254238; NEON-FIXED-NEXT: str q0, [sp]
255239; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
256240; NEON-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
257- ; NEON-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
241+ ; NEON-FIXED-NEXT: fcmp d1, #0.0
258242; NEON-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
259243; NEON-FIXED-NEXT: fmov w8, s3
260244; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
261- ; NEON-FIXED-NEXT: fmov w8, s1
262245; NEON-FIXED-NEXT: ldr d0, [x9]
263- ; NEON-FIXED-NEXT: tst w8, #0x1
264246; NEON-FIXED-NEXT: fcsel d0, d0, d2, ne
265247; NEON-FIXED-NEXT: add sp, sp, #16
266248; NEON-FIXED-NEXT: ret
@@ -275,13 +257,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
275257; SVE-FIXED-NEXT: str q0, [sp]
276258; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
277259; SVE-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
278- ; SVE-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
260+ ; SVE-FIXED-NEXT: fcmp d1, #0.0
279261; SVE-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
280262; SVE-FIXED-NEXT: fmov w8, s3
281263; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
282- ; SVE-FIXED-NEXT: fmov w8, s1
283264; SVE-FIXED-NEXT: ldr d0, [x9]
284- ; SVE-FIXED-NEXT: tst w8, #0x1
285265; SVE-FIXED-NEXT: fcsel d0, d0, d2, ne
286266; SVE-FIXED-NEXT: add sp, sp, #16
287267; SVE-FIXED-NEXT: ret
0 commit comments