@@ -175,16 +175,11 @@ define i8 @test_ctpop_i8(i8 %a) nounwind {
175
175
;
176
176
; LA64-LABEL: test_ctpop_i8:
177
177
; LA64: # %bb.0:
178
- ; LA64-NEXT: srli.d $a1, $a0, 1
179
- ; LA64-NEXT: andi $a1, $a1, 85
180
- ; LA64-NEXT: sub.d $a0, $a0, $a1
181
- ; LA64-NEXT: andi $a1, $a0, 51
182
- ; LA64-NEXT: srli.d $a0, $a0, 2
183
- ; LA64-NEXT: andi $a0, $a0, 51
184
- ; LA64-NEXT: add.d $a0, $a1, $a0
185
- ; LA64-NEXT: srli.d $a1, $a0, 4
186
- ; LA64-NEXT: add.d $a0, $a0, $a1
187
- ; LA64-NEXT: andi $a0, $a0, 15
178
+ ; LA64-NEXT: andi $a0, $a0, 255
179
+ ; LA64-NEXT: vldi $vr0, 0
180
+ ; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
181
+ ; LA64-NEXT: vpcnt.d $vr0, $vr0
182
+ ; LA64-NEXT: vpickve2gr.d $a0, $vr0, 0
188
183
; LA64-NEXT: ret
189
184
%1 = call i8 @llvm.ctpop.i8 (i8 %a )
190
185
ret i8 %1
@@ -213,22 +208,11 @@ define i16 @test_ctpop_i16(i16 %a) nounwind {
213
208
;
214
209
; LA64-LABEL: test_ctpop_i16:
215
210
; LA64: # %bb.0:
216
- ; LA64-NEXT: srli.d $a1, $a0, 1
217
- ; LA64-NEXT: lu12i.w $a2, 5
218
- ; LA64-NEXT: ori $a2, $a2, 1365
219
- ; LA64-NEXT: and $a1, $a1, $a2
220
- ; LA64-NEXT: sub.d $a0, $a0, $a1
221
- ; LA64-NEXT: lu12i.w $a1, 3
222
- ; LA64-NEXT: ori $a1, $a1, 819
223
- ; LA64-NEXT: and $a2, $a0, $a1
224
- ; LA64-NEXT: srli.d $a0, $a0, 2
225
- ; LA64-NEXT: and $a0, $a0, $a1
226
- ; LA64-NEXT: add.d $a0, $a2, $a0
227
- ; LA64-NEXT: srli.d $a1, $a0, 4
228
- ; LA64-NEXT: add.d $a0, $a0, $a1
229
- ; LA64-NEXT: bstrpick.d $a1, $a0, 11, 8
230
- ; LA64-NEXT: andi $a0, $a0, 15
231
- ; LA64-NEXT: add.d $a0, $a0, $a1
211
+ ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
212
+ ; LA64-NEXT: vldi $vr0, 0
213
+ ; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
214
+ ; LA64-NEXT: vpcnt.d $vr0, $vr0
215
+ ; LA64-NEXT: vpickve2gr.d $a0, $vr0, 0
232
216
; LA64-NEXT: ret
233
217
%1 = call i16 @llvm.ctpop.i16 (i16 %a )
234
218
ret i16 %1
@@ -261,26 +245,11 @@ define i32 @test_ctpop_i32(i32 %a) nounwind {
261
245
;
262
246
; LA64-LABEL: test_ctpop_i32:
263
247
; LA64: # %bb.0:
264
- ; LA64-NEXT: srli.d $a1, $a0, 1
265
- ; LA64-NEXT: lu12i.w $a2, 349525
266
- ; LA64-NEXT: ori $a2, $a2, 1365
267
- ; LA64-NEXT: and $a1, $a1, $a2
268
- ; LA64-NEXT: sub.d $a0, $a0, $a1
269
- ; LA64-NEXT: lu12i.w $a1, 209715
270
- ; LA64-NEXT: ori $a1, $a1, 819
271
- ; LA64-NEXT: and $a2, $a0, $a1
272
- ; LA64-NEXT: srli.d $a0, $a0, 2
273
- ; LA64-NEXT: and $a0, $a0, $a1
274
- ; LA64-NEXT: add.d $a0, $a2, $a0
275
- ; LA64-NEXT: srli.d $a1, $a0, 4
276
- ; LA64-NEXT: add.d $a0, $a0, $a1
277
- ; LA64-NEXT: lu12i.w $a1, 61680
278
- ; LA64-NEXT: ori $a1, $a1, 3855
279
- ; LA64-NEXT: and $a0, $a0, $a1
280
- ; LA64-NEXT: lu12i.w $a1, 4112
281
- ; LA64-NEXT: ori $a1, $a1, 257
282
- ; LA64-NEXT: mul.d $a0, $a0, $a1
283
- ; LA64-NEXT: bstrpick.d $a0, $a0, 31, 24
248
+ ; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
249
+ ; LA64-NEXT: vldi $vr0, 0
250
+ ; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
251
+ ; LA64-NEXT: vpcnt.d $vr0, $vr0
252
+ ; LA64-NEXT: vpickve2gr.d $a0, $vr0, 0
284
253
; LA64-NEXT: ret
285
254
%1 = call i32 @llvm.ctpop.i32 (i32 %a )
286
255
ret i32 %1
@@ -327,30 +296,10 @@ define i64 @test_ctpop_i64(i64 %a) nounwind {
327
296
;
328
297
; LA64-LABEL: test_ctpop_i64:
329
298
; LA64: # %bb.0:
330
- ; LA64-NEXT: srli.d $a1, $a0, 1
331
- ; LA64-NEXT: lu12i.w $a2, 349525
332
- ; LA64-NEXT: ori $a2, $a2, 1365
333
- ; LA64-NEXT: bstrins.d $a2, $a2, 62, 32
334
- ; LA64-NEXT: and $a1, $a1, $a2
335
- ; LA64-NEXT: sub.d $a0, $a0, $a1
336
- ; LA64-NEXT: lu12i.w $a1, 209715
337
- ; LA64-NEXT: ori $a1, $a1, 819
338
- ; LA64-NEXT: bstrins.d $a1, $a1, 61, 32
339
- ; LA64-NEXT: and $a2, $a0, $a1
340
- ; LA64-NEXT: srli.d $a0, $a0, 2
341
- ; LA64-NEXT: and $a0, $a0, $a1
342
- ; LA64-NEXT: add.d $a0, $a2, $a0
343
- ; LA64-NEXT: srli.d $a1, $a0, 4
344
- ; LA64-NEXT: add.d $a0, $a0, $a1
345
- ; LA64-NEXT: lu12i.w $a1, 61680
346
- ; LA64-NEXT: ori $a1, $a1, 3855
347
- ; LA64-NEXT: bstrins.d $a1, $a1, 59, 32
348
- ; LA64-NEXT: and $a0, $a0, $a1
349
- ; LA64-NEXT: lu12i.w $a1, 4112
350
- ; LA64-NEXT: ori $a1, $a1, 257
351
- ; LA64-NEXT: bstrins.d $a1, $a1, 56, 32
352
- ; LA64-NEXT: mul.d $a0, $a0, $a1
353
- ; LA64-NEXT: srli.d $a0, $a0, 56
299
+ ; LA64-NEXT: vldi $vr0, 0
300
+ ; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
301
+ ; LA64-NEXT: vpcnt.d $vr0, $vr0
302
+ ; LA64-NEXT: vpickve2gr.d $a0, $vr0, 0
354
303
; LA64-NEXT: ret
355
304
%1 = call i64 @llvm.ctpop.i64 (i64 %a )
356
305
ret i64 %1
0 commit comments