brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 150a6f1 Raw
143 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+lsx < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+lsx < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+lsx < %s | FileCheck %s --check-prefix=LA645 6declare i8 @llvm.ctpop.i8(i8)7declare i16 @llvm.ctpop.i16(i16)8declare i32 @llvm.ctpop.i32(i32)9declare i64 @llvm.ctpop.i64(i64)10 11define i8 @test_ctpop_i8(i8 %a) nounwind {12; LA32R-LABEL: test_ctpop_i8:13; LA32R:       # %bb.0:14; LA32R-NEXT:    andi $a0, $a0, 25515; LA32R-NEXT:    vldi $vr0, 016; LA32R-NEXT:    vinsgr2vr.w $vr0, $a0, 017; LA32R-NEXT:    vpcnt.w $vr0, $vr018; LA32R-NEXT:    vpickve2gr.w $a0, $vr0, 019; LA32R-NEXT:    ret20;21; LA32S-LABEL: test_ctpop_i8:22; LA32S:       # %bb.0:23; LA32S-NEXT:    andi $a0, $a0, 25524; LA32S-NEXT:    vldi $vr0, 025; LA32S-NEXT:    vinsgr2vr.w $vr0, $a0, 026; LA32S-NEXT:    vpcnt.w $vr0, $vr027; LA32S-NEXT:    vpickve2gr.w $a0, $vr0, 028; LA32S-NEXT:    ret29;30; LA64-LABEL: test_ctpop_i8:31; LA64:       # %bb.0:32; LA64-NEXT:    andi $a0, $a0, 25533; LA64-NEXT:    vldi $vr0, 034; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 035; LA64-NEXT:    vpcnt.d $vr0, $vr036; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 037; LA64-NEXT:    ret38  %1 = call i8 @llvm.ctpop.i8(i8 %a)39  ret i8 %140}41 42define i16 @test_ctpop_i16(i16 %a) nounwind {43; LA32R-LABEL: test_ctpop_i16:44; LA32R:       # %bb.0:45; LA32R-NEXT:    lu12i.w $a1, 1546; LA32R-NEXT:    ori $a1, $a1, 409547; LA32R-NEXT:    and $a0, $a0, $a148; LA32R-NEXT:    vldi $vr0, 049; LA32R-NEXT:    vinsgr2vr.w $vr0, $a0, 050; LA32R-NEXT:    vpcnt.w $vr0, $vr051; LA32R-NEXT:    vpickve2gr.w $a0, $vr0, 052; LA32R-NEXT:    ret53;54; LA32S-LABEL: test_ctpop_i16:55; LA32S:       # %bb.0:56; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 057; LA32S-NEXT:    vldi $vr0, 058; LA32S-NEXT:    vinsgr2vr.w $vr0, $a0, 059; LA32S-NEXT:    vpcnt.w $vr0, $vr060; LA32S-NEXT:    vpickve2gr.w $a0, $vr0, 061; LA32S-NEXT:    ret62;63; LA64-LABEL: test_ctpop_i16:64; LA64:       # %bb.0:65; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 066; LA64-NEXT:    vldi $vr0, 067; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 068; LA64-NEXT:    vpcnt.d $vr0, $vr069; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 070; LA64-NEXT:    ret71  %1 = call i16 @llvm.ctpop.i16(i16 %a)72  ret i16 %173}74 75define i32 @test_ctpop_i32(i32 %a) nounwind {76; LA32R-LABEL: test_ctpop_i32:77; LA32R:       # %bb.0:78; LA32R-NEXT:    vldi $vr0, 079; LA32R-NEXT:    vinsgr2vr.w $vr0, $a0, 080; LA32R-NEXT:    vpcnt.w $vr0, $vr081; LA32R-NEXT:    vpickve2gr.w $a0, $vr0, 082; LA32R-NEXT:    ret83;84; LA32S-LABEL: test_ctpop_i32:85; LA32S:       # %bb.0:86; LA32S-NEXT:    vldi $vr0, 087; LA32S-NEXT:    vinsgr2vr.w $vr0, $a0, 088; LA32S-NEXT:    vpcnt.w $vr0, $vr089; LA32S-NEXT:    vpickve2gr.w $a0, $vr0, 090; LA32S-NEXT:    ret91;92; LA64-LABEL: test_ctpop_i32:93; LA64:       # %bb.0:94; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 095; LA64-NEXT:    vldi $vr0, 096; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 097; LA64-NEXT:    vpcnt.d $vr0, $vr098; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 099; LA64-NEXT:    ret100  %1 = call i32 @llvm.ctpop.i32(i32 %a)101  ret i32 %1102}103 104define i64 @test_ctpop_i64(i64 %a) nounwind {105; LA32R-LABEL: test_ctpop_i64:106; LA32R:       # %bb.0:107; LA32R-NEXT:    vldi $vr0, 0108; LA32R-NEXT:    vldi $vr1, 0109; LA32R-NEXT:    vinsgr2vr.w $vr1, $a1, 0110; LA32R-NEXT:    vpcnt.w $vr1, $vr1111; LA32R-NEXT:    vpickve2gr.w $a1, $vr1, 0112; LA32R-NEXT:    vinsgr2vr.w $vr0, $a0, 0113; LA32R-NEXT:    vpcnt.w $vr0, $vr0114; LA32R-NEXT:    vpickve2gr.w $a0, $vr0, 0115; LA32R-NEXT:    add.w $a0, $a0, $a1116; LA32R-NEXT:    move $a1, $zero117; LA32R-NEXT:    ret118;119; LA32S-LABEL: test_ctpop_i64:120; LA32S:       # %bb.0:121; LA32S-NEXT:    vldi $vr0, 0122; LA32S-NEXT:    vldi $vr1, 0123; LA32S-NEXT:    vinsgr2vr.w $vr1, $a1, 0124; LA32S-NEXT:    vpcnt.w $vr1, $vr1125; LA32S-NEXT:    vpickve2gr.w $a1, $vr1, 0126; LA32S-NEXT:    vinsgr2vr.w $vr0, $a0, 0127; LA32S-NEXT:    vpcnt.w $vr0, $vr0128; LA32S-NEXT:    vpickve2gr.w $a0, $vr0, 0129; LA32S-NEXT:    add.w $a0, $a0, $a1130; LA32S-NEXT:    move $a1, $zero131; LA32S-NEXT:    ret132;133; LA64-LABEL: test_ctpop_i64:134; LA64:       # %bb.0:135; LA64-NEXT:    vldi $vr0, 0136; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0137; LA64-NEXT:    vpcnt.d $vr0, $vr0138; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 0139; LA64-NEXT:    ret140  %1 = call i64 @llvm.ctpop.i64(i64 %a)141  ret i64 %1142}143