@@ -62,13 +62,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
62
62
; NEON-FIXED-NEXT: str q0, [sp]
63
63
; NEON-FIXED-NEXT: xtn v1.8b, v1.8h
64
64
; 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
66
66
; NEON-FIXED-NEXT: umaxv b2, v2.8b
67
67
; NEON-FIXED-NEXT: fmov w8, s2
68
68
; NEON-FIXED-NEXT: bfi x9, x8, #1, #3
69
69
; NEON-FIXED-NEXT: ldrh w8, [x9]
70
- ; NEON-FIXED-NEXT: fmov w9, s1
71
- ; NEON-FIXED-NEXT: tst w9, #0x1
72
70
; NEON-FIXED-NEXT: csel w0, w8, w0, ne
73
71
; NEON-FIXED-NEXT: add sp, sp, #16
74
72
; NEON-FIXED-NEXT: ret
@@ -83,13 +81,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
83
81
; SVE-FIXED-NEXT: str q0, [sp]
84
82
; SVE-FIXED-NEXT: xtn v1.8b, v1.8h
85
83
; 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
87
85
; SVE-FIXED-NEXT: umaxv b2, v2.8b
88
86
; SVE-FIXED-NEXT: fmov w8, s2
89
87
; SVE-FIXED-NEXT: bfi x9, x8, #1, #3
90
88
; SVE-FIXED-NEXT: ldrh w8, [x9]
91
- ; SVE-FIXED-NEXT: fmov w9, s1
92
- ; SVE-FIXED-NEXT: tst w9, #0x1
93
89
; SVE-FIXED-NEXT: csel w0, w8, w0, ne
94
90
; SVE-FIXED-NEXT: add sp, sp, #16
95
91
; SVE-FIXED-NEXT: ret
@@ -110,13 +106,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
110
106
; NEON-FIXED-NEXT: str q0, [sp]
111
107
; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
112
108
; 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
114
110
; NEON-FIXED-NEXT: umaxv h2, v2.4h
115
111
; NEON-FIXED-NEXT: fmov w8, s2
116
112
; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
117
113
; NEON-FIXED-NEXT: ldr w8, [x9]
118
- ; NEON-FIXED-NEXT: fmov w9, s1
119
- ; NEON-FIXED-NEXT: tst w9, #0x1
120
114
; NEON-FIXED-NEXT: csel w0, w8, w0, ne
121
115
; NEON-FIXED-NEXT: add sp, sp, #16
122
116
; NEON-FIXED-NEXT: ret
@@ -131,13 +125,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
131
125
; SVE-FIXED-NEXT: str q0, [sp]
132
126
; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
133
127
; 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
135
129
; SVE-FIXED-NEXT: umaxv h2, v2.4h
136
130
; SVE-FIXED-NEXT: fmov w8, s2
137
131
; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
138
132
; SVE-FIXED-NEXT: ldr w8, [x9]
139
- ; SVE-FIXED-NEXT: fmov w9, s1
140
- ; SVE-FIXED-NEXT: tst w9, #0x1
141
133
; SVE-FIXED-NEXT: csel w0, w8, w0, ne
142
134
; SVE-FIXED-NEXT: add sp, sp, #16
143
135
; SVE-FIXED-NEXT: ret
@@ -158,13 +150,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
158
150
; NEON-FIXED-NEXT: str q0, [sp]
159
151
; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
160
152
; 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
162
154
; NEON-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
163
155
; NEON-FIXED-NEXT: fmov w8, s2
164
156
; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
165
157
; NEON-FIXED-NEXT: ldr x8, [x9]
166
- ; NEON-FIXED-NEXT: fmov w9, s1
167
- ; NEON-FIXED-NEXT: tst w9, #0x1
168
158
; NEON-FIXED-NEXT: csel x0, x8, x0, ne
169
159
; NEON-FIXED-NEXT: add sp, sp, #16
170
160
; NEON-FIXED-NEXT: ret
@@ -179,13 +169,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
179
169
; SVE-FIXED-NEXT: str q0, [sp]
180
170
; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
181
171
; 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
183
173
; SVE-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
184
174
; SVE-FIXED-NEXT: fmov w8, s2
185
175
; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
186
176
; SVE-FIXED-NEXT: ldr x8, [x9]
187
- ; SVE-FIXED-NEXT: fmov w9, s1
188
- ; SVE-FIXED-NEXT: tst w9, #0x1
189
177
; SVE-FIXED-NEXT: csel x0, x8, x0, ne
190
178
; SVE-FIXED-NEXT: add sp, sp, #16
191
179
; SVE-FIXED-NEXT: ret
@@ -206,13 +194,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
206
194
; NEON-FIXED-NEXT: str q0, [sp]
207
195
; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
208
196
; 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
210
198
; NEON-FIXED-NEXT: umaxv h3, v3.4h
211
199
; NEON-FIXED-NEXT: fmov w8, s3
212
200
; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
213
- ; NEON-FIXED-NEXT: fmov w8, s1
214
201
; NEON-FIXED-NEXT: ldr s0, [x9]
215
- ; NEON-FIXED-NEXT: tst w8, #0x1
216
202
; NEON-FIXED-NEXT: fcsel s0, s0, s2, ne
217
203
; NEON-FIXED-NEXT: add sp, sp, #16
218
204
; NEON-FIXED-NEXT: ret
@@ -227,13 +213,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
227
213
; SVE-FIXED-NEXT: str q0, [sp]
228
214
; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
229
215
; 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
231
217
; SVE-FIXED-NEXT: umaxv h3, v3.4h
232
218
; SVE-FIXED-NEXT: fmov w8, s3
233
219
; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
234
- ; SVE-FIXED-NEXT: fmov w8, s1
235
220
; SVE-FIXED-NEXT: ldr s0, [x9]
236
- ; SVE-FIXED-NEXT: tst w8, #0x1
237
221
; SVE-FIXED-NEXT: fcsel s0, s0, s2, ne
238
222
; SVE-FIXED-NEXT: add sp, sp, #16
239
223
; SVE-FIXED-NEXT: ret
@@ -254,13 +238,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
254
238
; NEON-FIXED-NEXT: str q0, [sp]
255
239
; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
256
240
; 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
258
242
; NEON-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
259
243
; NEON-FIXED-NEXT: fmov w8, s3
260
244
; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
261
- ; NEON-FIXED-NEXT: fmov w8, s1
262
245
; NEON-FIXED-NEXT: ldr d0, [x9]
263
- ; NEON-FIXED-NEXT: tst w8, #0x1
264
246
; NEON-FIXED-NEXT: fcsel d0, d0, d2, ne
265
247
; NEON-FIXED-NEXT: add sp, sp, #16
266
248
; NEON-FIXED-NEXT: ret
@@ -275,13 +257,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
275
257
; SVE-FIXED-NEXT: str q0, [sp]
276
258
; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
277
259
; 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
279
261
; SVE-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
280
262
; SVE-FIXED-NEXT: fmov w8, s3
281
263
; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
282
- ; SVE-FIXED-NEXT: fmov w8, s1
283
264
; SVE-FIXED-NEXT: ldr d0, [x9]
284
- ; SVE-FIXED-NEXT: tst w8, #0x1
285
265
; SVE-FIXED-NEXT: fcsel d0, d0, d2, ne
286
266
; SVE-FIXED-NEXT: add sp, sp, #16
287
267
; SVE-FIXED-NEXT: ret
0 commit comments