@@ -175,16 +175,11 @@ define i8 @test_ctpop_i8(i8 %a) nounwind {
175175;
176176; LA64-LABEL: test_ctpop_i8:
177177; 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
188183; LA64-NEXT: ret
189184 %1 = call i8 @llvm.ctpop.i8 (i8 %a )
190185 ret i8 %1
@@ -213,22 +208,11 @@ define i16 @test_ctpop_i16(i16 %a) nounwind {
213208;
214209; LA64-LABEL: test_ctpop_i16:
215210; 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
232216; LA64-NEXT: ret
233217 %1 = call i16 @llvm.ctpop.i16 (i16 %a )
234218 ret i16 %1
@@ -261,26 +245,11 @@ define i32 @test_ctpop_i32(i32 %a) nounwind {
261245;
262246; LA64-LABEL: test_ctpop_i32:
263247; 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
284253; LA64-NEXT: ret
285254 %1 = call i32 @llvm.ctpop.i32 (i32 %a )
286255 ret i32 %1
@@ -327,30 +296,10 @@ define i64 @test_ctpop_i64(i64 %a) nounwind {
327296;
328297; LA64-LABEL: test_ctpop_i64:
329298; 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
354303; LA64-NEXT: ret
355304 %1 = call i64 @llvm.ctpop.i64 (i64 %a )
356305 ret i64 %1
0 commit comments