brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.2 KiB · 27be02c Raw
1053 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA645 6declare i8 @llvm.ctlz.i8(i8, i1)7declare i16 @llvm.ctlz.i16(i16, i1)8declare i32 @llvm.ctlz.i32(i32, i1)9declare i64 @llvm.ctlz.i64(i64, i1)10declare i8 @llvm.ctpop.i8(i8)11declare i16 @llvm.ctpop.i16(i16)12declare i32 @llvm.ctpop.i32(i32)13declare i64 @llvm.ctpop.i64(i64)14declare i8 @llvm.cttz.i8(i8, i1)15declare i16 @llvm.cttz.i16(i16, i1)16declare i32 @llvm.cttz.i32(i32, i1)17declare i64 @llvm.cttz.i64(i64, i1)18 19define i8 @test_ctlz_i8(i8 %a) nounwind {20; LA32R-LABEL: test_ctlz_i8:21; LA32R:       # %bb.0:22; LA32R-NEXT:    andi $a1, $a0, 25423; LA32R-NEXT:    srli.w $a1, $a1, 124; LA32R-NEXT:    or $a0, $a0, $a125; LA32R-NEXT:    andi $a1, $a0, 25226; LA32R-NEXT:    srli.w $a1, $a1, 227; LA32R-NEXT:    or $a0, $a0, $a128; LA32R-NEXT:    andi $a1, $a0, 24029; LA32R-NEXT:    srli.w $a1, $a1, 430; LA32R-NEXT:    nor $a0, $a0, $a131; LA32R-NEXT:    srli.w $a1, $a0, 132; LA32R-NEXT:    andi $a1, $a1, 8533; LA32R-NEXT:    sub.w $a0, $a0, $a134; LA32R-NEXT:    andi $a1, $a0, 5135; LA32R-NEXT:    srli.w $a0, $a0, 236; LA32R-NEXT:    andi $a0, $a0, 5137; LA32R-NEXT:    add.w $a0, $a1, $a038; LA32R-NEXT:    srli.w $a1, $a0, 439; LA32R-NEXT:    add.w $a0, $a0, $a140; LA32R-NEXT:    andi $a0, $a0, 1541; LA32R-NEXT:    ret42;43; LA32S-LABEL: test_ctlz_i8:44; LA32S:       # %bb.0:45; LA32S-NEXT:    andi $a0, $a0, 25546; LA32S-NEXT:    clz.w $a0, $a047; LA32S-NEXT:    addi.w $a0, $a0, -2448; LA32S-NEXT:    ret49;50; LA64-LABEL: test_ctlz_i8:51; LA64:       # %bb.0:52; LA64-NEXT:    andi $a0, $a0, 25553; LA64-NEXT:    clz.d $a0, $a054; LA64-NEXT:    addi.d $a0, $a0, -5655; LA64-NEXT:    ret56  %tmp = call i8 @llvm.ctlz.i8(i8 %a, i1 false)57  ret i8 %tmp58}59 60define i16 @test_ctlz_i16(i16 %a) nounwind {61; LA32R-LABEL: test_ctlz_i16:62; LA32R:       # %bb.0:63; LA32R-NEXT:    lu12i.w $a1, 1564; LA32R-NEXT:    ori $a2, $a1, 409465; LA32R-NEXT:    and $a2, $a0, $a266; LA32R-NEXT:    srli.w $a2, $a2, 167; LA32R-NEXT:    or $a0, $a0, $a268; LA32R-NEXT:    ori $a2, $a1, 409269; LA32R-NEXT:    and $a2, $a0, $a270; LA32R-NEXT:    srli.w $a2, $a2, 271; LA32R-NEXT:    or $a0, $a0, $a272; LA32R-NEXT:    ori $a2, $a1, 408073; LA32R-NEXT:    and $a2, $a0, $a274; LA32R-NEXT:    srli.w $a2, $a2, 475; LA32R-NEXT:    or $a0, $a0, $a276; LA32R-NEXT:    ori $a1, $a1, 384077; LA32R-NEXT:    and $a1, $a0, $a178; LA32R-NEXT:    srli.w $a1, $a1, 879; LA32R-NEXT:    nor $a0, $a0, $a180; LA32R-NEXT:    srli.w $a1, $a0, 181; LA32R-NEXT:    lu12i.w $a2, 582; LA32R-NEXT:    ori $a2, $a2, 136583; LA32R-NEXT:    and $a1, $a1, $a284; LA32R-NEXT:    sub.w $a0, $a0, $a185; LA32R-NEXT:    lu12i.w $a1, 386; LA32R-NEXT:    ori $a1, $a1, 81987; LA32R-NEXT:    and $a2, $a0, $a188; LA32R-NEXT:    srli.w $a0, $a0, 289; LA32R-NEXT:    and $a0, $a0, $a190; LA32R-NEXT:    add.w $a0, $a2, $a091; LA32R-NEXT:    srli.w $a1, $a0, 492; LA32R-NEXT:    add.w $a0, $a0, $a193; LA32R-NEXT:    andi $a1, $a0, 1594; LA32R-NEXT:    andi $a0, $a0, 384095; LA32R-NEXT:    srli.w $a0, $a0, 896; LA32R-NEXT:    add.w $a0, $a1, $a097; LA32R-NEXT:    ret98;99; LA32S-LABEL: test_ctlz_i16:100; LA32S:       # %bb.0:101; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 0102; LA32S-NEXT:    clz.w $a0, $a0103; LA32S-NEXT:    addi.w $a0, $a0, -16104; LA32S-NEXT:    ret105;106; LA64-LABEL: test_ctlz_i16:107; LA64:       # %bb.0:108; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 0109; LA64-NEXT:    clz.d $a0, $a0110; LA64-NEXT:    addi.d $a0, $a0, -48111; LA64-NEXT:    ret112  %tmp = call i16 @llvm.ctlz.i16(i16 %a, i1 false)113  ret i16 %tmp114}115 116define i32 @test_ctlz_i32(i32 %a) nounwind {117; LA32R-LABEL: test_ctlz_i32:118; LA32R:       # %bb.0:119; LA32R-NEXT:    srli.w $a1, $a0, 1120; LA32R-NEXT:    or $a0, $a0, $a1121; LA32R-NEXT:    srli.w $a1, $a0, 2122; LA32R-NEXT:    or $a0, $a0, $a1123; LA32R-NEXT:    srli.w $a1, $a0, 4124; LA32R-NEXT:    or $a0, $a0, $a1125; LA32R-NEXT:    srli.w $a1, $a0, 8126; LA32R-NEXT:    or $a0, $a0, $a1127; LA32R-NEXT:    srli.w $a1, $a0, 16128; LA32R-NEXT:    nor $a0, $a0, $a1129; LA32R-NEXT:    srli.w $a1, $a0, 1130; LA32R-NEXT:    lu12i.w $a2, 349525131; LA32R-NEXT:    ori $a2, $a2, 1365132; LA32R-NEXT:    and $a1, $a1, $a2133; LA32R-NEXT:    sub.w $a0, $a0, $a1134; LA32R-NEXT:    lu12i.w $a1, 209715135; LA32R-NEXT:    ori $a1, $a1, 819136; LA32R-NEXT:    and $a2, $a0, $a1137; LA32R-NEXT:    srli.w $a0, $a0, 2138; LA32R-NEXT:    and $a0, $a0, $a1139; LA32R-NEXT:    add.w $a0, $a2, $a0140; LA32R-NEXT:    srli.w $a1, $a0, 4141; LA32R-NEXT:    add.w $a0, $a0, $a1142; LA32R-NEXT:    lu12i.w $a1, 61680143; LA32R-NEXT:    ori $a1, $a1, 3855144; LA32R-NEXT:    and $a0, $a0, $a1145; LA32R-NEXT:    lu12i.w $a1, 4112146; LA32R-NEXT:    ori $a1, $a1, 257147; LA32R-NEXT:    mul.w $a0, $a0, $a1148; LA32R-NEXT:    srli.w $a0, $a0, 24149; LA32R-NEXT:    ret150;151; LA32S-LABEL: test_ctlz_i32:152; LA32S:       # %bb.0:153; LA32S-NEXT:    clz.w $a0, $a0154; LA32S-NEXT:    ret155;156; LA64-LABEL: test_ctlz_i32:157; LA64:       # %bb.0:158; LA64-NEXT:    clz.w $a0, $a0159; LA64-NEXT:    ret160  %tmp = call i32 @llvm.ctlz.i32(i32 %a, i1 false)161  ret i32 %tmp162}163 164define i64 @test_ctlz_i64(i64 %a) nounwind {165; LA32R-LABEL: test_ctlz_i64:166; LA32R:       # %bb.0:167; LA32R-NEXT:    lu12i.w $a2, 349525168; LA32R-NEXT:    ori $a5, $a2, 1365169; LA32R-NEXT:    lu12i.w $a2, 209715170; LA32R-NEXT:    ori $a4, $a2, 819171; LA32R-NEXT:    lu12i.w $a2, 61680172; LA32R-NEXT:    ori $a2, $a2, 3855173; LA32R-NEXT:    lu12i.w $a3, 4112174; LA32R-NEXT:    ori $a3, $a3, 257175; LA32R-NEXT:    bne $a1, $zero, .LBB3_2176; LA32R-NEXT:  # %bb.1:177; LA32R-NEXT:    srli.w $a1, $a0, 1178; LA32R-NEXT:    or $a0, $a0, $a1179; LA32R-NEXT:    srli.w $a1, $a0, 2180; LA32R-NEXT:    or $a0, $a0, $a1181; LA32R-NEXT:    srli.w $a1, $a0, 4182; LA32R-NEXT:    or $a0, $a0, $a1183; LA32R-NEXT:    srli.w $a1, $a0, 8184; LA32R-NEXT:    or $a0, $a0, $a1185; LA32R-NEXT:    srli.w $a1, $a0, 16186; LA32R-NEXT:    nor $a0, $a0, $a1187; LA32R-NEXT:    srli.w $a1, $a0, 1188; LA32R-NEXT:    and $a1, $a1, $a5189; LA32R-NEXT:    sub.w $a0, $a0, $a1190; LA32R-NEXT:    and $a1, $a0, $a4191; LA32R-NEXT:    srli.w $a0, $a0, 2192; LA32R-NEXT:    and $a0, $a0, $a4193; LA32R-NEXT:    add.w $a0, $a1, $a0194; LA32R-NEXT:    srli.w $a1, $a0, 4195; LA32R-NEXT:    add.w $a0, $a0, $a1196; LA32R-NEXT:    and $a0, $a0, $a2197; LA32R-NEXT:    mul.w $a0, $a0, $a3198; LA32R-NEXT:    srli.w $a0, $a0, 24199; LA32R-NEXT:    addi.w $a0, $a0, 32200; LA32R-NEXT:    move $a1, $zero201; LA32R-NEXT:    ret202; LA32R-NEXT:  .LBB3_2:203; LA32R-NEXT:    srli.w $a0, $a1, 1204; LA32R-NEXT:    or $a0, $a1, $a0205; LA32R-NEXT:    srli.w $a1, $a0, 2206; LA32R-NEXT:    or $a0, $a0, $a1207; LA32R-NEXT:    srli.w $a1, $a0, 4208; LA32R-NEXT:    or $a0, $a0, $a1209; LA32R-NEXT:    srli.w $a1, $a0, 8210; LA32R-NEXT:    or $a0, $a0, $a1211; LA32R-NEXT:    srli.w $a1, $a0, 16212; LA32R-NEXT:    nor $a0, $a0, $a1213; LA32R-NEXT:    srli.w $a1, $a0, 1214; LA32R-NEXT:    and $a1, $a1, $a5215; LA32R-NEXT:    sub.w $a0, $a0, $a1216; LA32R-NEXT:    and $a1, $a0, $a4217; LA32R-NEXT:    srli.w $a0, $a0, 2218; LA32R-NEXT:    and $a0, $a0, $a4219; LA32R-NEXT:    add.w $a0, $a1, $a0220; LA32R-NEXT:    srli.w $a1, $a0, 4221; LA32R-NEXT:    add.w $a0, $a0, $a1222; LA32R-NEXT:    and $a0, $a0, $a2223; LA32R-NEXT:    mul.w $a0, $a0, $a3224; LA32R-NEXT:    srli.w $a0, $a0, 24225; LA32R-NEXT:    move $a1, $zero226; LA32R-NEXT:    ret227;228; LA32S-LABEL: test_ctlz_i64:229; LA32S:       # %bb.0:230; LA32S-NEXT:    sltu $a2, $zero, $a1231; LA32S-NEXT:    clz.w $a1, $a1232; LA32S-NEXT:    maskeqz $a1, $a1, $a2233; LA32S-NEXT:    clz.w $a0, $a0234; LA32S-NEXT:    addi.w $a0, $a0, 32235; LA32S-NEXT:    masknez $a0, $a0, $a2236; LA32S-NEXT:    or $a0, $a1, $a0237; LA32S-NEXT:    move $a1, $zero238; LA32S-NEXT:    ret239;240; LA64-LABEL: test_ctlz_i64:241; LA64:       # %bb.0:242; LA64-NEXT:    clz.d $a0, $a0243; LA64-NEXT:    ret244  %tmp = call i64 @llvm.ctlz.i64(i64 %a, i1 false)245  ret i64 %tmp246}247 248define i8 @test_not_ctlz_i8(i8 %a) nounwind {249; LA32R-LABEL: test_not_ctlz_i8:250; LA32R:       # %bb.0:251; LA32R-NEXT:    ori $a1, $zero, 254252; LA32R-NEXT:    andn $a1, $a1, $a0253; LA32R-NEXT:    srli.w $a1, $a1, 1254; LA32R-NEXT:    orn $a0, $a1, $a0255; LA32R-NEXT:    andi $a1, $a0, 252256; LA32R-NEXT:    srli.w $a1, $a1, 2257; LA32R-NEXT:    or $a0, $a0, $a1258; LA32R-NEXT:    andi $a1, $a0, 240259; LA32R-NEXT:    srli.w $a1, $a1, 4260; LA32R-NEXT:    nor $a0, $a0, $a1261; LA32R-NEXT:    srli.w $a1, $a0, 1262; LA32R-NEXT:    andi $a1, $a1, 85263; LA32R-NEXT:    sub.w $a0, $a0, $a1264; LA32R-NEXT:    andi $a1, $a0, 51265; LA32R-NEXT:    srli.w $a0, $a0, 2266; LA32R-NEXT:    andi $a0, $a0, 51267; LA32R-NEXT:    add.w $a0, $a1, $a0268; LA32R-NEXT:    srli.w $a1, $a0, 4269; LA32R-NEXT:    add.w $a0, $a0, $a1270; LA32R-NEXT:    andi $a0, $a0, 15271; LA32R-NEXT:    ret272;273; LA32S-LABEL: test_not_ctlz_i8:274; LA32S:       # %bb.0:275; LA32S-NEXT:    slli.w $a0, $a0, 24276; LA32S-NEXT:    clo.w $a0, $a0277; LA32S-NEXT:    ret278;279; LA64-LABEL: test_not_ctlz_i8:280; LA64:       # %bb.0:281; LA64-NEXT:    slli.d $a0, $a0, 56282; LA64-NEXT:    clo.d $a0, $a0283; LA64-NEXT:    ret284  %neg = xor i8 %a, -1285  %tmp = call i8 @llvm.ctlz.i8(i8 %neg, i1 false)286  ret i8 %tmp287}288 289define i16 @test_not_ctlz_i16(i16 %a) nounwind {290; LA32R-LABEL: test_not_ctlz_i16:291; LA32R:       # %bb.0:292; LA32R-NEXT:    lu12i.w $a1, 15293; LA32R-NEXT:    ori $a2, $a1, 4094294; LA32R-NEXT:    andn $a2, $a2, $a0295; LA32R-NEXT:    srli.w $a2, $a2, 1296; LA32R-NEXT:    orn $a0, $a2, $a0297; LA32R-NEXT:    ori $a2, $a1, 4092298; LA32R-NEXT:    and $a2, $a0, $a2299; LA32R-NEXT:    srli.w $a2, $a2, 2300; LA32R-NEXT:    or $a0, $a0, $a2301; LA32R-NEXT:    ori $a2, $a1, 4080302; LA32R-NEXT:    and $a2, $a0, $a2303; LA32R-NEXT:    srli.w $a2, $a2, 4304; LA32R-NEXT:    or $a0, $a0, $a2305; LA32R-NEXT:    ori $a1, $a1, 3840306; LA32R-NEXT:    and $a1, $a0, $a1307; LA32R-NEXT:    srli.w $a1, $a1, 8308; LA32R-NEXT:    nor $a0, $a0, $a1309; LA32R-NEXT:    srli.w $a1, $a0, 1310; LA32R-NEXT:    lu12i.w $a2, 5311; LA32R-NEXT:    ori $a2, $a2, 1365312; LA32R-NEXT:    and $a1, $a1, $a2313; LA32R-NEXT:    sub.w $a0, $a0, $a1314; LA32R-NEXT:    lu12i.w $a1, 3315; LA32R-NEXT:    ori $a1, $a1, 819316; LA32R-NEXT:    and $a2, $a0, $a1317; LA32R-NEXT:    srli.w $a0, $a0, 2318; LA32R-NEXT:    and $a0, $a0, $a1319; LA32R-NEXT:    add.w $a0, $a2, $a0320; LA32R-NEXT:    srli.w $a1, $a0, 4321; LA32R-NEXT:    add.w $a0, $a0, $a1322; LA32R-NEXT:    andi $a1, $a0, 15323; LA32R-NEXT:    andi $a0, $a0, 3840324; LA32R-NEXT:    srli.w $a0, $a0, 8325; LA32R-NEXT:    add.w $a0, $a1, $a0326; LA32R-NEXT:    ret327;328; LA32S-LABEL: test_not_ctlz_i16:329; LA32S:       # %bb.0:330; LA32S-NEXT:    slli.w $a0, $a0, 16331; LA32S-NEXT:    clo.w $a0, $a0332; LA32S-NEXT:    ret333;334; LA64-LABEL: test_not_ctlz_i16:335; LA64:       # %bb.0:336; LA64-NEXT:    slli.d $a0, $a0, 48337; LA64-NEXT:    clo.d $a0, $a0338; LA64-NEXT:    ret339  %neg = xor i16 %a, -1340  %tmp = call i16 @llvm.ctlz.i16(i16 %neg, i1 false)341  ret i16 %tmp342}343 344define i32 @test_not_ctlz_i32(i32 %a) nounwind {345; LA32R-LABEL: test_not_ctlz_i32:346; LA32R:       # %bb.0:347; LA32R-NEXT:    nor $a1, $a0, $zero348; LA32R-NEXT:    srli.w $a1, $a1, 1349; LA32R-NEXT:    orn $a0, $a1, $a0350; LA32R-NEXT:    srli.w $a1, $a0, 2351; LA32R-NEXT:    or $a0, $a0, $a1352; LA32R-NEXT:    srli.w $a1, $a0, 4353; LA32R-NEXT:    or $a0, $a0, $a1354; LA32R-NEXT:    srli.w $a1, $a0, 8355; LA32R-NEXT:    or $a0, $a0, $a1356; LA32R-NEXT:    srli.w $a1, $a0, 16357; LA32R-NEXT:    nor $a0, $a0, $a1358; LA32R-NEXT:    srli.w $a1, $a0, 1359; LA32R-NEXT:    lu12i.w $a2, 349525360; LA32R-NEXT:    ori $a2, $a2, 1365361; LA32R-NEXT:    and $a1, $a1, $a2362; LA32R-NEXT:    sub.w $a0, $a0, $a1363; LA32R-NEXT:    lu12i.w $a1, 209715364; LA32R-NEXT:    ori $a1, $a1, 819365; LA32R-NEXT:    and $a2, $a0, $a1366; LA32R-NEXT:    srli.w $a0, $a0, 2367; LA32R-NEXT:    and $a0, $a0, $a1368; LA32R-NEXT:    add.w $a0, $a2, $a0369; LA32R-NEXT:    srli.w $a1, $a0, 4370; LA32R-NEXT:    add.w $a0, $a0, $a1371; LA32R-NEXT:    lu12i.w $a1, 61680372; LA32R-NEXT:    ori $a1, $a1, 3855373; LA32R-NEXT:    and $a0, $a0, $a1374; LA32R-NEXT:    lu12i.w $a1, 4112375; LA32R-NEXT:    ori $a1, $a1, 257376; LA32R-NEXT:    mul.w $a0, $a0, $a1377; LA32R-NEXT:    srli.w $a0, $a0, 24378; LA32R-NEXT:    ret379;380; LA32S-LABEL: test_not_ctlz_i32:381; LA32S:       # %bb.0:382; LA32S-NEXT:    clo.w $a0, $a0383; LA32S-NEXT:    ret384;385; LA64-LABEL: test_not_ctlz_i32:386; LA64:       # %bb.0:387; LA64-NEXT:    clo.w $a0, $a0388; LA64-NEXT:    ret389  %neg = xor i32 %a, -1390  %tmp = call i32 @llvm.ctlz.i32(i32 %neg, i1 false)391  ret i32 %tmp392}393 394define i64 @test_not_ctlz_i64(i64 %a) nounwind {395; LA32R-LABEL: test_not_ctlz_i64:396; LA32R:       # %bb.0:397; LA32R-NEXT:    nor $a6, $a1, $zero398; LA32R-NEXT:    lu12i.w $a2, 349525399; LA32R-NEXT:    ori $a5, $a2, 1365400; LA32R-NEXT:    lu12i.w $a2, 209715401; LA32R-NEXT:    ori $a4, $a2, 819402; LA32R-NEXT:    lu12i.w $a2, 61680403; LA32R-NEXT:    ori $a2, $a2, 3855404; LA32R-NEXT:    lu12i.w $a3, 4112405; LA32R-NEXT:    ori $a3, $a3, 257406; LA32R-NEXT:    bne $a6, $zero, .LBB7_2407; LA32R-NEXT:  # %bb.1:408; LA32R-NEXT:    nor $a1, $a0, $zero409; LA32R-NEXT:    srli.w $a1, $a1, 1410; LA32R-NEXT:    orn $a0, $a1, $a0411; LA32R-NEXT:    srli.w $a1, $a0, 2412; LA32R-NEXT:    or $a0, $a0, $a1413; LA32R-NEXT:    srli.w $a1, $a0, 4414; LA32R-NEXT:    or $a0, $a0, $a1415; LA32R-NEXT:    srli.w $a1, $a0, 8416; LA32R-NEXT:    or $a0, $a0, $a1417; LA32R-NEXT:    srli.w $a1, $a0, 16418; LA32R-NEXT:    nor $a0, $a0, $a1419; LA32R-NEXT:    srli.w $a1, $a0, 1420; LA32R-NEXT:    and $a1, $a1, $a5421; LA32R-NEXT:    sub.w $a0, $a0, $a1422; LA32R-NEXT:    and $a1, $a0, $a4423; LA32R-NEXT:    srli.w $a0, $a0, 2424; LA32R-NEXT:    and $a0, $a0, $a4425; LA32R-NEXT:    add.w $a0, $a1, $a0426; LA32R-NEXT:    srli.w $a1, $a0, 4427; LA32R-NEXT:    add.w $a0, $a0, $a1428; LA32R-NEXT:    and $a0, $a0, $a2429; LA32R-NEXT:    mul.w $a0, $a0, $a3430; LA32R-NEXT:    srli.w $a0, $a0, 24431; LA32R-NEXT:    addi.w $a0, $a0, 32432; LA32R-NEXT:    move $a1, $zero433; LA32R-NEXT:    ret434; LA32R-NEXT:  .LBB7_2:435; LA32R-NEXT:    srli.w $a0, $a6, 1436; LA32R-NEXT:    orn $a0, $a0, $a1437; LA32R-NEXT:    srli.w $a1, $a0, 2438; LA32R-NEXT:    or $a0, $a0, $a1439; LA32R-NEXT:    srli.w $a1, $a0, 4440; LA32R-NEXT:    or $a0, $a0, $a1441; LA32R-NEXT:    srli.w $a1, $a0, 8442; LA32R-NEXT:    or $a0, $a0, $a1443; LA32R-NEXT:    srli.w $a1, $a0, 16444; LA32R-NEXT:    nor $a0, $a0, $a1445; LA32R-NEXT:    srli.w $a1, $a0, 1446; LA32R-NEXT:    and $a1, $a1, $a5447; LA32R-NEXT:    sub.w $a0, $a0, $a1448; LA32R-NEXT:    and $a1, $a0, $a4449; LA32R-NEXT:    srli.w $a0, $a0, 2450; LA32R-NEXT:    and $a0, $a0, $a4451; LA32R-NEXT:    add.w $a0, $a1, $a0452; LA32R-NEXT:    srli.w $a1, $a0, 4453; LA32R-NEXT:    add.w $a0, $a0, $a1454; LA32R-NEXT:    and $a0, $a0, $a2455; LA32R-NEXT:    mul.w $a0, $a0, $a3456; LA32R-NEXT:    srli.w $a0, $a0, 24457; LA32R-NEXT:    move $a1, $zero458; LA32R-NEXT:    ret459;460; LA32S-LABEL: test_not_ctlz_i64:461; LA32S:       # %bb.0:462; LA32S-NEXT:    nor $a2, $a1, $zero463; LA32S-NEXT:    sltu $a2, $zero, $a2464; LA32S-NEXT:    clo.w $a0, $a0465; LA32S-NEXT:    addi.w $a0, $a0, 32466; LA32S-NEXT:    masknez $a0, $a0, $a2467; LA32S-NEXT:    clo.w $a1, $a1468; LA32S-NEXT:    maskeqz $a1, $a1, $a2469; LA32S-NEXT:    or $a0, $a1, $a0470; LA32S-NEXT:    move $a1, $zero471; LA32S-NEXT:    ret472;473; LA64-LABEL: test_not_ctlz_i64:474; LA64:       # %bb.0:475; LA64-NEXT:    clo.d $a0, $a0476; LA64-NEXT:    ret477  %neg = xor i64 %a, -1478  %tmp = call i64 @llvm.ctlz.i64(i64 %neg, i1 false)479  ret i64 %tmp480}481 482define i8 @test_ctpop_i8(i8 %a) nounwind {483; LA32R-LABEL: test_ctpop_i8:484; LA32R:       # %bb.0:485; LA32R-NEXT:    srli.w $a1, $a0, 1486; LA32R-NEXT:    andi $a1, $a1, 85487; LA32R-NEXT:    sub.w $a0, $a0, $a1488; LA32R-NEXT:    andi $a1, $a0, 51489; LA32R-NEXT:    srli.w $a0, $a0, 2490; LA32R-NEXT:    andi $a0, $a0, 51491; LA32R-NEXT:    add.w $a0, $a1, $a0492; LA32R-NEXT:    srli.w $a1, $a0, 4493; LA32R-NEXT:    add.w $a0, $a0, $a1494; LA32R-NEXT:    andi $a0, $a0, 15495; LA32R-NEXT:    ret496;497; LA32S-LABEL: test_ctpop_i8:498; LA32S:       # %bb.0:499; LA32S-NEXT:    srli.w $a1, $a0, 1500; LA32S-NEXT:    andi $a1, $a1, 85501; LA32S-NEXT:    sub.w $a0, $a0, $a1502; LA32S-NEXT:    andi $a1, $a0, 51503; LA32S-NEXT:    srli.w $a0, $a0, 2504; LA32S-NEXT:    andi $a0, $a0, 51505; LA32S-NEXT:    add.w $a0, $a1, $a0506; LA32S-NEXT:    srli.w $a1, $a0, 4507; LA32S-NEXT:    add.w $a0, $a0, $a1508; LA32S-NEXT:    andi $a0, $a0, 15509; LA32S-NEXT:    ret510;511; LA64-LABEL: test_ctpop_i8:512; LA64:       # %bb.0:513; LA64-NEXT:    andi $a0, $a0, 255514; LA64-NEXT:    vldi $vr0, 0515; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0516; LA64-NEXT:    vpcnt.d $vr0, $vr0517; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 0518; LA64-NEXT:    ret519  %1 = call i8 @llvm.ctpop.i8(i8 %a)520  ret i8 %1521}522 523define i16 @test_ctpop_i16(i16 %a) nounwind {524; LA32R-LABEL: test_ctpop_i16:525; LA32R:       # %bb.0:526; LA32R-NEXT:    srli.w $a1, $a0, 1527; LA32R-NEXT:    lu12i.w $a2, 5528; LA32R-NEXT:    ori $a2, $a2, 1365529; LA32R-NEXT:    and $a1, $a1, $a2530; LA32R-NEXT:    sub.w $a0, $a0, $a1531; LA32R-NEXT:    lu12i.w $a1, 3532; LA32R-NEXT:    ori $a1, $a1, 819533; LA32R-NEXT:    and $a2, $a0, $a1534; LA32R-NEXT:    srli.w $a0, $a0, 2535; LA32R-NEXT:    and $a0, $a0, $a1536; LA32R-NEXT:    add.w $a0, $a2, $a0537; LA32R-NEXT:    srli.w $a1, $a0, 4538; LA32R-NEXT:    add.w $a0, $a0, $a1539; LA32R-NEXT:    andi $a1, $a0, 15540; LA32R-NEXT:    andi $a0, $a0, 3840541; LA32R-NEXT:    srli.w $a0, $a0, 8542; LA32R-NEXT:    add.w $a0, $a1, $a0543; LA32R-NEXT:    ret544;545; LA32S-LABEL: test_ctpop_i16:546; LA32S:       # %bb.0:547; LA32S-NEXT:    srli.w $a1, $a0, 1548; LA32S-NEXT:    lu12i.w $a2, 5549; LA32S-NEXT:    ori $a2, $a2, 1365550; LA32S-NEXT:    and $a1, $a1, $a2551; LA32S-NEXT:    sub.w $a0, $a0, $a1552; LA32S-NEXT:    lu12i.w $a1, 3553; LA32S-NEXT:    ori $a1, $a1, 819554; LA32S-NEXT:    and $a2, $a0, $a1555; LA32S-NEXT:    srli.w $a0, $a0, 2556; LA32S-NEXT:    and $a0, $a0, $a1557; LA32S-NEXT:    add.w $a0, $a2, $a0558; LA32S-NEXT:    srli.w $a1, $a0, 4559; LA32S-NEXT:    add.w $a0, $a0, $a1560; LA32S-NEXT:    bstrpick.w $a1, $a0, 11, 8561; LA32S-NEXT:    andi $a0, $a0, 15562; LA32S-NEXT:    add.w $a0, $a0, $a1563; LA32S-NEXT:    ret564;565; LA64-LABEL: test_ctpop_i16:566; LA64:       # %bb.0:567; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 0568; LA64-NEXT:    vldi $vr0, 0569; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0570; LA64-NEXT:    vpcnt.d $vr0, $vr0571; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 0572; LA64-NEXT:    ret573  %1 = call i16 @llvm.ctpop.i16(i16 %a)574  ret i16 %1575}576 577define i32 @test_ctpop_i32(i32 %a) nounwind {578; LA32R-LABEL: test_ctpop_i32:579; LA32R:       # %bb.0:580; LA32R-NEXT:    srli.w $a1, $a0, 1581; LA32R-NEXT:    lu12i.w $a2, 349525582; LA32R-NEXT:    ori $a2, $a2, 1365583; LA32R-NEXT:    and $a1, $a1, $a2584; LA32R-NEXT:    sub.w $a0, $a0, $a1585; LA32R-NEXT:    lu12i.w $a1, 209715586; LA32R-NEXT:    ori $a1, $a1, 819587; LA32R-NEXT:    and $a2, $a0, $a1588; LA32R-NEXT:    srli.w $a0, $a0, 2589; LA32R-NEXT:    and $a0, $a0, $a1590; LA32R-NEXT:    add.w $a0, $a2, $a0591; LA32R-NEXT:    srli.w $a1, $a0, 4592; LA32R-NEXT:    add.w $a0, $a0, $a1593; LA32R-NEXT:    lu12i.w $a1, 61680594; LA32R-NEXT:    ori $a1, $a1, 3855595; LA32R-NEXT:    and $a0, $a0, $a1596; LA32R-NEXT:    lu12i.w $a1, 4112597; LA32R-NEXT:    ori $a1, $a1, 257598; LA32R-NEXT:    mul.w $a0, $a0, $a1599; LA32R-NEXT:    srli.w $a0, $a0, 24600; LA32R-NEXT:    ret601;602; LA32S-LABEL: test_ctpop_i32:603; LA32S:       # %bb.0:604; LA32S-NEXT:    srli.w $a1, $a0, 1605; LA32S-NEXT:    lu12i.w $a2, 349525606; LA32S-NEXT:    ori $a2, $a2, 1365607; LA32S-NEXT:    and $a1, $a1, $a2608; LA32S-NEXT:    sub.w $a0, $a0, $a1609; LA32S-NEXT:    lu12i.w $a1, 209715610; LA32S-NEXT:    ori $a1, $a1, 819611; LA32S-NEXT:    and $a2, $a0, $a1612; LA32S-NEXT:    srli.w $a0, $a0, 2613; LA32S-NEXT:    and $a0, $a0, $a1614; LA32S-NEXT:    add.w $a0, $a2, $a0615; LA32S-NEXT:    srli.w $a1, $a0, 4616; LA32S-NEXT:    add.w $a0, $a0, $a1617; LA32S-NEXT:    lu12i.w $a1, 61680618; LA32S-NEXT:    ori $a1, $a1, 3855619; LA32S-NEXT:    and $a0, $a0, $a1620; LA32S-NEXT:    lu12i.w $a1, 4112621; LA32S-NEXT:    ori $a1, $a1, 257622; LA32S-NEXT:    mul.w $a0, $a0, $a1623; LA32S-NEXT:    srli.w $a0, $a0, 24624; LA32S-NEXT:    ret625;626; LA64-LABEL: test_ctpop_i32:627; LA64:       # %bb.0:628; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 0629; LA64-NEXT:    vldi $vr0, 0630; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0631; LA64-NEXT:    vpcnt.d $vr0, $vr0632; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 0633; LA64-NEXT:    ret634  %1 = call i32 @llvm.ctpop.i32(i32 %a)635  ret i32 %1636}637 638define i64 @test_ctpop_i64(i64 %a) nounwind {639; LA32R-LABEL: test_ctpop_i64:640; LA32R:       # %bb.0:641; LA32R-NEXT:    srli.w $a2, $a1, 1642; LA32R-NEXT:    lu12i.w $a3, 349525643; LA32R-NEXT:    ori $a3, $a3, 1365644; LA32R-NEXT:    and $a2, $a2, $a3645; LA32R-NEXT:    sub.w $a1, $a1, $a2646; LA32R-NEXT:    lu12i.w $a2, 209715647; LA32R-NEXT:    ori $a2, $a2, 819648; LA32R-NEXT:    and $a4, $a1, $a2649; LA32R-NEXT:    srli.w $a1, $a1, 2650; LA32R-NEXT:    and $a1, $a1, $a2651; LA32R-NEXT:    add.w $a1, $a4, $a1652; LA32R-NEXT:    srli.w $a4, $a1, 4653; LA32R-NEXT:    add.w $a1, $a1, $a4654; LA32R-NEXT:    lu12i.w $a4, 61680655; LA32R-NEXT:    ori $a4, $a4, 3855656; LA32R-NEXT:    and $a1, $a1, $a4657; LA32R-NEXT:    lu12i.w $a5, 4112658; LA32R-NEXT:    ori $a5, $a5, 257659; LA32R-NEXT:    mul.w $a1, $a1, $a5660; LA32R-NEXT:    srli.w $a1, $a1, 24661; LA32R-NEXT:    srli.w $a6, $a0, 1662; LA32R-NEXT:    and $a3, $a6, $a3663; LA32R-NEXT:    sub.w $a0, $a0, $a3664; LA32R-NEXT:    and $a3, $a0, $a2665; LA32R-NEXT:    srli.w $a0, $a0, 2666; LA32R-NEXT:    and $a0, $a0, $a2667; LA32R-NEXT:    add.w $a0, $a3, $a0668; LA32R-NEXT:    srli.w $a2, $a0, 4669; LA32R-NEXT:    add.w $a0, $a0, $a2670; LA32R-NEXT:    and $a0, $a0, $a4671; LA32R-NEXT:    mul.w $a0, $a0, $a5672; LA32R-NEXT:    srli.w $a0, $a0, 24673; LA32R-NEXT:    add.w $a0, $a0, $a1674; LA32R-NEXT:    move $a1, $zero675; LA32R-NEXT:    ret676;677; LA32S-LABEL: test_ctpop_i64:678; LA32S:       # %bb.0:679; LA32S-NEXT:    srli.w $a2, $a1, 1680; LA32S-NEXT:    lu12i.w $a3, 349525681; LA32S-NEXT:    ori $a3, $a3, 1365682; LA32S-NEXT:    and $a2, $a2, $a3683; LA32S-NEXT:    sub.w $a1, $a1, $a2684; LA32S-NEXT:    lu12i.w $a2, 209715685; LA32S-NEXT:    ori $a2, $a2, 819686; LA32S-NEXT:    and $a4, $a1, $a2687; LA32S-NEXT:    srli.w $a1, $a1, 2688; LA32S-NEXT:    and $a1, $a1, $a2689; LA32S-NEXT:    add.w $a1, $a4, $a1690; LA32S-NEXT:    srli.w $a4, $a1, 4691; LA32S-NEXT:    add.w $a1, $a1, $a4692; LA32S-NEXT:    lu12i.w $a4, 61680693; LA32S-NEXT:    ori $a4, $a4, 3855694; LA32S-NEXT:    and $a1, $a1, $a4695; LA32S-NEXT:    lu12i.w $a5, 4112696; LA32S-NEXT:    ori $a5, $a5, 257697; LA32S-NEXT:    mul.w $a1, $a1, $a5698; LA32S-NEXT:    srli.w $a1, $a1, 24699; LA32S-NEXT:    srli.w $a6, $a0, 1700; LA32S-NEXT:    and $a3, $a6, $a3701; LA32S-NEXT:    sub.w $a0, $a0, $a3702; LA32S-NEXT:    and $a3, $a0, $a2703; LA32S-NEXT:    srli.w $a0, $a0, 2704; LA32S-NEXT:    and $a0, $a0, $a2705; LA32S-NEXT:    add.w $a0, $a3, $a0706; LA32S-NEXT:    srli.w $a2, $a0, 4707; LA32S-NEXT:    add.w $a0, $a0, $a2708; LA32S-NEXT:    and $a0, $a0, $a4709; LA32S-NEXT:    mul.w $a0, $a0, $a5710; LA32S-NEXT:    srli.w $a0, $a0, 24711; LA32S-NEXT:    add.w $a0, $a0, $a1712; LA32S-NEXT:    move $a1, $zero713; LA32S-NEXT:    ret714;715; LA64-LABEL: test_ctpop_i64:716; LA64:       # %bb.0:717; LA64-NEXT:    vldi $vr0, 0718; LA64-NEXT:    vinsgr2vr.d $vr0, $a0, 0719; LA64-NEXT:    vpcnt.d $vr0, $vr0720; LA64-NEXT:    vpickve2gr.d $a0, $vr0, 0721; LA64-NEXT:    ret722  %1 = call i64 @llvm.ctpop.i64(i64 %a)723  ret i64 %1724}725 726define i8 @test_cttz_i8(i8 %a) nounwind {727; LA32R-LABEL: test_cttz_i8:728; LA32R:       # %bb.0:729; LA32R-NEXT:    addi.w $a1, $a0, -1730; LA32R-NEXT:    andn $a0, $a1, $a0731; LA32R-NEXT:    srli.w $a1, $a0, 1732; LA32R-NEXT:    andi $a1, $a1, 85733; LA32R-NEXT:    sub.w $a0, $a0, $a1734; LA32R-NEXT:    andi $a1, $a0, 51735; LA32R-NEXT:    srli.w $a0, $a0, 2736; LA32R-NEXT:    andi $a0, $a0, 51737; LA32R-NEXT:    add.w $a0, $a1, $a0738; LA32R-NEXT:    srli.w $a1, $a0, 4739; LA32R-NEXT:    add.w $a0, $a0, $a1740; LA32R-NEXT:    andi $a0, $a0, 15741; LA32R-NEXT:    ret742;743; LA32S-LABEL: test_cttz_i8:744; LA32S:       # %bb.0:745; LA32S-NEXT:    ori $a0, $a0, 256746; LA32S-NEXT:    ctz.w $a0, $a0747; LA32S-NEXT:    ret748;749; LA64-LABEL: test_cttz_i8:750; LA64:       # %bb.0:751; LA64-NEXT:    ori $a0, $a0, 256752; LA64-NEXT:    ctz.d $a0, $a0753; LA64-NEXT:    ret754  %tmp = call i8 @llvm.cttz.i8(i8 %a, i1 false)755  ret i8 %tmp756}757 758define i16 @test_cttz_i16(i16 %a) nounwind {759; LA32R-LABEL: test_cttz_i16:760; LA32R:       # %bb.0:761; LA32R-NEXT:    addi.w $a1, $a0, -1762; LA32R-NEXT:    andn $a0, $a1, $a0763; LA32R-NEXT:    srli.w $a1, $a0, 1764; LA32R-NEXT:    lu12i.w $a2, 5765; LA32R-NEXT:    ori $a2, $a2, 1365766; LA32R-NEXT:    and $a1, $a1, $a2767; LA32R-NEXT:    sub.w $a0, $a0, $a1768; LA32R-NEXT:    lu12i.w $a1, 3769; LA32R-NEXT:    ori $a1, $a1, 819770; LA32R-NEXT:    and $a2, $a0, $a1771; LA32R-NEXT:    srli.w $a0, $a0, 2772; LA32R-NEXT:    and $a0, $a0, $a1773; LA32R-NEXT:    add.w $a0, $a2, $a0774; LA32R-NEXT:    srli.w $a1, $a0, 4775; LA32R-NEXT:    add.w $a0, $a0, $a1776; LA32R-NEXT:    andi $a1, $a0, 15777; LA32R-NEXT:    andi $a0, $a0, 3840778; LA32R-NEXT:    srli.w $a0, $a0, 8779; LA32R-NEXT:    add.w $a0, $a1, $a0780; LA32R-NEXT:    ret781;782; LA32S-LABEL: test_cttz_i16:783; LA32S:       # %bb.0:784; LA32S-NEXT:    lu12i.w $a1, 16785; LA32S-NEXT:    or $a0, $a0, $a1786; LA32S-NEXT:    ctz.w $a0, $a0787; LA32S-NEXT:    ret788;789; LA64-LABEL: test_cttz_i16:790; LA64:       # %bb.0:791; LA64-NEXT:    lu12i.w $a1, 16792; LA64-NEXT:    or $a0, $a0, $a1793; LA64-NEXT:    ctz.d $a0, $a0794; LA64-NEXT:    ret795  %tmp = call i16 @llvm.cttz.i16(i16 %a, i1 false)796  ret i16 %tmp797}798 799define i32 @test_cttz_i32(i32 %a) nounwind {800; LA32R-LABEL: test_cttz_i32:801; LA32R:       # %bb.0:802; LA32R-NEXT:    bne $a0, $zero, .LBB14_2803; LA32R-NEXT:  # %bb.1:804; LA32R-NEXT:    ori $a0, $zero, 32805; LA32R-NEXT:    ret806; LA32R-NEXT:  .LBB14_2:807; LA32R-NEXT:    sub.w $a1, $zero, $a0808; LA32R-NEXT:    and $a0, $a0, $a1809; LA32R-NEXT:    lu12i.w $a1, 30667810; LA32R-NEXT:    ori $a1, $a1, 1329811; LA32R-NEXT:    mul.w $a0, $a0, $a1812; LA32R-NEXT:    srli.w $a0, $a0, 27813; LA32R-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI14_0)814; LA32R-NEXT:    addi.w $a1, $a1, %pc_lo12(.LCPI14_0)815; LA32R-NEXT:    add.w $a0, $a1, $a0816; LA32R-NEXT:    ld.bu $a0, $a0, 0817; LA32R-NEXT:    ret818;819; LA32S-LABEL: test_cttz_i32:820; LA32S:       # %bb.0:821; LA32S-NEXT:    ctz.w $a0, $a0822; LA32S-NEXT:    ret823;824; LA64-LABEL: test_cttz_i32:825; LA64:       # %bb.0:826; LA64-NEXT:    ctz.w $a0, $a0827; LA64-NEXT:    ret828  %tmp = call i32 @llvm.cttz.i32(i32 %a, i1 false)829  ret i32 %tmp830}831 832define i64 @test_cttz_i64(i64 %a) nounwind {833; LA32R-LABEL: test_cttz_i64:834; LA32R:       # %bb.0:835; LA32R-NEXT:    lu12i.w $a2, 30667836; LA32R-NEXT:    ori $a2, $a2, 1329837; LA32R-NEXT:    pcalau12i $a3, %pc_hi20(.LCPI15_0)838; LA32R-NEXT:    addi.w $a3, $a3, %pc_lo12(.LCPI15_0)839; LA32R-NEXT:    bne $a1, $zero, .LBB15_3840; LA32R-NEXT:  # %bb.1:841; LA32R-NEXT:    ori $a1, $zero, 32842; LA32R-NEXT:    beq $a0, $zero, .LBB15_4843; LA32R-NEXT:  .LBB15_2:844; LA32R-NEXT:    sub.w $a1, $zero, $a0845; LA32R-NEXT:    and $a0, $a0, $a1846; LA32R-NEXT:    mul.w $a0, $a0, $a2847; LA32R-NEXT:    srli.w $a0, $a0, 27848; LA32R-NEXT:    add.w $a0, $a3, $a0849; LA32R-NEXT:    ld.bu $a0, $a0, 0850; LA32R-NEXT:    move $a1, $zero851; LA32R-NEXT:    ret852; LA32R-NEXT:  .LBB15_3:853; LA32R-NEXT:    sub.w $a4, $zero, $a1854; LA32R-NEXT:    and $a1, $a1, $a4855; LA32R-NEXT:    mul.w $a1, $a1, $a2856; LA32R-NEXT:    srli.w $a1, $a1, 27857; LA32R-NEXT:    add.w $a1, $a3, $a1858; LA32R-NEXT:    ld.bu $a1, $a1, 0859; LA32R-NEXT:    bne $a0, $zero, .LBB15_2860; LA32R-NEXT:  .LBB15_4:861; LA32R-NEXT:    addi.w $a0, $a1, 32862; LA32R-NEXT:    move $a1, $zero863; LA32R-NEXT:    ret864;865; LA32S-LABEL: test_cttz_i64:866; LA32S:       # %bb.0:867; LA32S-NEXT:    sltu $a2, $zero, $a0868; LA32S-NEXT:    ctz.w $a0, $a0869; LA32S-NEXT:    maskeqz $a0, $a0, $a2870; LA32S-NEXT:    ctz.w $a1, $a1871; LA32S-NEXT:    addi.w $a1, $a1, 32872; LA32S-NEXT:    masknez $a1, $a1, $a2873; LA32S-NEXT:    or $a0, $a0, $a1874; LA32S-NEXT:    move $a1, $zero875; LA32S-NEXT:    ret876;877; LA64-LABEL: test_cttz_i64:878; LA64:       # %bb.0:879; LA64-NEXT:    ctz.d $a0, $a0880; LA64-NEXT:    ret881  %tmp = call i64 @llvm.cttz.i64(i64 %a, i1 false)882  ret i64 %tmp883}884 885define i8 @test_not_cttz_i8(i8 %a) nounwind {886; LA32R-LABEL: test_not_cttz_i8:887; LA32R:       # %bb.0:888; LA32R-NEXT:    addi.w $a1, $a0, 1889; LA32R-NEXT:    andn $a0, $a0, $a1890; LA32R-NEXT:    srli.w $a1, $a0, 1891; LA32R-NEXT:    andi $a1, $a1, 85892; LA32R-NEXT:    sub.w $a0, $a0, $a1893; LA32R-NEXT:    andi $a1, $a0, 51894; LA32R-NEXT:    srli.w $a0, $a0, 2895; LA32R-NEXT:    andi $a0, $a0, 51896; LA32R-NEXT:    add.w $a0, $a1, $a0897; LA32R-NEXT:    srli.w $a1, $a0, 4898; LA32R-NEXT:    add.w $a0, $a0, $a1899; LA32R-NEXT:    andi $a0, $a0, 15900; LA32R-NEXT:    ret901;902; LA32S-LABEL: test_not_cttz_i8:903; LA32S:       # %bb.0:904; LA32S-NEXT:    ori $a1, $zero, 256905; LA32S-NEXT:    orn $a0, $a1, $a0906; LA32S-NEXT:    ctz.w $a0, $a0907; LA32S-NEXT:    ret908;909; LA64-LABEL: test_not_cttz_i8:910; LA64:       # %bb.0:911; LA64-NEXT:    ori $a1, $zero, 256912; LA64-NEXT:    orn $a0, $a1, $a0913; LA64-NEXT:    ctz.d $a0, $a0914; LA64-NEXT:    ret915  %neg = xor i8 %a, -1916  %tmp = call i8 @llvm.cttz.i8(i8 %neg, i1 false)917  ret i8 %tmp918}919 920define i16 @test_not_cttz_i16(i16 %a) nounwind {921; LA32R-LABEL: test_not_cttz_i16:922; LA32R:       # %bb.0:923; LA32R-NEXT:    addi.w $a1, $a0, 1924; LA32R-NEXT:    andn $a0, $a0, $a1925; LA32R-NEXT:    srli.w $a1, $a0, 1926; LA32R-NEXT:    lu12i.w $a2, 5927; LA32R-NEXT:    ori $a2, $a2, 1365928; LA32R-NEXT:    and $a1, $a1, $a2929; LA32R-NEXT:    sub.w $a0, $a0, $a1930; LA32R-NEXT:    lu12i.w $a1, 3931; LA32R-NEXT:    ori $a1, $a1, 819932; LA32R-NEXT:    and $a2, $a0, $a1933; LA32R-NEXT:    srli.w $a0, $a0, 2934; LA32R-NEXT:    and $a0, $a0, $a1935; LA32R-NEXT:    add.w $a0, $a2, $a0936; LA32R-NEXT:    srli.w $a1, $a0, 4937; LA32R-NEXT:    add.w $a0, $a0, $a1938; LA32R-NEXT:    andi $a1, $a0, 15939; LA32R-NEXT:    andi $a0, $a0, 3840940; LA32R-NEXT:    srli.w $a0, $a0, 8941; LA32R-NEXT:    add.w $a0, $a1, $a0942; LA32R-NEXT:    ret943;944; LA32S-LABEL: test_not_cttz_i16:945; LA32S:       # %bb.0:946; LA32S-NEXT:    lu12i.w $a1, 16947; LA32S-NEXT:    orn $a0, $a1, $a0948; LA32S-NEXT:    ctz.w $a0, $a0949; LA32S-NEXT:    ret950;951; LA64-LABEL: test_not_cttz_i16:952; LA64:       # %bb.0:953; LA64-NEXT:    lu12i.w $a1, 16954; LA64-NEXT:    orn $a0, $a1, $a0955; LA64-NEXT:    ctz.d $a0, $a0956; LA64-NEXT:    ret957  %neg = xor i16 %a, -1958  %tmp = call i16 @llvm.cttz.i16(i16 %neg, i1 false)959  ret i16 %tmp960}961 962define i32 @test_not_cttz_i32(i32 %a) nounwind {963; LA32R-LABEL: test_not_cttz_i32:964; LA32R:       # %bb.0:965; LA32R-NEXT:    nor $a1, $a0, $zero966; LA32R-NEXT:    bne $a1, $zero, .LBB18_2967; LA32R-NEXT:  # %bb.1:968; LA32R-NEXT:    ori $a0, $zero, 32969; LA32R-NEXT:    ret970; LA32R-NEXT:  .LBB18_2:971; LA32R-NEXT:    sub.w $a1, $zero, $a1972; LA32R-NEXT:    andn $a0, $a1, $a0973; LA32R-NEXT:    lu12i.w $a1, 30667974; LA32R-NEXT:    ori $a1, $a1, 1329975; LA32R-NEXT:    mul.w $a0, $a0, $a1976; LA32R-NEXT:    srli.w $a0, $a0, 27977; LA32R-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI18_0)978; LA32R-NEXT:    addi.w $a1, $a1, %pc_lo12(.LCPI18_0)979; LA32R-NEXT:    add.w $a0, $a1, $a0980; LA32R-NEXT:    ld.bu $a0, $a0, 0981; LA32R-NEXT:    ret982;983; LA32S-LABEL: test_not_cttz_i32:984; LA32S:       # %bb.0:985; LA32S-NEXT:    cto.w $a0, $a0986; LA32S-NEXT:    ret987;988; LA64-LABEL: test_not_cttz_i32:989; LA64:       # %bb.0:990; LA64-NEXT:    cto.w $a0, $a0991; LA64-NEXT:    ret992  %neg = xor i32 %a, -1993  %tmp = call i32 @llvm.cttz.i32(i32 %neg, i1 false)994  ret i32 %tmp995}996 997define i64 @test_not_cttz_i64(i64 %a) nounwind {998; LA32R-LABEL: test_not_cttz_i64:999; LA32R:       # %bb.0:1000; LA32R-NEXT:    nor $a5, $a1, $zero1001; LA32R-NEXT:    nor $a2, $a0, $zero1002; LA32R-NEXT:    lu12i.w $a3, 306671003; LA32R-NEXT:    ori $a3, $a3, 13291004; LA32R-NEXT:    pcalau12i $a4, %pc_hi20(.LCPI19_0)1005; LA32R-NEXT:    addi.w $a4, $a4, %pc_lo12(.LCPI19_0)1006; LA32R-NEXT:    bne $a5, $zero, .LBB19_31007; LA32R-NEXT:  # %bb.1:1008; LA32R-NEXT:    ori $a1, $zero, 321009; LA32R-NEXT:    beq $a2, $zero, .LBB19_41010; LA32R-NEXT:  .LBB19_2:1011; LA32R-NEXT:    sub.w $a1, $zero, $a21012; LA32R-NEXT:    andn $a0, $a1, $a01013; LA32R-NEXT:    mul.w $a0, $a0, $a31014; LA32R-NEXT:    srli.w $a0, $a0, 271015; LA32R-NEXT:    add.w $a0, $a4, $a01016; LA32R-NEXT:    ld.bu $a0, $a0, 01017; LA32R-NEXT:    move $a1, $zero1018; LA32R-NEXT:    ret1019; LA32R-NEXT:  .LBB19_3:1020; LA32R-NEXT:    sub.w $a5, $zero, $a51021; LA32R-NEXT:    andn $a1, $a5, $a11022; LA32R-NEXT:    mul.w $a1, $a1, $a31023; LA32R-NEXT:    srli.w $a1, $a1, 271024; LA32R-NEXT:    add.w $a1, $a4, $a11025; LA32R-NEXT:    ld.bu $a1, $a1, 01026; LA32R-NEXT:    bne $a2, $zero, .LBB19_21027; LA32R-NEXT:  .LBB19_4:1028; LA32R-NEXT:    addi.w $a0, $a1, 321029; LA32R-NEXT:    move $a1, $zero1030; LA32R-NEXT:    ret1031;1032; LA32S-LABEL: test_not_cttz_i64:1033; LA32S:       # %bb.0:1034; LA32S-NEXT:    nor $a2, $a0, $zero1035; LA32S-NEXT:    sltu $a2, $zero, $a21036; LA32S-NEXT:    cto.w $a1, $a11037; LA32S-NEXT:    addi.w $a1, $a1, 321038; LA32S-NEXT:    masknez $a1, $a1, $a21039; LA32S-NEXT:    cto.w $a0, $a01040; LA32S-NEXT:    maskeqz $a0, $a0, $a21041; LA32S-NEXT:    or $a0, $a0, $a11042; LA32S-NEXT:    move $a1, $zero1043; LA32S-NEXT:    ret1044;1045; LA64-LABEL: test_not_cttz_i64:1046; LA64:       # %bb.0:1047; LA64-NEXT:    cto.d $a0, $a01048; LA64-NEXT:    ret1049  %neg = xor i64 %a, -11050  %tmp = call i64 @llvm.cttz.i64(i64 %neg, i1 false)1051  ret i64 %tmp1052}1053