brintos

brintos / llvm-project-archived public Read only

0
0
Text · 80.9 KiB · 9cf24dc Raw
3305 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefixes=CHECK,LA644 5define signext i32 @bittest_7_i32(i32 signext %a) nounwind {6; LA32-LABEL: bittest_7_i32:7; LA32:       # %bb.0:8; LA32-NEXT:    nor $a0, $a0, $zero9; LA32-NEXT:    srli.w $a0, $a0, 710; LA32-NEXT:    andi $a0, $a0, 111; LA32-NEXT:    ret12;13; LA64-LABEL: bittest_7_i32:14; LA64:       # %bb.0:15; LA64-NEXT:    nor $a0, $a0, $zero16; LA64-NEXT:    bstrpick.d $a0, $a0, 7, 717; LA64-NEXT:    ret18  %shr = lshr i32 %a, 719  %not = xor i32 %shr, -120  %and = and i32 %not, 121  ret i32 %and22}23 24define signext i32 @bittest_10_i32(i32 signext %a) nounwind {25; LA32-LABEL: bittest_10_i32:26; LA32:       # %bb.0:27; LA32-NEXT:    nor $a0, $a0, $zero28; LA32-NEXT:    srli.w $a0, $a0, 1029; LA32-NEXT:    andi $a0, $a0, 130; LA32-NEXT:    ret31;32; LA64-LABEL: bittest_10_i32:33; LA64:       # %bb.0:34; LA64-NEXT:    nor $a0, $a0, $zero35; LA64-NEXT:    bstrpick.d $a0, $a0, 10, 1036; LA64-NEXT:    ret37  %shr = lshr i32 %a, 1038  %not = xor i32 %shr, -139  %and = and i32 %not, 140  ret i32 %and41}42 43define signext i32 @bittest_11_i32(i32 signext %a) nounwind {44; LA32-LABEL: bittest_11_i32:45; LA32:       # %bb.0:46; LA32-NEXT:    nor $a0, $a0, $zero47; LA32-NEXT:    srli.w $a0, $a0, 1148; LA32-NEXT:    andi $a0, $a0, 149; LA32-NEXT:    ret50;51; LA64-LABEL: bittest_11_i32:52; LA64:       # %bb.0:53; LA64-NEXT:    nor $a0, $a0, $zero54; LA64-NEXT:    bstrpick.d $a0, $a0, 11, 1155; LA64-NEXT:    ret56  %shr = lshr i32 %a, 1157  %not = xor i32 %shr, -158  %and = and i32 %not, 159  ret i32 %and60}61 62define signext i32 @bittest_31_i32(i32 signext %a) nounwind {63; LA32-LABEL: bittest_31_i32:64; LA32:       # %bb.0:65; LA32-NEXT:    nor $a0, $a0, $zero66; LA32-NEXT:    srli.w $a0, $a0, 3167; LA32-NEXT:    ret68;69; LA64-LABEL: bittest_31_i32:70; LA64:       # %bb.0:71; LA64-NEXT:    nor $a0, $a0, $zero72; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 3173; LA64-NEXT:    ret74  %shr = lshr i32 %a, 3175  %not = xor i32 %shr, -176  %and = and i32 %not, 177  ret i32 %and78}79 80define i64 @bittest_7_i64(i64 %a) nounwind {81; LA32-LABEL: bittest_7_i64:82; LA32:       # %bb.0:83; LA32-NEXT:    nor $a0, $a0, $zero84; LA32-NEXT:    srli.w $a0, $a0, 785; LA32-NEXT:    andi $a0, $a0, 186; LA32-NEXT:    move $a1, $zero87; LA32-NEXT:    ret88;89; LA64-LABEL: bittest_7_i64:90; LA64:       # %bb.0:91; LA64-NEXT:    nor $a0, $a0, $zero92; LA64-NEXT:    bstrpick.d $a0, $a0, 7, 793; LA64-NEXT:    ret94  %shr = lshr i64 %a, 795  %not = xor i64 %shr, -196  %and = and i64 %not, 197  ret i64 %and98}99 100define i64 @bittest_10_i64(i64 %a) nounwind {101; LA32-LABEL: bittest_10_i64:102; LA32:       # %bb.0:103; LA32-NEXT:    nor $a0, $a0, $zero104; LA32-NEXT:    srli.w $a0, $a0, 10105; LA32-NEXT:    andi $a0, $a0, 1106; LA32-NEXT:    move $a1, $zero107; LA32-NEXT:    ret108;109; LA64-LABEL: bittest_10_i64:110; LA64:       # %bb.0:111; LA64-NEXT:    nor $a0, $a0, $zero112; LA64-NEXT:    bstrpick.d $a0, $a0, 10, 10113; LA64-NEXT:    ret114  %shr = lshr i64 %a, 10115  %not = xor i64 %shr, -1116  %and = and i64 %not, 1117  ret i64 %and118}119 120define i64 @bittest_11_i64(i64 %a) nounwind {121; LA32-LABEL: bittest_11_i64:122; LA32:       # %bb.0:123; LA32-NEXT:    nor $a0, $a0, $zero124; LA32-NEXT:    srli.w $a0, $a0, 11125; LA32-NEXT:    andi $a0, $a0, 1126; LA32-NEXT:    move $a1, $zero127; LA32-NEXT:    ret128;129; LA64-LABEL: bittest_11_i64:130; LA64:       # %bb.0:131; LA64-NEXT:    nor $a0, $a0, $zero132; LA64-NEXT:    bstrpick.d $a0, $a0, 11, 11133; LA64-NEXT:    ret134  %shr = lshr i64 %a, 11135  %not = xor i64 %shr, -1136  %and = and i64 %not, 1137  ret i64 %and138}139 140define i64 @bittest_31_i64(i64 %a) nounwind {141; LA32-LABEL: bittest_31_i64:142; LA32:       # %bb.0:143; LA32-NEXT:    nor $a0, $a0, $zero144; LA32-NEXT:    srli.w $a0, $a0, 31145; LA32-NEXT:    move $a1, $zero146; LA32-NEXT:    ret147;148; LA64-LABEL: bittest_31_i64:149; LA64:       # %bb.0:150; LA64-NEXT:    nor $a0, $a0, $zero151; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 31152; LA64-NEXT:    ret153  %shr = lshr i64 %a, 31154  %not = xor i64 %shr, -1155  %and = and i64 %not, 1156  ret i64 %and157}158 159define i64 @bittest_32_i64(i64 %a) nounwind {160; LA32-LABEL: bittest_32_i64:161; LA32:       # %bb.0:162; LA32-NEXT:    ori $a0, $zero, 1163; LA32-NEXT:    andn $a0, $a0, $a1164; LA32-NEXT:    move $a1, $zero165; LA32-NEXT:    ret166;167; LA64-LABEL: bittest_32_i64:168; LA64:       # %bb.0:169; LA64-NEXT:    nor $a0, $a0, $zero170; LA64-NEXT:    bstrpick.d $a0, $a0, 32, 32171; LA64-NEXT:    ret172  %shr = lshr i64 %a, 32173  %not = xor i64 %shr, -1174  %and = and i64 %not, 1175  ret i64 %and176}177 178define i64 @bittest_63_i64(i64 %a) nounwind {179; LA32-LABEL: bittest_63_i64:180; LA32:       # %bb.0:181; LA32-NEXT:    nor $a0, $a1, $zero182; LA32-NEXT:    srli.w $a0, $a0, 31183; LA32-NEXT:    move $a1, $zero184; LA32-NEXT:    ret185;186; LA64-LABEL: bittest_63_i64:187; LA64:       # %bb.0:188; LA64-NEXT:    nor $a0, $a0, $zero189; LA64-NEXT:    srli.d $a0, $a0, 63190; LA64-NEXT:    ret191  %shr = lshr i64 %a, 63192  %not = xor i64 %shr, -1193  %and = and i64 %not, 1194  ret i64 %and195}196 197define i1 @bittest_constant_by_var_shr_i32(i32 signext %b) nounwind {198; CHECK-LABEL: bittest_constant_by_var_shr_i32:199; CHECK:       # %bb.0:200; CHECK-NEXT:    lu12i.w $a1, 301408201; CHECK-NEXT:    ori $a1, $a1, 722202; CHECK-NEXT:    srl.w $a0, $a1, $a0203; CHECK-NEXT:    andi $a0, $a0, 1204; CHECK-NEXT:    ret205  %shl = lshr i32 1234567890, %b206  %and = and i32 %shl, 1207  %cmp = icmp ne i32 %and, 0208  ret i1 %cmp209}210 211define i1 @bittest_constant_by_var_shl_i32(i32 signext %b) nounwind {212; CHECK-LABEL: bittest_constant_by_var_shl_i32:213; CHECK:       # %bb.0:214; CHECK-NEXT:    ori $a1, $zero, 1215; CHECK-NEXT:    sll.w $a0, $a1, $a0216; CHECK-NEXT:    lu12i.w $a1, 301408217; CHECK-NEXT:    ori $a1, $a1, 722218; CHECK-NEXT:    and $a0, $a0, $a1219; CHECK-NEXT:    sltu $a0, $zero, $a0220; CHECK-NEXT:    ret221  %shl = shl i32 1, %b222  %and = and i32 %shl, 1234567890223  %cmp = icmp ne i32 %and, 0224  ret i1 %cmp225}226 227define i1 @bittest_constant_by_var_shr_i64(i64 %b) nounwind {228; LA32-LABEL: bittest_constant_by_var_shr_i64:229; LA32:       # %bb.0:230; LA32-NEXT:    lu12i.w $a1, 301408231; LA32-NEXT:    ori $a1, $a1, 722232; LA32-NEXT:    srl.w $a1, $a1, $a0233; LA32-NEXT:    addi.w $a0, $a0, -32234; LA32-NEXT:    slti $a0, $a0, 0235; LA32-NEXT:    and $a0, $a0, $a1236; LA32-NEXT:    ret237;238; LA64-LABEL: bittest_constant_by_var_shr_i64:239; LA64:       # %bb.0:240; LA64-NEXT:    lu12i.w $a1, 301408241; LA64-NEXT:    ori $a1, $a1, 722242; LA64-NEXT:    srl.d $a0, $a1, $a0243; LA64-NEXT:    andi $a0, $a0, 1244; LA64-NEXT:    ret245  %shl = lshr i64 1234567890, %b246  %and = and i64 %shl, 1247  %cmp = icmp ne i64 %and, 0248  ret i1 %cmp249}250 251define i1 @bittest_constant_by_var_shl_i64(i64 %b) nounwind {252; LA32-LABEL: bittest_constant_by_var_shl_i64:253; LA32:       # %bb.0:254; LA32-NEXT:    addi.w $a1, $a0, -32255; LA32-NEXT:    slti $a1, $a1, 0256; LA32-NEXT:    sub.w $a1, $zero, $a1257; LA32-NEXT:    ori $a2, $zero, 1258; LA32-NEXT:    sll.w $a0, $a2, $a0259; LA32-NEXT:    and $a0, $a1, $a0260; LA32-NEXT:    lu12i.w $a1, 301408261; LA32-NEXT:    ori $a1, $a1, 722262; LA32-NEXT:    and $a0, $a0, $a1263; LA32-NEXT:    sltu $a0, $zero, $a0264; LA32-NEXT:    ret265;266; LA64-LABEL: bittest_constant_by_var_shl_i64:267; LA64:       # %bb.0:268; LA64-NEXT:    ori $a1, $zero, 1269; LA64-NEXT:    sll.d $a0, $a1, $a0270; LA64-NEXT:    lu12i.w $a1, 301408271; LA64-NEXT:    ori $a1, $a1, 722272; LA64-NEXT:    and $a0, $a0, $a1273; LA64-NEXT:    sltu $a0, $zero, $a0274; LA64-NEXT:    ret275  %shl = shl i64 1, %b276  %and = and i64 %shl, 1234567890277  %cmp = icmp ne i64 %and, 0278  ret i1 %cmp279}280 281define void @bittest_switch(i32 signext %0) {282; LA32-LABEL: bittest_switch:283; LA32:       # %bb.0:284; LA32-NEXT:    ori $a1, $zero, 31285; LA32-NEXT:    bltu $a1, $a0, .LBB14_3286; LA32-NEXT:  # %bb.1:287; LA32-NEXT:    ori $a1, $zero, 1288; LA32-NEXT:    sll.w $a0, $a1, $a0289; LA32-NEXT:    lu12i.w $a1, -524285290; LA32-NEXT:    ori $a1, $a1, 768291; LA32-NEXT:    and $a0, $a0, $a1292; LA32-NEXT:    beq $a0, $zero, .LBB14_3293; LA32-NEXT:  # %bb.2:294; LA32-NEXT:    b bar295; LA32-NEXT:  .LBB14_3:296; LA32-NEXT:    ret297;298; LA64-LABEL: bittest_switch:299; LA64:       # %bb.0:300; LA64-NEXT:    ori $a1, $zero, 31301; LA64-NEXT:    bltu $a1, $a0, .LBB14_3302; LA64-NEXT:  # %bb.1:303; LA64-NEXT:    ori $a1, $zero, 1304; LA64-NEXT:    sll.d $a0, $a1, $a0305; LA64-NEXT:    lu12i.w $a1, -524285306; LA64-NEXT:    ori $a1, $a1, 768307; LA64-NEXT:    lu32i.d $a1, 0308; LA64-NEXT:    and $a0, $a0, $a1309; LA64-NEXT:    beqz $a0, .LBB14_3310; LA64-NEXT:  # %bb.2:311; LA64-NEXT:    pcaddu18i $t8, %call36(bar)312; LA64-NEXT:    jr $t8313; LA64-NEXT:  .LBB14_3:314; LA64-NEXT:    ret315  switch i32 %0, label %3 [316    i32 8, label %2317    i32 9, label %2318    i32 12, label %2319    i32 13, label %2320    i32 31, label %2321  ]322 3232:324  tail call void @bar()325  br label %3326 3273:328  ret void329}330 331declare void @bar()332 333define signext i32 @bit_10_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {334; LA32-LABEL: bit_10_z_select_i32:335; LA32:       # %bb.0:336; LA32-NEXT:    andi $a3, $a0, 1024337; LA32-NEXT:    move $a0, $a1338; LA32-NEXT:    beq $a3, $zero, .LBB15_2339; LA32-NEXT:  # %bb.1:340; LA32-NEXT:    move $a0, $a2341; LA32-NEXT:  .LBB15_2:342; LA32-NEXT:    ret343;344; LA64-LABEL: bit_10_z_select_i32:345; LA64:       # %bb.0:346; LA64-NEXT:    andi $a0, $a0, 1024347; LA64-NEXT:    sltui $a0, $a0, 1348; LA64-NEXT:    masknez $a2, $a2, $a0349; LA64-NEXT:    maskeqz $a0, $a1, $a0350; LA64-NEXT:    or $a0, $a0, $a2351; LA64-NEXT:    ret352  %1 = and i32 %a, 1024353  %2 = icmp eq i32 %1, 0354  %3 = select i1 %2, i32 %b, i32 %c355  ret i32 %3356}357 358define signext i32 @bit_10_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {359; LA32-LABEL: bit_10_nz_select_i32:360; LA32:       # %bb.0:361; LA32-NEXT:    slli.w $a3, $a0, 21362; LA32-NEXT:    move $a0, $a1363; LA32-NEXT:    bltz $a3, .LBB16_2364; LA32-NEXT:  # %bb.1:365; LA32-NEXT:    move $a0, $a2366; LA32-NEXT:  .LBB16_2:367; LA32-NEXT:    ret368;369; LA64-LABEL: bit_10_nz_select_i32:370; LA64:       # %bb.0:371; LA64-NEXT:    bstrpick.d $a0, $a0, 10, 10372; LA64-NEXT:    masknez $a2, $a2, $a0373; LA64-NEXT:    maskeqz $a0, $a1, $a0374; LA64-NEXT:    or $a0, $a0, $a2375; LA64-NEXT:    ret376  %1 = and i32 %a, 1024377  %2 = icmp ne i32 %1, 0378  %3 = select i1 %2, i32 %b, i32 %c379  ret i32 %3380}381 382define signext i32 @bit_11_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {383; LA32-LABEL: bit_11_z_select_i32:384; LA32:       # %bb.0:385; LA32-NEXT:    slli.w $a3, $a0, 20386; LA32-NEXT:    move $a0, $a1387; LA32-NEXT:    bgez $a3, .LBB17_2388; LA32-NEXT:  # %bb.1:389; LA32-NEXT:    move $a0, $a2390; LA32-NEXT:  .LBB17_2:391; LA32-NEXT:    ret392;393; LA64-LABEL: bit_11_z_select_i32:394; LA64:       # %bb.0:395; LA64-NEXT:    andi $a0, $a0, 2048396; LA64-NEXT:    sltui $a0, $a0, 1397; LA64-NEXT:    masknez $a2, $a2, $a0398; LA64-NEXT:    maskeqz $a0, $a1, $a0399; LA64-NEXT:    or $a0, $a0, $a2400; LA64-NEXT:    ret401  %1 = and i32 %a, 2048402  %2 = icmp eq i32 %1, 0403  %3 = select i1 %2, i32 %b, i32 %c404  ret i32 %3405}406 407define signext i32 @bit_11_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {408; LA32-LABEL: bit_11_nz_select_i32:409; LA32:       # %bb.0:410; LA32-NEXT:    slli.w $a3, $a0, 20411; LA32-NEXT:    move $a0, $a1412; LA32-NEXT:    bltz $a3, .LBB18_2413; LA32-NEXT:  # %bb.1:414; LA32-NEXT:    move $a0, $a2415; LA32-NEXT:  .LBB18_2:416; LA32-NEXT:    ret417;418; LA64-LABEL: bit_11_nz_select_i32:419; LA64:       # %bb.0:420; LA64-NEXT:    bstrpick.d $a0, $a0, 11, 11421; LA64-NEXT:    masknez $a2, $a2, $a0422; LA64-NEXT:    maskeqz $a0, $a1, $a0423; LA64-NEXT:    or $a0, $a0, $a2424; LA64-NEXT:    ret425  %1 = and i32 %a, 2048426  %2 = icmp ne i32 %1, 0427  %3 = select i1 %2, i32 %b, i32 %c428  ret i32 %3429}430 431define signext i32 @bit_20_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {432; LA32-LABEL: bit_20_z_select_i32:433; LA32:       # %bb.0:434; LA32-NEXT:    slli.w $a3, $a0, 11435; LA32-NEXT:    move $a0, $a1436; LA32-NEXT:    bgez $a3, .LBB19_2437; LA32-NEXT:  # %bb.1:438; LA32-NEXT:    move $a0, $a2439; LA32-NEXT:  .LBB19_2:440; LA32-NEXT:    ret441;442; LA64-LABEL: bit_20_z_select_i32:443; LA64:       # %bb.0:444; LA64-NEXT:    lu12i.w $a3, 256445; LA64-NEXT:    and $a0, $a0, $a3446; LA64-NEXT:    sltui $a0, $a0, 1447; LA64-NEXT:    masknez $a2, $a2, $a0448; LA64-NEXT:    maskeqz $a0, $a1, $a0449; LA64-NEXT:    or $a0, $a0, $a2450; LA64-NEXT:    ret451  %1 = and i32 %a, 1048576452  %2 = icmp eq i32 %1, 0453  %3 = select i1 %2, i32 %b, i32 %c454  ret i32 %3455}456 457define signext i32 @bit_20_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {458; LA32-LABEL: bit_20_nz_select_i32:459; LA32:       # %bb.0:460; LA32-NEXT:    slli.w $a3, $a0, 11461; LA32-NEXT:    move $a0, $a1462; LA32-NEXT:    bltz $a3, .LBB20_2463; LA32-NEXT:  # %bb.1:464; LA32-NEXT:    move $a0, $a2465; LA32-NEXT:  .LBB20_2:466; LA32-NEXT:    ret467;468; LA64-LABEL: bit_20_nz_select_i32:469; LA64:       # %bb.0:470; LA64-NEXT:    bstrpick.d $a0, $a0, 20, 20471; LA64-NEXT:    masknez $a2, $a2, $a0472; LA64-NEXT:    maskeqz $a0, $a1, $a0473; LA64-NEXT:    or $a0, $a0, $a2474; LA64-NEXT:    ret475  %1 = and i32 %a, 1048576476  %2 = icmp ne i32 %1, 0477  %3 = select i1 %2, i32 %b, i32 %c478  ret i32 %3479}480 481define signext i32 @bit_31_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {482; LA32-LABEL: bit_31_z_select_i32:483; LA32:       # %bb.0:484; LA32-NEXT:    bgez $a0, .LBB21_2485; LA32-NEXT:  # %bb.1:486; LA32-NEXT:    move $a1, $a2487; LA32-NEXT:  .LBB21_2:488; LA32-NEXT:    move $a0, $a1489; LA32-NEXT:    ret490;491; LA64-LABEL: bit_31_z_select_i32:492; LA64:       # %bb.0:493; LA64-NEXT:    bstrins.d $a0, $zero, 30, 0494; LA64-NEXT:    sltui $a0, $a0, 1495; LA64-NEXT:    masknez $a2, $a2, $a0496; LA64-NEXT:    maskeqz $a0, $a1, $a0497; LA64-NEXT:    or $a0, $a0, $a2498; LA64-NEXT:    ret499  %1 = and i32 %a, 2147483648500  %2 = icmp eq i32 %1, 0501  %3 = select i1 %2, i32 %b, i32 %c502  ret i32 %3503}504 505define signext i32 @bit_31_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {506; LA32-LABEL: bit_31_nz_select_i32:507; LA32:       # %bb.0:508; LA32-NEXT:    srli.w $a3, $a0, 31509; LA32-NEXT:    move $a0, $a1510; LA32-NEXT:    bne $a3, $zero, .LBB22_2511; LA32-NEXT:  # %bb.1:512; LA32-NEXT:    move $a0, $a2513; LA32-NEXT:  .LBB22_2:514; LA32-NEXT:    ret515;516; LA64-LABEL: bit_31_nz_select_i32:517; LA64:       # %bb.0:518; LA64-NEXT:    bstrins.d $a0, $zero, 30, 0519; LA64-NEXT:    sltu $a0, $zero, $a0520; LA64-NEXT:    masknez $a2, $a2, $a0521; LA64-NEXT:    maskeqz $a0, $a1, $a0522; LA64-NEXT:    or $a0, $a0, $a2523; LA64-NEXT:    ret524  %1 = and i32 %a, 2147483648525  %2 = icmp ne i32 %1, 0526  %3 = select i1 %2, i32 %b, i32 %c527  ret i32 %3528}529 530define i64 @bit_10_z_select_i64(i64 %a, i64 %b, i64 %c) {531; LA32-LABEL: bit_10_z_select_i64:532; LA32:       # %bb.0:533; LA32-NEXT:    andi $a6, $a0, 1024534; LA32-NEXT:    move $a1, $a3535; LA32-NEXT:    move $a0, $a2536; LA32-NEXT:    beq $a6, $zero, .LBB23_2537; LA32-NEXT:  # %bb.1:538; LA32-NEXT:    move $a0, $a4539; LA32-NEXT:    move $a1, $a5540; LA32-NEXT:  .LBB23_2:541; LA32-NEXT:    ret542;543; LA64-LABEL: bit_10_z_select_i64:544; LA64:       # %bb.0:545; LA64-NEXT:    andi $a0, $a0, 1024546; LA64-NEXT:    sltui $a0, $a0, 1547; LA64-NEXT:    masknez $a2, $a2, $a0548; LA64-NEXT:    maskeqz $a0, $a1, $a0549; LA64-NEXT:    or $a0, $a0, $a2550; LA64-NEXT:    ret551  %1 = and i64 %a, 1024552  %2 = icmp eq i64 %1, 0553  %3 = select i1 %2, i64 %b, i64 %c554  ret i64 %3555}556 557define i64 @bit_10_nz_select_i64(i64 %a, i64 %b, i64 %c) {558; LA32-LABEL: bit_10_nz_select_i64:559; LA32:       # %bb.0:560; LA32-NEXT:    srli.w $a0, $a0, 10561; LA32-NEXT:    andi $a6, $a0, 1562; LA32-NEXT:    move $a1, $a3563; LA32-NEXT:    move $a0, $a2564; LA32-NEXT:    bne $a6, $zero, .LBB24_2565; LA32-NEXT:  # %bb.1:566; LA32-NEXT:    move $a0, $a4567; LA32-NEXT:    move $a1, $a5568; LA32-NEXT:  .LBB24_2:569; LA32-NEXT:    ret570;571; LA64-LABEL: bit_10_nz_select_i64:572; LA64:       # %bb.0:573; LA64-NEXT:    bstrpick.d $a0, $a0, 10, 10574; LA64-NEXT:    masknez $a2, $a2, $a0575; LA64-NEXT:    maskeqz $a0, $a1, $a0576; LA64-NEXT:    or $a0, $a0, $a2577; LA64-NEXT:    ret578  %1 = and i64 %a, 1024579  %2 = icmp ne i64 %1, 0580  %3 = select i1 %2, i64 %b, i64 %c581  ret i64 %3582}583 584define i64 @bit_11_z_select_i64(i64 %a, i64 %b, i64 %c) {585; LA32-LABEL: bit_11_z_select_i64:586; LA32:       # %bb.0:587; LA32-NEXT:    slli.w $a6, $a0, 20588; LA32-NEXT:    move $a1, $a3589; LA32-NEXT:    move $a0, $a2590; LA32-NEXT:    bgez $a6, .LBB25_2591; LA32-NEXT:  # %bb.1:592; LA32-NEXT:    move $a0, $a4593; LA32-NEXT:    move $a1, $a5594; LA32-NEXT:  .LBB25_2:595; LA32-NEXT:    ret596;597; LA64-LABEL: bit_11_z_select_i64:598; LA64:       # %bb.0:599; LA64-NEXT:    andi $a0, $a0, 2048600; LA64-NEXT:    sltui $a0, $a0, 1601; LA64-NEXT:    masknez $a2, $a2, $a0602; LA64-NEXT:    maskeqz $a0, $a1, $a0603; LA64-NEXT:    or $a0, $a0, $a2604; LA64-NEXT:    ret605  %1 = and i64 %a, 2048606  %2 = icmp eq i64 %1, 0607  %3 = select i1 %2, i64 %b, i64 %c608  ret i64 %3609}610 611define i64 @bit_11_nz_select_i64(i64 %a, i64 %b, i64 %c) {612; LA32-LABEL: bit_11_nz_select_i64:613; LA32:       # %bb.0:614; LA32-NEXT:    srli.w $a0, $a0, 11615; LA32-NEXT:    andi $a6, $a0, 1616; LA32-NEXT:    move $a1, $a3617; LA32-NEXT:    move $a0, $a2618; LA32-NEXT:    bne $a6, $zero, .LBB26_2619; LA32-NEXT:  # %bb.1:620; LA32-NEXT:    move $a0, $a4621; LA32-NEXT:    move $a1, $a5622; LA32-NEXT:  .LBB26_2:623; LA32-NEXT:    ret624;625; LA64-LABEL: bit_11_nz_select_i64:626; LA64:       # %bb.0:627; LA64-NEXT:    bstrpick.d $a0, $a0, 11, 11628; LA64-NEXT:    masknez $a2, $a2, $a0629; LA64-NEXT:    maskeqz $a0, $a1, $a0630; LA64-NEXT:    or $a0, $a0, $a2631; LA64-NEXT:    ret632  %1 = and i64 %a, 2048633  %2 = icmp ne i64 %1, 0634  %3 = select i1 %2, i64 %b, i64 %c635  ret i64 %3636}637 638define i64 @bit_20_z_select_i64(i64 %a, i64 %b, i64 %c) {639; LA32-LABEL: bit_20_z_select_i64:640; LA32:       # %bb.0:641; LA32-NEXT:    slli.w $a6, $a0, 11642; LA32-NEXT:    move $a1, $a3643; LA32-NEXT:    move $a0, $a2644; LA32-NEXT:    bgez $a6, .LBB27_2645; LA32-NEXT:  # %bb.1:646; LA32-NEXT:    move $a0, $a4647; LA32-NEXT:    move $a1, $a5648; LA32-NEXT:  .LBB27_2:649; LA32-NEXT:    ret650;651; LA64-LABEL: bit_20_z_select_i64:652; LA64:       # %bb.0:653; LA64-NEXT:    lu12i.w $a3, 256654; LA64-NEXT:    and $a0, $a0, $a3655; LA64-NEXT:    sltui $a0, $a0, 1656; LA64-NEXT:    masknez $a2, $a2, $a0657; LA64-NEXT:    maskeqz $a0, $a1, $a0658; LA64-NEXT:    or $a0, $a0, $a2659; LA64-NEXT:    ret660  %1 = and i64 %a, 1048576661  %2 = icmp eq i64 %1, 0662  %3 = select i1 %2, i64 %b, i64 %c663  ret i64 %3664}665 666define i64 @bit_20_nz_select_i64(i64 %a, i64 %b, i64 %c) {667; LA32-LABEL: bit_20_nz_select_i64:668; LA32:       # %bb.0:669; LA32-NEXT:    srli.w $a0, $a0, 20670; LA32-NEXT:    andi $a6, $a0, 1671; LA32-NEXT:    move $a1, $a3672; LA32-NEXT:    move $a0, $a2673; LA32-NEXT:    bne $a6, $zero, .LBB28_2674; LA32-NEXT:  # %bb.1:675; LA32-NEXT:    move $a0, $a4676; LA32-NEXT:    move $a1, $a5677; LA32-NEXT:  .LBB28_2:678; LA32-NEXT:    ret679;680; LA64-LABEL: bit_20_nz_select_i64:681; LA64:       # %bb.0:682; LA64-NEXT:    bstrpick.d $a0, $a0, 20, 20683; LA64-NEXT:    masknez $a2, $a2, $a0684; LA64-NEXT:    maskeqz $a0, $a1, $a0685; LA64-NEXT:    or $a0, $a0, $a2686; LA64-NEXT:    ret687  %1 = and i64 %a, 1048576688  %2 = icmp ne i64 %1, 0689  %3 = select i1 %2, i64 %b, i64 %c690  ret i64 %3691}692 693define i64 @bit_31_z_select_i64(i64 %a, i64 %b, i64 %c) {694; LA32-LABEL: bit_31_z_select_i64:695; LA32:       # %bb.0:696; LA32-NEXT:    move $a1, $a3697; LA32-NEXT:    bgez $a0, .LBB29_2698; LA32-NEXT:  # %bb.1:699; LA32-NEXT:    move $a2, $a4700; LA32-NEXT:    move $a1, $a5701; LA32-NEXT:  .LBB29_2:702; LA32-NEXT:    move $a0, $a2703; LA32-NEXT:    ret704;705; LA64-LABEL: bit_31_z_select_i64:706; LA64:       # %bb.0:707; LA64-NEXT:    lu12i.w $a3, -524288708; LA64-NEXT:    lu32i.d $a3, 0709; LA64-NEXT:    and $a0, $a0, $a3710; LA64-NEXT:    sltui $a0, $a0, 1711; LA64-NEXT:    masknez $a2, $a2, $a0712; LA64-NEXT:    maskeqz $a0, $a1, $a0713; LA64-NEXT:    or $a0, $a0, $a2714; LA64-NEXT:    ret715  %1 = and i64 %a, 2147483648716  %2 = icmp eq i64 %1, 0717  %3 = select i1 %2, i64 %b, i64 %c718  ret i64 %3719}720 721define i64 @bit_31_nz_select_i64(i64 %a, i64 %b, i64 %c) {722; LA32-LABEL: bit_31_nz_select_i64:723; LA32:       # %bb.0:724; LA32-NEXT:    srli.w $a6, $a0, 31725; LA32-NEXT:    move $a1, $a3726; LA32-NEXT:    move $a0, $a2727; LA32-NEXT:    bne $a6, $zero, .LBB30_2728; LA32-NEXT:  # %bb.1:729; LA32-NEXT:    move $a0, $a4730; LA32-NEXT:    move $a1, $a5731; LA32-NEXT:  .LBB30_2:732; LA32-NEXT:    ret733;734; LA64-LABEL: bit_31_nz_select_i64:735; LA64:       # %bb.0:736; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 31737; LA64-NEXT:    masknez $a2, $a2, $a0738; LA64-NEXT:    maskeqz $a0, $a1, $a0739; LA64-NEXT:    or $a0, $a0, $a2740; LA64-NEXT:    ret741  %1 = and i64 %a, 2147483648742  %2 = icmp ne i64 %1, 0743  %3 = select i1 %2, i64 %b, i64 %c744  ret i64 %3745}746 747define i64 @bit_32_z_select_i64(i64 %a, i64 %b, i64 %c) {748; LA32-LABEL: bit_32_z_select_i64:749; LA32:       # %bb.0:750; LA32-NEXT:    andi $a6, $a1, 1751; LA32-NEXT:    move $a1, $a3752; LA32-NEXT:    move $a0, $a2753; LA32-NEXT:    beq $a6, $zero, .LBB31_2754; LA32-NEXT:  # %bb.1:755; LA32-NEXT:    move $a0, $a4756; LA32-NEXT:    move $a1, $a5757; LA32-NEXT:  .LBB31_2:758; LA32-NEXT:    ret759;760; LA64-LABEL: bit_32_z_select_i64:761; LA64:       # %bb.0:762; LA64-NEXT:    ori $a3, $zero, 0763; LA64-NEXT:    lu32i.d $a3, 1764; LA64-NEXT:    and $a0, $a0, $a3765; LA64-NEXT:    sltui $a0, $a0, 1766; LA64-NEXT:    masknez $a2, $a2, $a0767; LA64-NEXT:    maskeqz $a0, $a1, $a0768; LA64-NEXT:    or $a0, $a0, $a2769; LA64-NEXT:    ret770  %1 = and i64 %a, 4294967296771  %2 = icmp eq i64 %1, 0772  %3 = select i1 %2, i64 %b, i64 %c773  ret i64 %3774}775 776define i64 @bit_32_nz_select_i64(i64 %a, i64 %b, i64 %c) {777; LA32-LABEL: bit_32_nz_select_i64:778; LA32:       # %bb.0:779; LA32-NEXT:    andi $a6, $a1, 1780; LA32-NEXT:    move $a1, $a3781; LA32-NEXT:    move $a0, $a2782; LA32-NEXT:    bne $a6, $zero, .LBB32_2783; LA32-NEXT:  # %bb.1:784; LA32-NEXT:    move $a0, $a4785; LA32-NEXT:    move $a1, $a5786; LA32-NEXT:  .LBB32_2:787; LA32-NEXT:    ret788;789; LA64-LABEL: bit_32_nz_select_i64:790; LA64:       # %bb.0:791; LA64-NEXT:    bstrpick.d $a0, $a0, 32, 32792; LA64-NEXT:    masknez $a2, $a2, $a0793; LA64-NEXT:    maskeqz $a0, $a1, $a0794; LA64-NEXT:    or $a0, $a0, $a2795; LA64-NEXT:    ret796  %1 = and i64 %a, 4294967296797  %2 = icmp ne i64 %1, 0798  %3 = select i1 %2, i64 %b, i64 %c799  ret i64 %3800}801 802define i64 @bit_55_z_select_i64(i64 %a, i64 %b, i64 %c) {803; LA32-LABEL: bit_55_z_select_i64:804; LA32:       # %bb.0:805; LA32-NEXT:    slli.w $a6, $a1, 8806; LA32-NEXT:    move $a1, $a3807; LA32-NEXT:    move $a0, $a2808; LA32-NEXT:    bgez $a6, .LBB33_2809; LA32-NEXT:  # %bb.1:810; LA32-NEXT:    move $a0, $a4811; LA32-NEXT:    move $a1, $a5812; LA32-NEXT:  .LBB33_2:813; LA32-NEXT:    ret814;815; LA64-LABEL: bit_55_z_select_i64:816; LA64:       # %bb.0:817; LA64-NEXT:    lu52i.d $a3, $zero, 8818; LA64-NEXT:    and $a0, $a0, $a3819; LA64-NEXT:    sltui $a0, $a0, 1820; LA64-NEXT:    masknez $a2, $a2, $a0821; LA64-NEXT:    maskeqz $a0, $a1, $a0822; LA64-NEXT:    or $a0, $a0, $a2823; LA64-NEXT:    ret824  %1 = and i64 %a, 36028797018963968825  %2 = icmp eq i64 %1, 0826  %3 = select i1 %2, i64 %b, i64 %c827  ret i64 %3828}829 830define i64 @bit_55_nz_select_i64(i64 %a, i64 %b, i64 %c) {831; LA32-LABEL: bit_55_nz_select_i64:832; LA32:       # %bb.0:833; LA32-NEXT:    srli.w $a0, $a1, 23834; LA32-NEXT:    andi $a6, $a0, 1835; LA32-NEXT:    move $a1, $a3836; LA32-NEXT:    move $a0, $a2837; LA32-NEXT:    bne $a6, $zero, .LBB34_2838; LA32-NEXT:  # %bb.1:839; LA32-NEXT:    move $a0, $a4840; LA32-NEXT:    move $a1, $a5841; LA32-NEXT:  .LBB34_2:842; LA32-NEXT:    ret843;844; LA64-LABEL: bit_55_nz_select_i64:845; LA64:       # %bb.0:846; LA64-NEXT:    bstrpick.d $a0, $a0, 55, 55847; LA64-NEXT:    masknez $a2, $a2, $a0848; LA64-NEXT:    maskeqz $a0, $a1, $a0849; LA64-NEXT:    or $a0, $a0, $a2850; LA64-NEXT:    ret851  %1 = and i64 %a, 36028797018963968852  %2 = icmp ne i64 %1, 0853  %3 = select i1 %2, i64 %b, i64 %c854  ret i64 %3855}856 857define i64 @bit_63_z_select_i64(i64 %a, i64 %b, i64 %c) {858; LA32-LABEL: bit_63_z_select_i64:859; LA32:       # %bb.0:860; LA32-NEXT:    move $a0, $a2861; LA32-NEXT:    bgez $a1, .LBB35_2862; LA32-NEXT:  # %bb.1:863; LA32-NEXT:    move $a0, $a4864; LA32-NEXT:    move $a3, $a5865; LA32-NEXT:  .LBB35_2:866; LA32-NEXT:    move $a1, $a3867; LA32-NEXT:    ret868;869; LA64-LABEL: bit_63_z_select_i64:870; LA64:       # %bb.0:871; LA64-NEXT:    bstrins.d $a0, $zero, 62, 0872; LA64-NEXT:    sltui $a0, $a0, 1873; LA64-NEXT:    masknez $a2, $a2, $a0874; LA64-NEXT:    maskeqz $a0, $a1, $a0875; LA64-NEXT:    or $a0, $a0, $a2876; LA64-NEXT:    ret877  %1 = and i64 %a, 9223372036854775808878  %2 = icmp eq i64 %1, 0879  %3 = select i1 %2, i64 %b, i64 %c880  ret i64 %3881}882 883define i64 @bit_63_nz_select_i64(i64 %a, i64 %b, i64 %c) {884; LA32-LABEL: bit_63_nz_select_i64:885; LA32:       # %bb.0:886; LA32-NEXT:    srli.w $a6, $a1, 31887; LA32-NEXT:    move $a1, $a3888; LA32-NEXT:    move $a0, $a2889; LA32-NEXT:    bne $a6, $zero, .LBB36_2890; LA32-NEXT:  # %bb.1:891; LA32-NEXT:    move $a0, $a4892; LA32-NEXT:    move $a1, $a5893; LA32-NEXT:  .LBB36_2:894; LA32-NEXT:    ret895;896; LA64-LABEL: bit_63_nz_select_i64:897; LA64:       # %bb.0:898; LA64-NEXT:    srli.d $a0, $a0, 63899; LA64-NEXT:    masknez $a2, $a2, $a0900; LA64-NEXT:    maskeqz $a0, $a1, $a0901; LA64-NEXT:    or $a0, $a0, $a2902; LA64-NEXT:    ret903  %1 = and i64 %a, 9223372036854775808904  %2 = icmp ne i64 %1, 0905  %3 = select i1 %2, i64 %b, i64 %c906  ret i64 %3907}908 909define void @bit_10_z_branch_i32(i32 signext %0) {910; LA32-LABEL: bit_10_z_branch_i32:911; LA32:       # %bb.0:912; LA32-NEXT:    andi $a0, $a0, 1024913; LA32-NEXT:    bne $a0, $zero, .LBB37_2914; LA32-NEXT:  # %bb.1:915; LA32-NEXT:    b bar916; LA32-NEXT:  .LBB37_2:917; LA32-NEXT:    ret918;919; LA64-LABEL: bit_10_z_branch_i32:920; LA64:       # %bb.0:921; LA64-NEXT:    andi $a0, $a0, 1024922; LA64-NEXT:    bnez $a0, .LBB37_2923; LA64-NEXT:  # %bb.1:924; LA64-NEXT:    pcaddu18i $t8, %call36(bar)925; LA64-NEXT:    jr $t8926; LA64-NEXT:  .LBB37_2:927; LA64-NEXT:    ret928  %2 = and i32 %0, 1024929  %3 = icmp eq i32 %2, 0930  br i1 %3, label %4, label %5931 9324:933  tail call void @bar()934  br label %5935 9365:937  ret void938}939 940define void @bit_10_nz_branch_i32(i32 signext %0) {941; LA32-LABEL: bit_10_nz_branch_i32:942; LA32:       # %bb.0:943; LA32-NEXT:    andi $a0, $a0, 1024944; LA32-NEXT:    beq $a0, $zero, .LBB38_2945; LA32-NEXT:  # %bb.1:946; LA32-NEXT:    b bar947; LA32-NEXT:  .LBB38_2:948; LA32-NEXT:    ret949;950; LA64-LABEL: bit_10_nz_branch_i32:951; LA64:       # %bb.0:952; LA64-NEXT:    andi $a0, $a0, 1024953; LA64-NEXT:    beqz $a0, .LBB38_2954; LA64-NEXT:  # %bb.1:955; LA64-NEXT:    pcaddu18i $t8, %call36(bar)956; LA64-NEXT:    jr $t8957; LA64-NEXT:  .LBB38_2:958; LA64-NEXT:    ret959  %2 = and i32 %0, 1024960  %3 = icmp ne i32 %2, 0961  br i1 %3, label %4, label %5962 9634:964  tail call void @bar()965  br label %5966 9675:968  ret void969}970 971define void @bit_11_z_branch_i32(i32 signext %0) {972; LA32-LABEL: bit_11_z_branch_i32:973; LA32:       # %bb.0:974; LA32-NEXT:    slli.w $a0, $a0, 20975; LA32-NEXT:    bltz $a0, .LBB39_2976; LA32-NEXT:  # %bb.1:977; LA32-NEXT:    b bar978; LA32-NEXT:  .LBB39_2:979; LA32-NEXT:    ret980;981; LA64-LABEL: bit_11_z_branch_i32:982; LA64:       # %bb.0:983; LA64-NEXT:    slli.d $a0, $a0, 52984; LA64-NEXT:    bltz $a0, .LBB39_2985; LA64-NEXT:  # %bb.1:986; LA64-NEXT:    pcaddu18i $t8, %call36(bar)987; LA64-NEXT:    jr $t8988; LA64-NEXT:  .LBB39_2:989; LA64-NEXT:    ret990  %2 = and i32 %0, 2048991  %3 = icmp eq i32 %2, 0992  br i1 %3, label %4, label %5993 9944:995  tail call void @bar()996  br label %5997 9985:999  ret void1000}1001 1002define void @bit_11_nz_branch_i32(i32 signext %0) {1003; LA32-LABEL: bit_11_nz_branch_i32:1004; LA32:       # %bb.0:1005; LA32-NEXT:    slli.w $a0, $a0, 201006; LA32-NEXT:    bgez $a0, .LBB40_21007; LA32-NEXT:  # %bb.1:1008; LA32-NEXT:    b bar1009; LA32-NEXT:  .LBB40_2:1010; LA32-NEXT:    ret1011;1012; LA64-LABEL: bit_11_nz_branch_i32:1013; LA64:       # %bb.0:1014; LA64-NEXT:    slli.d $a0, $a0, 521015; LA64-NEXT:    bgez $a0, .LBB40_21016; LA64-NEXT:  # %bb.1:1017; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1018; LA64-NEXT:    jr $t81019; LA64-NEXT:  .LBB40_2:1020; LA64-NEXT:    ret1021  %2 = and i32 %0, 20481022  %3 = icmp ne i32 %2, 01023  br i1 %3, label %4, label %51024 10254:1026  tail call void @bar()1027  br label %51028 10295:1030  ret void1031}1032 1033define void @bit_24_z_branch_i32(i32 signext %0) {1034; LA32-LABEL: bit_24_z_branch_i32:1035; LA32:       # %bb.0:1036; LA32-NEXT:    slli.w $a0, $a0, 71037; LA32-NEXT:    bltz $a0, .LBB41_21038; LA32-NEXT:  # %bb.1:1039; LA32-NEXT:    b bar1040; LA32-NEXT:  .LBB41_2:1041; LA32-NEXT:    ret1042;1043; LA64-LABEL: bit_24_z_branch_i32:1044; LA64:       # %bb.0:1045; LA64-NEXT:    slli.d $a0, $a0, 391046; LA64-NEXT:    bltz $a0, .LBB41_21047; LA64-NEXT:  # %bb.1:1048; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1049; LA64-NEXT:    jr $t81050; LA64-NEXT:  .LBB41_2:1051; LA64-NEXT:    ret1052  %2 = and i32 %0, 167772161053  %3 = icmp eq i32 %2, 01054  br i1 %3, label %4, label %51055 10564:1057  tail call void @bar()1058  br label %51059 10605:1061  ret void1062}1063 1064define void @bit_24_nz_branch_i32(i32 signext %0) {1065; LA32-LABEL: bit_24_nz_branch_i32:1066; LA32:       # %bb.0:1067; LA32-NEXT:    slli.w $a0, $a0, 71068; LA32-NEXT:    bgez $a0, .LBB42_21069; LA32-NEXT:  # %bb.1:1070; LA32-NEXT:    b bar1071; LA32-NEXT:  .LBB42_2:1072; LA32-NEXT:    ret1073;1074; LA64-LABEL: bit_24_nz_branch_i32:1075; LA64:       # %bb.0:1076; LA64-NEXT:    slli.d $a0, $a0, 391077; LA64-NEXT:    bgez $a0, .LBB42_21078; LA64-NEXT:  # %bb.1:1079; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1080; LA64-NEXT:    jr $t81081; LA64-NEXT:  .LBB42_2:1082; LA64-NEXT:    ret1083  %2 = and i32 %0, 167772161084  %3 = icmp ne i32 %2, 01085  br i1 %3, label %4, label %51086 10874:1088  tail call void @bar()1089  br label %51090 10915:1092  ret void1093}1094 1095define void @bit_31_z_branch_i32(i32 signext %0) {1096; LA32-LABEL: bit_31_z_branch_i32:1097; LA32:       # %bb.0:1098; LA32-NEXT:    bltz $a0, .LBB43_21099; LA32-NEXT:  # %bb.1:1100; LA32-NEXT:    b bar1101; LA32-NEXT:  .LBB43_2:1102; LA32-NEXT:    ret1103;1104; LA64-LABEL: bit_31_z_branch_i32:1105; LA64:       # %bb.0:1106; LA64-NEXT:    bstrins.d $a0, $zero, 30, 01107; LA64-NEXT:    bnez $a0, .LBB43_21108; LA64-NEXT:  # %bb.1:1109; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1110; LA64-NEXT:    jr $t81111; LA64-NEXT:  .LBB43_2:1112; LA64-NEXT:    ret1113  %2 = and i32 %0, 21474836481114  %3 = icmp eq i32 %2, 01115  br i1 %3, label %4, label %51116 11174:1118  tail call void @bar()1119  br label %51120 11215:1122  ret void1123}1124 1125define void @bit_31_nz_branch_i32(i32 signext %0) {1126; LA32-LABEL: bit_31_nz_branch_i32:1127; LA32:       # %bb.0:1128; LA32-NEXT:    bgez $a0, .LBB44_21129; LA32-NEXT:  # %bb.1:1130; LA32-NEXT:    b bar1131; LA32-NEXT:  .LBB44_2:1132; LA32-NEXT:    ret1133;1134; LA64-LABEL: bit_31_nz_branch_i32:1135; LA64:       # %bb.0:1136; LA64-NEXT:    bstrins.d $a0, $zero, 30, 01137; LA64-NEXT:    beqz $a0, .LBB44_21138; LA64-NEXT:  # %bb.1:1139; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1140; LA64-NEXT:    jr $t81141; LA64-NEXT:  .LBB44_2:1142; LA64-NEXT:    ret1143  %2 = and i32 %0, 21474836481144  %3 = icmp ne i32 %2, 01145  br i1 %3, label %4, label %51146 11474:1148  tail call void @bar()1149  br label %51150 11515:1152  ret void1153}1154 1155define void @bit_10_z_branch_i64(i64 %0) {1156; LA32-LABEL: bit_10_z_branch_i64:1157; LA32:       # %bb.0:1158; LA32-NEXT:    andi $a0, $a0, 10241159; LA32-NEXT:    bne $a0, $zero, .LBB45_21160; LA32-NEXT:  # %bb.1:1161; LA32-NEXT:    b bar1162; LA32-NEXT:  .LBB45_2:1163; LA32-NEXT:    ret1164;1165; LA64-LABEL: bit_10_z_branch_i64:1166; LA64:       # %bb.0:1167; LA64-NEXT:    andi $a0, $a0, 10241168; LA64-NEXT:    bnez $a0, .LBB45_21169; LA64-NEXT:  # %bb.1:1170; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1171; LA64-NEXT:    jr $t81172; LA64-NEXT:  .LBB45_2:1173; LA64-NEXT:    ret1174  %2 = and i64 %0, 10241175  %3 = icmp eq i64 %2, 01176  br i1 %3, label %4, label %51177 11784:1179  tail call void @bar()1180  br label %51181 11825:1183  ret void1184}1185 1186define void @bit_10_nz_branch_i64(i64 %0) {1187; LA32-LABEL: bit_10_nz_branch_i64:1188; LA32:       # %bb.0:1189; LA32-NEXT:    andi $a0, $a0, 10241190; LA32-NEXT:    beq $a0, $zero, .LBB46_21191; LA32-NEXT:  # %bb.1:1192; LA32-NEXT:    b bar1193; LA32-NEXT:  .LBB46_2:1194; LA32-NEXT:    ret1195;1196; LA64-LABEL: bit_10_nz_branch_i64:1197; LA64:       # %bb.0:1198; LA64-NEXT:    andi $a0, $a0, 10241199; LA64-NEXT:    beqz $a0, .LBB46_21200; LA64-NEXT:  # %bb.1:1201; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1202; LA64-NEXT:    jr $t81203; LA64-NEXT:  .LBB46_2:1204; LA64-NEXT:    ret1205  %2 = and i64 %0, 10241206  %3 = icmp ne i64 %2, 01207  br i1 %3, label %4, label %51208 12094:1210  tail call void @bar()1211  br label %51212 12135:1214  ret void1215}1216 1217define void @bit_11_z_branch_i64(i64 %0) {1218; LA32-LABEL: bit_11_z_branch_i64:1219; LA32:       # %bb.0:1220; LA32-NEXT:    slli.w $a0, $a0, 201221; LA32-NEXT:    bltz $a0, .LBB47_21222; LA32-NEXT:  # %bb.1:1223; LA32-NEXT:    b bar1224; LA32-NEXT:  .LBB47_2:1225; LA32-NEXT:    ret1226;1227; LA64-LABEL: bit_11_z_branch_i64:1228; LA64:       # %bb.0:1229; LA64-NEXT:    slli.d $a0, $a0, 521230; LA64-NEXT:    bltz $a0, .LBB47_21231; LA64-NEXT:  # %bb.1:1232; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1233; LA64-NEXT:    jr $t81234; LA64-NEXT:  .LBB47_2:1235; LA64-NEXT:    ret1236  %2 = and i64 %0, 20481237  %3 = icmp eq i64 %2, 01238  br i1 %3, label %4, label %51239 12404:1241  tail call void @bar()1242  br label %51243 12445:1245  ret void1246}1247 1248define void @bit_11_nz_branch_i64(i64 %0) {1249; LA32-LABEL: bit_11_nz_branch_i64:1250; LA32:       # %bb.0:1251; LA32-NEXT:    slli.w $a0, $a0, 201252; LA32-NEXT:    bgez $a0, .LBB48_21253; LA32-NEXT:  # %bb.1:1254; LA32-NEXT:    b bar1255; LA32-NEXT:  .LBB48_2:1256; LA32-NEXT:    ret1257;1258; LA64-LABEL: bit_11_nz_branch_i64:1259; LA64:       # %bb.0:1260; LA64-NEXT:    slli.d $a0, $a0, 521261; LA64-NEXT:    bgez $a0, .LBB48_21262; LA64-NEXT:  # %bb.1:1263; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1264; LA64-NEXT:    jr $t81265; LA64-NEXT:  .LBB48_2:1266; LA64-NEXT:    ret1267  %2 = and i64 %0, 20481268  %3 = icmp ne i64 %2, 01269  br i1 %3, label %4, label %51270 12714:1272  tail call void @bar()1273  br label %51274 12755:1276  ret void1277}1278 1279define void @bit_24_z_branch_i64(i64 %0) {1280; LA32-LABEL: bit_24_z_branch_i64:1281; LA32:       # %bb.0:1282; LA32-NEXT:    slli.w $a0, $a0, 71283; LA32-NEXT:    bltz $a0, .LBB49_21284; LA32-NEXT:  # %bb.1:1285; LA32-NEXT:    b bar1286; LA32-NEXT:  .LBB49_2:1287; LA32-NEXT:    ret1288;1289; LA64-LABEL: bit_24_z_branch_i64:1290; LA64:       # %bb.0:1291; LA64-NEXT:    slli.d $a0, $a0, 391292; LA64-NEXT:    bltz $a0, .LBB49_21293; LA64-NEXT:  # %bb.1:1294; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1295; LA64-NEXT:    jr $t81296; LA64-NEXT:  .LBB49_2:1297; LA64-NEXT:    ret1298  %2 = and i64 %0, 167772161299  %3 = icmp eq i64 %2, 01300  br i1 %3, label %4, label %51301 13024:1303  tail call void @bar()1304  br label %51305 13065:1307  ret void1308}1309 1310define void @bit_24_nz_branch_i64(i64 %0) {1311; LA32-LABEL: bit_24_nz_branch_i64:1312; LA32:       # %bb.0:1313; LA32-NEXT:    slli.w $a0, $a0, 71314; LA32-NEXT:    bgez $a0, .LBB50_21315; LA32-NEXT:  # %bb.1:1316; LA32-NEXT:    b bar1317; LA32-NEXT:  .LBB50_2:1318; LA32-NEXT:    ret1319;1320; LA64-LABEL: bit_24_nz_branch_i64:1321; LA64:       # %bb.0:1322; LA64-NEXT:    slli.d $a0, $a0, 391323; LA64-NEXT:    bgez $a0, .LBB50_21324; LA64-NEXT:  # %bb.1:1325; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1326; LA64-NEXT:    jr $t81327; LA64-NEXT:  .LBB50_2:1328; LA64-NEXT:    ret1329  %2 = and i64 %0, 167772161330  %3 = icmp ne i64 %2, 01331  br i1 %3, label %4, label %51332 13334:1334  tail call void @bar()1335  br label %51336 13375:1338  ret void1339}1340 1341define void @bit_31_z_branch_i64(i64 %0) {1342; LA32-LABEL: bit_31_z_branch_i64:1343; LA32:       # %bb.0:1344; LA32-NEXT:    bltz $a0, .LBB51_21345; LA32-NEXT:  # %bb.1:1346; LA32-NEXT:    b bar1347; LA32-NEXT:  .LBB51_2:1348; LA32-NEXT:    ret1349;1350; LA64-LABEL: bit_31_z_branch_i64:1351; LA64:       # %bb.0:1352; LA64-NEXT:    slli.d $a0, $a0, 321353; LA64-NEXT:    bltz $a0, .LBB51_21354; LA64-NEXT:  # %bb.1:1355; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1356; LA64-NEXT:    jr $t81357; LA64-NEXT:  .LBB51_2:1358; LA64-NEXT:    ret1359  %2 = and i64 %0, 21474836481360  %3 = icmp eq i64 %2, 01361  br i1 %3, label %4, label %51362 13634:1364  tail call void @bar()1365  br label %51366 13675:1368  ret void1369}1370 1371define void @bit_31_nz_branch_i64(i64 %0) {1372; LA32-LABEL: bit_31_nz_branch_i64:1373; LA32:       # %bb.0:1374; LA32-NEXT:    bgez $a0, .LBB52_21375; LA32-NEXT:  # %bb.1:1376; LA32-NEXT:    b bar1377; LA32-NEXT:  .LBB52_2:1378; LA32-NEXT:    ret1379;1380; LA64-LABEL: bit_31_nz_branch_i64:1381; LA64:       # %bb.0:1382; LA64-NEXT:    slli.d $a0, $a0, 321383; LA64-NEXT:    bgez $a0, .LBB52_21384; LA64-NEXT:  # %bb.1:1385; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1386; LA64-NEXT:    jr $t81387; LA64-NEXT:  .LBB52_2:1388; LA64-NEXT:    ret1389  %2 = and i64 %0, 21474836481390  %3 = icmp ne i64 %2, 01391  br i1 %3, label %4, label %51392 13934:1394  tail call void @bar()1395  br label %51396 13975:1398  ret void1399}1400 1401define void @bit_32_z_branch_i64(i64 %0) {1402; LA32-LABEL: bit_32_z_branch_i64:1403; LA32:       # %bb.0:1404; LA32-NEXT:    andi $a0, $a1, 11405; LA32-NEXT:    bne $a0, $zero, .LBB53_21406; LA32-NEXT:  # %bb.1:1407; LA32-NEXT:    b bar1408; LA32-NEXT:  .LBB53_2:1409; LA32-NEXT:    ret1410;1411; LA64-LABEL: bit_32_z_branch_i64:1412; LA64:       # %bb.0:1413; LA64-NEXT:    slli.d $a0, $a0, 311414; LA64-NEXT:    bltz $a0, .LBB53_21415; LA64-NEXT:  # %bb.1:1416; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1417; LA64-NEXT:    jr $t81418; LA64-NEXT:  .LBB53_2:1419; LA64-NEXT:    ret1420  %2 = and i64 %0, 42949672961421  %3 = icmp eq i64 %2, 01422  br i1 %3, label %4, label %51423 14244:1425  tail call void @bar()1426  br label %51427 14285:1429  ret void1430}1431 1432define void @bit_32_nz_branch_i64(i64 %0) {1433; LA32-LABEL: bit_32_nz_branch_i64:1434; LA32:       # %bb.0:1435; LA32-NEXT:    andi $a0, $a1, 11436; LA32-NEXT:    beq $a0, $zero, .LBB54_21437; LA32-NEXT:  # %bb.1:1438; LA32-NEXT:    b bar1439; LA32-NEXT:  .LBB54_2:1440; LA32-NEXT:    ret1441;1442; LA64-LABEL: bit_32_nz_branch_i64:1443; LA64:       # %bb.0:1444; LA64-NEXT:    slli.d $a0, $a0, 311445; LA64-NEXT:    bgez $a0, .LBB54_21446; LA64-NEXT:  # %bb.1:1447; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1448; LA64-NEXT:    jr $t81449; LA64-NEXT:  .LBB54_2:1450; LA64-NEXT:    ret1451  %2 = and i64 %0, 42949672961452  %3 = icmp ne i64 %2, 01453  br i1 %3, label %4, label %51454 14554:1456  tail call void @bar()1457  br label %51458 14595:1460  ret void1461}1462 1463define void @bit_62_z_branch_i64(i64 %0) {1464; LA32-LABEL: bit_62_z_branch_i64:1465; LA32:       # %bb.0:1466; LA32-NEXT:    slli.w $a0, $a1, 11467; LA32-NEXT:    bltz $a0, .LBB55_21468; LA32-NEXT:  # %bb.1:1469; LA32-NEXT:    b bar1470; LA32-NEXT:  .LBB55_2:1471; LA32-NEXT:    ret1472;1473; LA64-LABEL: bit_62_z_branch_i64:1474; LA64:       # %bb.0:1475; LA64-NEXT:    slli.d $a0, $a0, 11476; LA64-NEXT:    bltz $a0, .LBB55_21477; LA64-NEXT:  # %bb.1:1478; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1479; LA64-NEXT:    jr $t81480; LA64-NEXT:  .LBB55_2:1481; LA64-NEXT:    ret1482  %2 = and i64 %0, 46116860184273879041483  %3 = icmp eq i64 %2, 01484  br i1 %3, label %4, label %51485 14864:1487  tail call void @bar()1488  br label %51489 14905:1491  ret void1492}1493 1494define void @bit_62_nz_branch_i64(i64 %0) {1495; LA32-LABEL: bit_62_nz_branch_i64:1496; LA32:       # %bb.0:1497; LA32-NEXT:    slli.w $a0, $a1, 11498; LA32-NEXT:    bgez $a0, .LBB56_21499; LA32-NEXT:  # %bb.1:1500; LA32-NEXT:    b bar1501; LA32-NEXT:  .LBB56_2:1502; LA32-NEXT:    ret1503;1504; LA64-LABEL: bit_62_nz_branch_i64:1505; LA64:       # %bb.0:1506; LA64-NEXT:    slli.d $a0, $a0, 11507; LA64-NEXT:    bgez $a0, .LBB56_21508; LA64-NEXT:  # %bb.1:1509; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1510; LA64-NEXT:    jr $t81511; LA64-NEXT:  .LBB56_2:1512; LA64-NEXT:    ret1513  %2 = and i64 %0, 46116860184273879041514  %3 = icmp ne i64 %2, 01515  br i1 %3, label %4, label %51516 15174:1518  tail call void @bar()1519  br label %51520 15215:1522  ret void1523}1524 1525define void @bit_63_z_branch_i64(i64 %0) {1526; LA32-LABEL: bit_63_z_branch_i64:1527; LA32:       # %bb.0:1528; LA32-NEXT:    bltz $a1, .LBB57_21529; LA32-NEXT:  # %bb.1:1530; LA32-NEXT:    b bar1531; LA32-NEXT:  .LBB57_2:1532; LA32-NEXT:    ret1533;1534; LA64-LABEL: bit_63_z_branch_i64:1535; LA64:       # %bb.0:1536; LA64-NEXT:    bltz $a0, .LBB57_21537; LA64-NEXT:  # %bb.1:1538; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1539; LA64-NEXT:    jr $t81540; LA64-NEXT:  .LBB57_2:1541; LA64-NEXT:    ret1542  %2 = and i64 %0, 92233720368547758081543  %3 = icmp eq i64 %2, 01544  br i1 %3, label %4, label %51545 15464:1547  tail call void @bar()1548  br label %51549 15505:1551  ret void1552}1553 1554define void @bit_63_nz_branch_i64(i64 %0) {1555; LA32-LABEL: bit_63_nz_branch_i64:1556; LA32:       # %bb.0:1557; LA32-NEXT:    bgez $a1, .LBB58_21558; LA32-NEXT:  # %bb.1:1559; LA32-NEXT:    b bar1560; LA32-NEXT:  .LBB58_2:1561; LA32-NEXT:    ret1562;1563; LA64-LABEL: bit_63_nz_branch_i64:1564; LA64:       # %bb.0:1565; LA64-NEXT:    bgez $a0, .LBB58_21566; LA64-NEXT:  # %bb.1:1567; LA64-NEXT:    pcaddu18i $t8, %call36(bar)1568; LA64-NEXT:    jr $t81569; LA64-NEXT:  .LBB58_2:1570; LA64-NEXT:    ret1571  %2 = and i64 %0, 92233720368547758081572  %3 = icmp ne i64 %2, 01573  br i1 %3, label %4, label %51574 15754:1576  tail call void @bar()1577  br label %51578 15795:1580  ret void1581}1582 1583define signext i32 @bit_10_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1584; LA32-LABEL: bit_10_1_z_select_i32:1585; LA32:       # %bb.0:1586; LA32-NEXT:    andi $a3, $a0, 10231587; LA32-NEXT:    move $a0, $a11588; LA32-NEXT:    beq $a3, $zero, .LBB59_21589; LA32-NEXT:  # %bb.1:1590; LA32-NEXT:    move $a0, $a21591; LA32-NEXT:  .LBB59_2:1592; LA32-NEXT:    ret1593;1594; LA64-LABEL: bit_10_1_z_select_i32:1595; LA64:       # %bb.0:1596; LA64-NEXT:    andi $a0, $a0, 10231597; LA64-NEXT:    sltui $a0, $a0, 11598; LA64-NEXT:    masknez $a2, $a2, $a01599; LA64-NEXT:    maskeqz $a0, $a1, $a01600; LA64-NEXT:    or $a0, $a0, $a21601; LA64-NEXT:    ret1602  %1 = and i32 %a, 10231603  %2 = icmp eq i32 %1, 01604  %3 = select i1 %2, i32 %b, i32 %c1605  ret i32 %31606}1607 1608define signext i32 @bit_10_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1609; LA32-LABEL: bit_10_1_nz_select_i32:1610; LA32:       # %bb.0:1611; LA32-NEXT:    andi $a3, $a0, 10231612; LA32-NEXT:    move $a0, $a11613; LA32-NEXT:    bne $a3, $zero, .LBB60_21614; LA32-NEXT:  # %bb.1:1615; LA32-NEXT:    move $a0, $a21616; LA32-NEXT:  .LBB60_2:1617; LA32-NEXT:    ret1618;1619; LA64-LABEL: bit_10_1_nz_select_i32:1620; LA64:       # %bb.0:1621; LA64-NEXT:    andi $a0, $a0, 10231622; LA64-NEXT:    sltu $a0, $zero, $a01623; LA64-NEXT:    masknez $a2, $a2, $a01624; LA64-NEXT:    maskeqz $a0, $a1, $a01625; LA64-NEXT:    or $a0, $a0, $a21626; LA64-NEXT:    ret1627  %1 = and i32 %a, 10231628  %2 = icmp ne i32 %1, 01629  %3 = select i1 %2, i32 %b, i32 %c1630  ret i32 %31631}1632 1633define signext i32 @bit_11_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1634; LA32-LABEL: bit_11_1_z_select_i32:1635; LA32:       # %bb.0:1636; LA32-NEXT:    andi $a3, $a0, 20471637; LA32-NEXT:    move $a0, $a11638; LA32-NEXT:    beq $a3, $zero, .LBB61_21639; LA32-NEXT:  # %bb.1:1640; LA32-NEXT:    move $a0, $a21641; LA32-NEXT:  .LBB61_2:1642; LA32-NEXT:    ret1643;1644; LA64-LABEL: bit_11_1_z_select_i32:1645; LA64:       # %bb.0:1646; LA64-NEXT:    andi $a0, $a0, 20471647; LA64-NEXT:    sltui $a0, $a0, 11648; LA64-NEXT:    masknez $a2, $a2, $a01649; LA64-NEXT:    maskeqz $a0, $a1, $a01650; LA64-NEXT:    or $a0, $a0, $a21651; LA64-NEXT:    ret1652  %1 = and i32 %a, 20471653  %2 = icmp eq i32 %1, 01654  %3 = select i1 %2, i32 %b, i32 %c1655  ret i32 %31656}1657 1658define signext i32 @bit_11_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1659; LA32-LABEL: bit_11_1_nz_select_i32:1660; LA32:       # %bb.0:1661; LA32-NEXT:    andi $a3, $a0, 20471662; LA32-NEXT:    move $a0, $a11663; LA32-NEXT:    bne $a3, $zero, .LBB62_21664; LA32-NEXT:  # %bb.1:1665; LA32-NEXT:    move $a0, $a21666; LA32-NEXT:  .LBB62_2:1667; LA32-NEXT:    ret1668;1669; LA64-LABEL: bit_11_1_nz_select_i32:1670; LA64:       # %bb.0:1671; LA64-NEXT:    andi $a0, $a0, 20471672; LA64-NEXT:    sltu $a0, $zero, $a01673; LA64-NEXT:    masknez $a2, $a2, $a01674; LA64-NEXT:    maskeqz $a0, $a1, $a01675; LA64-NEXT:    or $a0, $a0, $a21676; LA64-NEXT:    ret1677  %1 = and i32 %a, 20471678  %2 = icmp ne i32 %1, 01679  %3 = select i1 %2, i32 %b, i32 %c1680  ret i32 %31681}1682 1683define signext i32 @bit_16_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1684; LA32-LABEL: bit_16_1_z_select_i32:1685; LA32:       # %bb.0:1686; LA32-NEXT:    slli.w $a3, $a0, 161687; LA32-NEXT:    move $a0, $a11688; LA32-NEXT:    beq $a3, $zero, .LBB63_21689; LA32-NEXT:  # %bb.1:1690; LA32-NEXT:    move $a0, $a21691; LA32-NEXT:  .LBB63_2:1692; LA32-NEXT:    ret1693;1694; LA64-LABEL: bit_16_1_z_select_i32:1695; LA64:       # %bb.0:1696; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 01697; LA64-NEXT:    sltui $a0, $a0, 11698; LA64-NEXT:    masknez $a2, $a2, $a01699; LA64-NEXT:    maskeqz $a0, $a1, $a01700; LA64-NEXT:    or $a0, $a0, $a21701; LA64-NEXT:    ret1702  %1 = and i32 %a, 655351703  %2 = icmp eq i32 %1, 01704  %3 = select i1 %2, i32 %b, i32 %c1705  ret i32 %31706}1707 1708define signext i32 @bit_16_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1709; LA32-LABEL: bit_16_1_nz_select_i32:1710; LA32:       # %bb.0:1711; LA32-NEXT:    slli.w $a3, $a0, 161712; LA32-NEXT:    move $a0, $a11713; LA32-NEXT:    bne $a3, $zero, .LBB64_21714; LA32-NEXT:  # %bb.1:1715; LA32-NEXT:    move $a0, $a21716; LA32-NEXT:  .LBB64_2:1717; LA32-NEXT:    ret1718;1719; LA64-LABEL: bit_16_1_nz_select_i32:1720; LA64:       # %bb.0:1721; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 01722; LA64-NEXT:    sltu $a0, $zero, $a01723; LA64-NEXT:    masknez $a2, $a2, $a01724; LA64-NEXT:    maskeqz $a0, $a1, $a01725; LA64-NEXT:    or $a0, $a0, $a21726; LA64-NEXT:    ret1727  %1 = and i32 %a, 655351728  %2 = icmp ne i32 %1, 01729  %3 = select i1 %2, i32 %b, i32 %c1730  ret i32 %31731}1732 1733define signext i32 @bit_20_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1734; LA32-LABEL: bit_20_1_z_select_i32:1735; LA32:       # %bb.0:1736; LA32-NEXT:    slli.w $a3, $a0, 121737; LA32-NEXT:    move $a0, $a11738; LA32-NEXT:    beq $a3, $zero, .LBB65_21739; LA32-NEXT:  # %bb.1:1740; LA32-NEXT:    move $a0, $a21741; LA32-NEXT:  .LBB65_2:1742; LA32-NEXT:    ret1743;1744; LA64-LABEL: bit_20_1_z_select_i32:1745; LA64:       # %bb.0:1746; LA64-NEXT:    bstrpick.d $a0, $a0, 19, 01747; LA64-NEXT:    sltui $a0, $a0, 11748; LA64-NEXT:    masknez $a2, $a2, $a01749; LA64-NEXT:    maskeqz $a0, $a1, $a01750; LA64-NEXT:    or $a0, $a0, $a21751; LA64-NEXT:    ret1752  %1 = and i32 %a, 10485751753  %2 = icmp eq i32 %1, 01754  %3 = select i1 %2, i32 %b, i32 %c1755  ret i32 %31756}1757 1758define signext i32 @bit_20_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1759; LA32-LABEL: bit_20_1_nz_select_i32:1760; LA32:       # %bb.0:1761; LA32-NEXT:    slli.w $a3, $a0, 121762; LA32-NEXT:    move $a0, $a11763; LA32-NEXT:    bne $a3, $zero, .LBB66_21764; LA32-NEXT:  # %bb.1:1765; LA32-NEXT:    move $a0, $a21766; LA32-NEXT:  .LBB66_2:1767; LA32-NEXT:    ret1768;1769; LA64-LABEL: bit_20_1_nz_select_i32:1770; LA64:       # %bb.0:1771; LA64-NEXT:    bstrpick.d $a0, $a0, 19, 01772; LA64-NEXT:    sltu $a0, $zero, $a01773; LA64-NEXT:    masknez $a2, $a2, $a01774; LA64-NEXT:    maskeqz $a0, $a1, $a01775; LA64-NEXT:    or $a0, $a0, $a21776; LA64-NEXT:    ret1777  %1 = and i32 %a, 10485751778  %2 = icmp ne i32 %1, 01779  %3 = select i1 %2, i32 %b, i32 %c1780  ret i32 %31781}1782 1783define signext i32 @bit_31_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1784; LA32-LABEL: bit_31_1_z_select_i32:1785; LA32:       # %bb.0:1786; LA32-NEXT:    slli.w $a3, $a0, 11787; LA32-NEXT:    move $a0, $a11788; LA32-NEXT:    beq $a3, $zero, .LBB67_21789; LA32-NEXT:  # %bb.1:1790; LA32-NEXT:    move $a0, $a21791; LA32-NEXT:  .LBB67_2:1792; LA32-NEXT:    ret1793;1794; LA64-LABEL: bit_31_1_z_select_i32:1795; LA64:       # %bb.0:1796; LA64-NEXT:    bstrpick.d $a0, $a0, 30, 01797; LA64-NEXT:    sltui $a0, $a0, 11798; LA64-NEXT:    masknez $a2, $a2, $a01799; LA64-NEXT:    maskeqz $a0, $a1, $a01800; LA64-NEXT:    or $a0, $a0, $a21801; LA64-NEXT:    ret1802  %1 = and i32 %a, 21474836471803  %2 = icmp eq i32 %1, 01804  %3 = select i1 %2, i32 %b, i32 %c1805  ret i32 %31806}1807 1808define signext i32 @bit_31_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1809; LA32-LABEL: bit_31_1_nz_select_i32:1810; LA32:       # %bb.0:1811; LA32-NEXT:    slli.w $a3, $a0, 11812; LA32-NEXT:    move $a0, $a11813; LA32-NEXT:    bne $a3, $zero, .LBB68_21814; LA32-NEXT:  # %bb.1:1815; LA32-NEXT:    move $a0, $a21816; LA32-NEXT:  .LBB68_2:1817; LA32-NEXT:    ret1818;1819; LA64-LABEL: bit_31_1_nz_select_i32:1820; LA64:       # %bb.0:1821; LA64-NEXT:    bstrpick.d $a0, $a0, 30, 01822; LA64-NEXT:    sltu $a0, $zero, $a01823; LA64-NEXT:    masknez $a2, $a2, $a01824; LA64-NEXT:    maskeqz $a0, $a1, $a01825; LA64-NEXT:    or $a0, $a0, $a21826; LA64-NEXT:    ret1827  %1 = and i32 %a, 21474836471828  %2 = icmp ne i32 %1, 01829  %3 = select i1 %2, i32 %b, i32 %c1830  ret i32 %31831}1832 1833define signext i32 @bit_32_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1834; LA32-LABEL: bit_32_1_z_select_i32:1835; LA32:       # %bb.0:1836; LA32-NEXT:    beq $a0, $zero, .LBB69_21837; LA32-NEXT:  # %bb.1:1838; LA32-NEXT:    move $a1, $a21839; LA32-NEXT:  .LBB69_2:1840; LA32-NEXT:    move $a0, $a11841; LA32-NEXT:    ret1842;1843; LA64-LABEL: bit_32_1_z_select_i32:1844; LA64:       # %bb.0:1845; LA64-NEXT:    sltui $a0, $a0, 11846; LA64-NEXT:    masknez $a2, $a2, $a01847; LA64-NEXT:    maskeqz $a0, $a1, $a01848; LA64-NEXT:    or $a0, $a0, $a21849; LA64-NEXT:    ret1850  %1 = and i32 %a, 42949672951851  %2 = icmp eq i32 %1, 01852  %3 = select i1 %2, i32 %b, i32 %c1853  ret i32 %31854}1855 1856define signext i32 @bit_32_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1857; LA32-LABEL: bit_32_1_nz_select_i32:1858; LA32:       # %bb.0:1859; LA32-NEXT:    bne $a0, $zero, .LBB70_21860; LA32-NEXT:  # %bb.1:1861; LA32-NEXT:    move $a1, $a21862; LA32-NEXT:  .LBB70_2:1863; LA32-NEXT:    move $a0, $a11864; LA32-NEXT:    ret1865;1866; LA64-LABEL: bit_32_1_nz_select_i32:1867; LA64:       # %bb.0:1868; LA64-NEXT:    sltu $a0, $zero, $a01869; LA64-NEXT:    masknez $a2, $a2, $a01870; LA64-NEXT:    maskeqz $a0, $a1, $a01871; LA64-NEXT:    or $a0, $a0, $a21872; LA64-NEXT:    ret1873  %1 = and i32 %a, 42949672951874  %2 = icmp ne i32 %1, 01875  %3 = select i1 %2, i32 %b, i32 %c1876  ret i32 %31877}1878 1879define i64 @bit_10_1_z_select_i64(i64 %a, i64 %b, i64 %c) {1880; LA32-LABEL: bit_10_1_z_select_i64:1881; LA32:       # %bb.0:1882; LA32-NEXT:    andi $a6, $a0, 10231883; LA32-NEXT:    move $a1, $a31884; LA32-NEXT:    move $a0, $a21885; LA32-NEXT:    beq $a6, $zero, .LBB71_21886; LA32-NEXT:  # %bb.1:1887; LA32-NEXT:    move $a0, $a41888; LA32-NEXT:    move $a1, $a51889; LA32-NEXT:  .LBB71_2:1890; LA32-NEXT:    ret1891;1892; LA64-LABEL: bit_10_1_z_select_i64:1893; LA64:       # %bb.0:1894; LA64-NEXT:    andi $a0, $a0, 10231895; LA64-NEXT:    sltui $a0, $a0, 11896; LA64-NEXT:    masknez $a2, $a2, $a01897; LA64-NEXT:    maskeqz $a0, $a1, $a01898; LA64-NEXT:    or $a0, $a0, $a21899; LA64-NEXT:    ret1900  %1 = and i64 %a, 10231901  %2 = icmp eq i64 %1, 01902  %3 = select i1 %2, i64 %b, i64 %c1903  ret i64 %31904}1905 1906define i64 @bit_10_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {1907; LA32-LABEL: bit_10_1_nz_select_i64:1908; LA32:       # %bb.0:1909; LA32-NEXT:    andi $a6, $a0, 10231910; LA32-NEXT:    move $a1, $a31911; LA32-NEXT:    move $a0, $a21912; LA32-NEXT:    bne $a6, $zero, .LBB72_21913; LA32-NEXT:  # %bb.1:1914; LA32-NEXT:    move $a0, $a41915; LA32-NEXT:    move $a1, $a51916; LA32-NEXT:  .LBB72_2:1917; LA32-NEXT:    ret1918;1919; LA64-LABEL: bit_10_1_nz_select_i64:1920; LA64:       # %bb.0:1921; LA64-NEXT:    andi $a0, $a0, 10231922; LA64-NEXT:    sltu $a0, $zero, $a01923; LA64-NEXT:    masknez $a2, $a2, $a01924; LA64-NEXT:    maskeqz $a0, $a1, $a01925; LA64-NEXT:    or $a0, $a0, $a21926; LA64-NEXT:    ret1927  %1 = and i64 %a, 10231928  %2 = icmp ne i64 %1, 01929  %3 = select i1 %2, i64 %b, i64 %c1930  ret i64 %31931}1932 1933define i64 @bit_11_1_z_select_i64(i64 %a, i64 %b, i64 %c) {1934; LA32-LABEL: bit_11_1_z_select_i64:1935; LA32:       # %bb.0:1936; LA32-NEXT:    andi $a6, $a0, 20471937; LA32-NEXT:    move $a1, $a31938; LA32-NEXT:    move $a0, $a21939; LA32-NEXT:    beq $a6, $zero, .LBB73_21940; LA32-NEXT:  # %bb.1:1941; LA32-NEXT:    move $a0, $a41942; LA32-NEXT:    move $a1, $a51943; LA32-NEXT:  .LBB73_2:1944; LA32-NEXT:    ret1945;1946; LA64-LABEL: bit_11_1_z_select_i64:1947; LA64:       # %bb.0:1948; LA64-NEXT:    andi $a0, $a0, 20471949; LA64-NEXT:    sltui $a0, $a0, 11950; LA64-NEXT:    masknez $a2, $a2, $a01951; LA64-NEXT:    maskeqz $a0, $a1, $a01952; LA64-NEXT:    or $a0, $a0, $a21953; LA64-NEXT:    ret1954  %1 = and i64 %a, 20471955  %2 = icmp eq i64 %1, 01956  %3 = select i1 %2, i64 %b, i64 %c1957  ret i64 %31958}1959 1960define i64 @bit_11_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {1961; LA32-LABEL: bit_11_1_nz_select_i64:1962; LA32:       # %bb.0:1963; LA32-NEXT:    andi $a6, $a0, 20471964; LA32-NEXT:    move $a1, $a31965; LA32-NEXT:    move $a0, $a21966; LA32-NEXT:    bne $a6, $zero, .LBB74_21967; LA32-NEXT:  # %bb.1:1968; LA32-NEXT:    move $a0, $a41969; LA32-NEXT:    move $a1, $a51970; LA32-NEXT:  .LBB74_2:1971; LA32-NEXT:    ret1972;1973; LA64-LABEL: bit_11_1_nz_select_i64:1974; LA64:       # %bb.0:1975; LA64-NEXT:    andi $a0, $a0, 20471976; LA64-NEXT:    sltu $a0, $zero, $a01977; LA64-NEXT:    masknez $a2, $a2, $a01978; LA64-NEXT:    maskeqz $a0, $a1, $a01979; LA64-NEXT:    or $a0, $a0, $a21980; LA64-NEXT:    ret1981  %1 = and i64 %a, 20471982  %2 = icmp ne i64 %1, 01983  %3 = select i1 %2, i64 %b, i64 %c1984  ret i64 %31985}1986 1987define i64 @bit_16_1_z_select_i64(i64 %a, i64 %b, i64 %c) {1988; LA32-LABEL: bit_16_1_z_select_i64:1989; LA32:       # %bb.0:1990; LA32-NEXT:    slli.w $a6, $a0, 161991; LA32-NEXT:    move $a1, $a31992; LA32-NEXT:    move $a0, $a21993; LA32-NEXT:    beq $a6, $zero, .LBB75_21994; LA32-NEXT:  # %bb.1:1995; LA32-NEXT:    move $a0, $a41996; LA32-NEXT:    move $a1, $a51997; LA32-NEXT:  .LBB75_2:1998; LA32-NEXT:    ret1999;2000; LA64-LABEL: bit_16_1_z_select_i64:2001; LA64:       # %bb.0:2002; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 02003; LA64-NEXT:    sltui $a0, $a0, 12004; LA64-NEXT:    masknez $a2, $a2, $a02005; LA64-NEXT:    maskeqz $a0, $a1, $a02006; LA64-NEXT:    or $a0, $a0, $a22007; LA64-NEXT:    ret2008  %1 = and i64 %a, 655352009  %2 = icmp eq i64 %1, 02010  %3 = select i1 %2, i64 %b, i64 %c2011  ret i64 %32012}2013 2014define i64 @bit_16_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2015; LA32-LABEL: bit_16_1_nz_select_i64:2016; LA32:       # %bb.0:2017; LA32-NEXT:    move $a1, $a32018; LA32-NEXT:    bne $a0, $zero, .LBB76_22019; LA32-NEXT:  # %bb.1:2020; LA32-NEXT:    move $a2, $a42021; LA32-NEXT:    move $a1, $a52022; LA32-NEXT:  .LBB76_2:2023; LA32-NEXT:    move $a0, $a22024; LA32-NEXT:    ret2025;2026; LA64-LABEL: bit_16_1_nz_select_i64:2027; LA64:       # %bb.0:2028; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 02029; LA64-NEXT:    sltu $a0, $zero, $a02030; LA64-NEXT:    masknez $a2, $a2, $a02031; LA64-NEXT:    maskeqz $a0, $a1, $a02032; LA64-NEXT:    or $a0, $a0, $a22033; LA64-NEXT:    ret2034  %1 = and i64 %a, 42949672952035  %2 = icmp ne i64 %1, 02036  %3 = select i1 %2, i64 %b, i64 %c2037  ret i64 %32038}2039 2040define i64 @bit_20_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2041; LA32-LABEL: bit_20_1_z_select_i64:2042; LA32:       # %bb.0:2043; LA32-NEXT:    slli.w $a6, $a0, 122044; LA32-NEXT:    move $a1, $a32045; LA32-NEXT:    move $a0, $a22046; LA32-NEXT:    beq $a6, $zero, .LBB77_22047; LA32-NEXT:  # %bb.1:2048; LA32-NEXT:    move $a0, $a42049; LA32-NEXT:    move $a1, $a52050; LA32-NEXT:  .LBB77_2:2051; LA32-NEXT:    ret2052;2053; LA64-LABEL: bit_20_1_z_select_i64:2054; LA64:       # %bb.0:2055; LA64-NEXT:    bstrpick.d $a0, $a0, 19, 02056; LA64-NEXT:    sltui $a0, $a0, 12057; LA64-NEXT:    masknez $a2, $a2, $a02058; LA64-NEXT:    maskeqz $a0, $a1, $a02059; LA64-NEXT:    or $a0, $a0, $a22060; LA64-NEXT:    ret2061  %1 = and i64 %a, 10485752062  %2 = icmp eq i64 %1, 02063  %3 = select i1 %2, i64 %b, i64 %c2064  ret i64 %32065}2066 2067define i64 @bit_20_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2068; LA32-LABEL: bit_20_1_nz_select_i64:2069; LA32:       # %bb.0:2070; LA32-NEXT:    slli.w $a6, $a0, 122071; LA32-NEXT:    move $a1, $a32072; LA32-NEXT:    move $a0, $a22073; LA32-NEXT:    bne $a6, $zero, .LBB78_22074; LA32-NEXT:  # %bb.1:2075; LA32-NEXT:    move $a0, $a42076; LA32-NEXT:    move $a1, $a52077; LA32-NEXT:  .LBB78_2:2078; LA32-NEXT:    ret2079;2080; LA64-LABEL: bit_20_1_nz_select_i64:2081; LA64:       # %bb.0:2082; LA64-NEXT:    bstrpick.d $a0, $a0, 19, 02083; LA64-NEXT:    sltu $a0, $zero, $a02084; LA64-NEXT:    masknez $a2, $a2, $a02085; LA64-NEXT:    maskeqz $a0, $a1, $a02086; LA64-NEXT:    or $a0, $a0, $a22087; LA64-NEXT:    ret2088  %1 = and i64 %a, 10485752089  %2 = icmp ne i64 %1, 02090  %3 = select i1 %2, i64 %b, i64 %c2091  ret i64 %32092}2093 2094define i64 @bit_31_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2095; LA32-LABEL: bit_31_1_z_select_i64:2096; LA32:       # %bb.0:2097; LA32-NEXT:    slli.w $a6, $a0, 12098; LA32-NEXT:    move $a1, $a32099; LA32-NEXT:    move $a0, $a22100; LA32-NEXT:    beq $a6, $zero, .LBB79_22101; LA32-NEXT:  # %bb.1:2102; LA32-NEXT:    move $a0, $a42103; LA32-NEXT:    move $a1, $a52104; LA32-NEXT:  .LBB79_2:2105; LA32-NEXT:    ret2106;2107; LA64-LABEL: bit_31_1_z_select_i64:2108; LA64:       # %bb.0:2109; LA64-NEXT:    bstrpick.d $a0, $a0, 30, 02110; LA64-NEXT:    sltui $a0, $a0, 12111; LA64-NEXT:    masknez $a2, $a2, $a02112; LA64-NEXT:    maskeqz $a0, $a1, $a02113; LA64-NEXT:    or $a0, $a0, $a22114; LA64-NEXT:    ret2115  %1 = and i64 %a, 21474836472116  %2 = icmp eq i64 %1, 02117  %3 = select i1 %2, i64 %b, i64 %c2118  ret i64 %32119}2120 2121define i64 @bit_31_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2122; LA32-LABEL: bit_31_1_nz_select_i64:2123; LA32:       # %bb.0:2124; LA32-NEXT:    slli.w $a6, $a0, 12125; LA32-NEXT:    move $a1, $a32126; LA32-NEXT:    move $a0, $a22127; LA32-NEXT:    bne $a6, $zero, .LBB80_22128; LA32-NEXT:  # %bb.1:2129; LA32-NEXT:    move $a0, $a42130; LA32-NEXT:    move $a1, $a52131; LA32-NEXT:  .LBB80_2:2132; LA32-NEXT:    ret2133;2134; LA64-LABEL: bit_31_1_nz_select_i64:2135; LA64:       # %bb.0:2136; LA64-NEXT:    bstrpick.d $a0, $a0, 30, 02137; LA64-NEXT:    sltu $a0, $zero, $a02138; LA64-NEXT:    masknez $a2, $a2, $a02139; LA64-NEXT:    maskeqz $a0, $a1, $a02140; LA64-NEXT:    or $a0, $a0, $a22141; LA64-NEXT:    ret2142  %1 = and i64 %a, 21474836472143  %2 = icmp ne i64 %1, 02144  %3 = select i1 %2, i64 %b, i64 %c2145  ret i64 %32146}2147 2148define i64 @bit_32_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2149; LA32-LABEL: bit_32_1_z_select_i64:2150; LA32:       # %bb.0:2151; LA32-NEXT:    move $a1, $a32152; LA32-NEXT:    beq $a0, $zero, .LBB81_22153; LA32-NEXT:  # %bb.1:2154; LA32-NEXT:    move $a2, $a42155; LA32-NEXT:    move $a1, $a52156; LA32-NEXT:  .LBB81_2:2157; LA32-NEXT:    move $a0, $a22158; LA32-NEXT:    ret2159;2160; LA64-LABEL: bit_32_1_z_select_i64:2161; LA64:       # %bb.0:2162; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 02163; LA64-NEXT:    sltui $a0, $a0, 12164; LA64-NEXT:    masknez $a2, $a2, $a02165; LA64-NEXT:    maskeqz $a0, $a1, $a02166; LA64-NEXT:    or $a0, $a0, $a22167; LA64-NEXT:    ret2168  %1 = and i64 %a, 42949672952169  %2 = icmp eq i64 %1, 02170  %3 = select i1 %2, i64 %b, i64 %c2171  ret i64 %32172}2173 2174define i64 @bit_32_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2175; LA32-LABEL: bit_32_1_nz_select_i64:2176; LA32:       # %bb.0:2177; LA32-NEXT:    move $a1, $a32178; LA32-NEXT:    bne $a0, $zero, .LBB82_22179; LA32-NEXT:  # %bb.1:2180; LA32-NEXT:    move $a2, $a42181; LA32-NEXT:    move $a1, $a52182; LA32-NEXT:  .LBB82_2:2183; LA32-NEXT:    move $a0, $a22184; LA32-NEXT:    ret2185;2186; LA64-LABEL: bit_32_1_nz_select_i64:2187; LA64:       # %bb.0:2188; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 02189; LA64-NEXT:    sltu $a0, $zero, $a02190; LA64-NEXT:    masknez $a2, $a2, $a02191; LA64-NEXT:    maskeqz $a0, $a1, $a02192; LA64-NEXT:    or $a0, $a0, $a22193; LA64-NEXT:    ret2194  %1 = and i64 %a, 42949672952195  %2 = icmp ne i64 %1, 02196  %3 = select i1 %2, i64 %b, i64 %c2197  ret i64 %32198}2199 2200define i64 @bit_55_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2201; LA32-LABEL: bit_55_1_z_select_i64:2202; LA32:       # %bb.0:2203; LA32-NEXT:    lu12i.w $a6, 20472204; LA32-NEXT:    ori $a6, $a6, 40952205; LA32-NEXT:    and $a1, $a1, $a62206; LA32-NEXT:    or $a6, $a0, $a12207; LA32-NEXT:    move $a1, $a32208; LA32-NEXT:    move $a0, $a22209; LA32-NEXT:    beq $a6, $zero, .LBB83_22210; LA32-NEXT:  # %bb.1:2211; LA32-NEXT:    move $a0, $a42212; LA32-NEXT:    move $a1, $a52213; LA32-NEXT:  .LBB83_2:2214; LA32-NEXT:    ret2215;2216; LA64-LABEL: bit_55_1_z_select_i64:2217; LA64:       # %bb.0:2218; LA64-NEXT:    bstrpick.d $a0, $a0, 54, 02219; LA64-NEXT:    sltui $a0, $a0, 12220; LA64-NEXT:    masknez $a2, $a2, $a02221; LA64-NEXT:    maskeqz $a0, $a1, $a02222; LA64-NEXT:    or $a0, $a0, $a22223; LA64-NEXT:    ret2224  %1 = and i64 %a, 360287970189639672225  %2 = icmp eq i64 %1, 02226  %3 = select i1 %2, i64 %b, i64 %c2227  ret i64 %32228}2229 2230define i64 @bit_55_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2231; LA32-LABEL: bit_55_1_nz_select_i64:2232; LA32:       # %bb.0:2233; LA32-NEXT:    lu12i.w $a6, 20472234; LA32-NEXT:    ori $a6, $a6, 40952235; LA32-NEXT:    and $a1, $a1, $a62236; LA32-NEXT:    or $a6, $a0, $a12237; LA32-NEXT:    move $a1, $a32238; LA32-NEXT:    move $a0, $a22239; LA32-NEXT:    bne $a6, $zero, .LBB84_22240; LA32-NEXT:  # %bb.1:2241; LA32-NEXT:    move $a0, $a42242; LA32-NEXT:    move $a1, $a52243; LA32-NEXT:  .LBB84_2:2244; LA32-NEXT:    ret2245;2246; LA64-LABEL: bit_55_1_nz_select_i64:2247; LA64:       # %bb.0:2248; LA64-NEXT:    bstrpick.d $a0, $a0, 54, 02249; LA64-NEXT:    sltu $a0, $zero, $a02250; LA64-NEXT:    masknez $a2, $a2, $a02251; LA64-NEXT:    maskeqz $a0, $a1, $a02252; LA64-NEXT:    or $a0, $a0, $a22253; LA64-NEXT:    ret2254  %1 = and i64 %a, 360287970189639672255  %2 = icmp ne i64 %1, 02256  %3 = select i1 %2, i64 %b, i64 %c2257  ret i64 %32258}2259 2260define i64 @bit_63_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2261; LA32-LABEL: bit_63_1_z_select_i64:2262; LA32:       # %bb.0:2263; LA32-NEXT:    lu12i.w $a6, 5242872264; LA32-NEXT:    ori $a6, $a6, 40952265; LA32-NEXT:    and $a1, $a1, $a62266; LA32-NEXT:    or $a6, $a0, $a12267; LA32-NEXT:    move $a1, $a32268; LA32-NEXT:    move $a0, $a22269; LA32-NEXT:    beq $a6, $zero, .LBB85_22270; LA32-NEXT:  # %bb.1:2271; LA32-NEXT:    move $a0, $a42272; LA32-NEXT:    move $a1, $a52273; LA32-NEXT:  .LBB85_2:2274; LA32-NEXT:    ret2275;2276; LA64-LABEL: bit_63_1_z_select_i64:2277; LA64:       # %bb.0:2278; LA64-NEXT:    bstrpick.d $a0, $a0, 62, 02279; LA64-NEXT:    sltui $a0, $a0, 12280; LA64-NEXT:    masknez $a2, $a2, $a02281; LA64-NEXT:    maskeqz $a0, $a1, $a02282; LA64-NEXT:    or $a0, $a0, $a22283; LA64-NEXT:    ret2284  %1 = and i64 %a, 92233720368547758072285  %2 = icmp eq i64 %1, 02286  %3 = select i1 %2, i64 %b, i64 %c2287  ret i64 %32288}2289 2290define i64 @bit_63_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2291; LA32-LABEL: bit_63_1_nz_select_i64:2292; LA32:       # %bb.0:2293; LA32-NEXT:    lu12i.w $a6, 5242872294; LA32-NEXT:    ori $a6, $a6, 40952295; LA32-NEXT:    and $a1, $a1, $a62296; LA32-NEXT:    or $a6, $a0, $a12297; LA32-NEXT:    move $a1, $a32298; LA32-NEXT:    move $a0, $a22299; LA32-NEXT:    bne $a6, $zero, .LBB86_22300; LA32-NEXT:  # %bb.1:2301; LA32-NEXT:    move $a0, $a42302; LA32-NEXT:    move $a1, $a52303; LA32-NEXT:  .LBB86_2:2304; LA32-NEXT:    ret2305;2306; LA64-LABEL: bit_63_1_nz_select_i64:2307; LA64:       # %bb.0:2308; LA64-NEXT:    bstrpick.d $a0, $a0, 62, 02309; LA64-NEXT:    sltu $a0, $zero, $a02310; LA64-NEXT:    masknez $a2, $a2, $a02311; LA64-NEXT:    maskeqz $a0, $a1, $a02312; LA64-NEXT:    or $a0, $a0, $a22313; LA64-NEXT:    ret2314  %1 = and i64 %a, 92233720368547758072315  %2 = icmp ne i64 %1, 02316  %3 = select i1 %2, i64 %b, i64 %c2317  ret i64 %32318}2319 2320define i64 @bit_64_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2321; LA32-LABEL: bit_64_1_z_select_i64:2322; LA32:       # %bb.0:2323; LA32-NEXT:    or $a6, $a0, $a12324; LA32-NEXT:    move $a1, $a32325; LA32-NEXT:    move $a0, $a22326; LA32-NEXT:    beq $a6, $zero, .LBB87_22327; LA32-NEXT:  # %bb.1:2328; LA32-NEXT:    move $a0, $a42329; LA32-NEXT:    move $a1, $a52330; LA32-NEXT:  .LBB87_2:2331; LA32-NEXT:    ret2332;2333; LA64-LABEL: bit_64_1_z_select_i64:2334; LA64:       # %bb.0:2335; LA64-NEXT:    sltui $a0, $a0, 12336; LA64-NEXT:    masknez $a2, $a2, $a02337; LA64-NEXT:    maskeqz $a0, $a1, $a02338; LA64-NEXT:    or $a0, $a0, $a22339; LA64-NEXT:    ret2340  %1 = and i64 %a, 184467440737095516152341  %2 = icmp eq i64 %1, 02342  %3 = select i1 %2, i64 %b, i64 %c2343  ret i64 %32344}2345 2346define i64 @bit_64_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2347; LA32-LABEL: bit_64_1_nz_select_i64:2348; LA32:       # %bb.0:2349; LA32-NEXT:    or $a6, $a0, $a12350; LA32-NEXT:    move $a1, $a32351; LA32-NEXT:    move $a0, $a22352; LA32-NEXT:    bne $a6, $zero, .LBB88_22353; LA32-NEXT:  # %bb.1:2354; LA32-NEXT:    move $a0, $a42355; LA32-NEXT:    move $a1, $a52356; LA32-NEXT:  .LBB88_2:2357; LA32-NEXT:    ret2358;2359; LA64-LABEL: bit_64_1_nz_select_i64:2360; LA64:       # %bb.0:2361; LA64-NEXT:    sltu $a0, $zero, $a02362; LA64-NEXT:    masknez $a2, $a2, $a02363; LA64-NEXT:    maskeqz $a0, $a1, $a02364; LA64-NEXT:    or $a0, $a0, $a22365; LA64-NEXT:    ret2366  %1 = and i64 %a, 184467440737095516152367  %2 = icmp ne i64 %1, 02368  %3 = select i1 %2, i64 %b, i64 %c2369  ret i64 %32370}2371 2372define void @bit_10_1_z_branch_i32(i32 signext %0) {2373; LA32-LABEL: bit_10_1_z_branch_i32:2374; LA32:       # %bb.0:2375; LA32-NEXT:    andi $a0, $a0, 10232376; LA32-NEXT:    beq $a0, $zero, .LBB89_22377; LA32-NEXT:  # %bb.1:2378; LA32-NEXT:    ret2379; LA32-NEXT:  .LBB89_2:2380; LA32-NEXT:    b bar2381;2382; LA64-LABEL: bit_10_1_z_branch_i32:2383; LA64:       # %bb.0:2384; LA64-NEXT:    andi $a0, $a0, 10232385; LA64-NEXT:    beqz $a0, .LBB89_22386; LA64-NEXT:  # %bb.1:2387; LA64-NEXT:    ret2388; LA64-NEXT:  .LBB89_2:2389; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2390; LA64-NEXT:    jr $t82391  %2 = and i32 %0, 10232392  %3 = icmp eq i32 %2, 02393  br i1 %3, label %4, label %52394 23954:2396  tail call void @bar()2397  br label %52398 23995:2400  ret void2401}2402 2403define void @bit_10_1_nz_branch_i32(i32 signext %0) {2404; LA32-LABEL: bit_10_1_nz_branch_i32:2405; LA32:       # %bb.0:2406; LA32-NEXT:    andi $a0, $a0, 10232407; LA32-NEXT:    beq $a0, $zero, .LBB90_22408; LA32-NEXT:  # %bb.1:2409; LA32-NEXT:    b bar2410; LA32-NEXT:  .LBB90_2:2411; LA32-NEXT:    ret2412;2413; LA64-LABEL: bit_10_1_nz_branch_i32:2414; LA64:       # %bb.0:2415; LA64-NEXT:    andi $a0, $a0, 10232416; LA64-NEXT:    beqz $a0, .LBB90_22417; LA64-NEXT:  # %bb.1:2418; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2419; LA64-NEXT:    jr $t82420; LA64-NEXT:  .LBB90_2:2421; LA64-NEXT:    ret2422  %2 = and i32 %0, 10232423  %3 = icmp ne i32 %2, 02424  br i1 %3, label %4, label %52425 24264:2427  tail call void @bar()2428  br label %52429 24305:2431  ret void2432}2433 2434define void @bit_11_1_z_branch_i32(i32 signext %0) {2435; LA32-LABEL: bit_11_1_z_branch_i32:2436; LA32:       # %bb.0:2437; LA32-NEXT:    andi $a0, $a0, 20472438; LA32-NEXT:    beq $a0, $zero, .LBB91_22439; LA32-NEXT:  # %bb.1:2440; LA32-NEXT:    ret2441; LA32-NEXT:  .LBB91_2:2442; LA32-NEXT:    b bar2443;2444; LA64-LABEL: bit_11_1_z_branch_i32:2445; LA64:       # %bb.0:2446; LA64-NEXT:    andi $a0, $a0, 20472447; LA64-NEXT:    beqz $a0, .LBB91_22448; LA64-NEXT:  # %bb.1:2449; LA64-NEXT:    ret2450; LA64-NEXT:  .LBB91_2:2451; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2452; LA64-NEXT:    jr $t82453  %2 = and i32 %0, 20472454  %3 = icmp eq i32 %2, 02455  br i1 %3, label %4, label %52456 24574:2458  tail call void @bar()2459  br label %52460 24615:2462  ret void2463}2464 2465define void @bit_11_1_nz_branch_i32(i32 signext %0) {2466; LA32-LABEL: bit_11_1_nz_branch_i32:2467; LA32:       # %bb.0:2468; LA32-NEXT:    andi $a0, $a0, 20472469; LA32-NEXT:    beq $a0, $zero, .LBB92_22470; LA32-NEXT:  # %bb.1:2471; LA32-NEXT:    b bar2472; LA32-NEXT:  .LBB92_2:2473; LA32-NEXT:    ret2474;2475; LA64-LABEL: bit_11_1_nz_branch_i32:2476; LA64:       # %bb.0:2477; LA64-NEXT:    andi $a0, $a0, 20472478; LA64-NEXT:    beqz $a0, .LBB92_22479; LA64-NEXT:  # %bb.1:2480; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2481; LA64-NEXT:    jr $t82482; LA64-NEXT:  .LBB92_2:2483; LA64-NEXT:    ret2484  %2 = and i32 %0, 20472485  %3 = icmp ne i32 %2, 02486  br i1 %3, label %4, label %52487 24884:2489  tail call void @bar()2490  br label %52491 24925:2493  ret void2494}2495 2496define void @bit_16_1_z_branch_i32(i32 signext %0) {2497; LA32-LABEL: bit_16_1_z_branch_i32:2498; LA32:       # %bb.0:2499; LA32-NEXT:    slli.w $a0, $a0, 162500; LA32-NEXT:    beq $a0, $zero, .LBB93_22501; LA32-NEXT:  # %bb.1:2502; LA32-NEXT:    ret2503; LA32-NEXT:  .LBB93_2:2504; LA32-NEXT:    b bar2505;2506; LA64-LABEL: bit_16_1_z_branch_i32:2507; LA64:       # %bb.0:2508; LA64-NEXT:    slli.d $a0, $a0, 482509; LA64-NEXT:    beqz $a0, .LBB93_22510; LA64-NEXT:  # %bb.1:2511; LA64-NEXT:    ret2512; LA64-NEXT:  .LBB93_2:2513; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2514; LA64-NEXT:    jr $t82515  %2 = and i32 %0, 655352516  %3 = icmp eq i32 %2, 02517  br i1 %3, label %4, label %52518 25194:2520  tail call void @bar()2521  br label %52522 25235:2524  ret void2525}2526 2527define void @bit_16_1_nz_branch_i32(i32 signext %0) {2528; LA32-LABEL: bit_16_1_nz_branch_i32:2529; LA32:       # %bb.0:2530; LA32-NEXT:    slli.w $a0, $a0, 162531; LA32-NEXT:    beq $a0, $zero, .LBB94_22532; LA32-NEXT:  # %bb.1:2533; LA32-NEXT:    b bar2534; LA32-NEXT:  .LBB94_2:2535; LA32-NEXT:    ret2536;2537; LA64-LABEL: bit_16_1_nz_branch_i32:2538; LA64:       # %bb.0:2539; LA64-NEXT:    slli.d $a0, $a0, 482540; LA64-NEXT:    beqz $a0, .LBB94_22541; LA64-NEXT:  # %bb.1:2542; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2543; LA64-NEXT:    jr $t82544; LA64-NEXT:  .LBB94_2:2545; LA64-NEXT:    ret2546  %2 = and i32 %0, 655352547  %3 = icmp ne i32 %2, 02548  br i1 %3, label %4, label %52549 25504:2551  tail call void @bar()2552  br label %52553 25545:2555  ret void2556}2557 2558define void @bit_24_1_z_branch_i32(i32 signext %0) {2559; LA32-LABEL: bit_24_1_z_branch_i32:2560; LA32:       # %bb.0:2561; LA32-NEXT:    slli.w $a0, $a0, 82562; LA32-NEXT:    beq $a0, $zero, .LBB95_22563; LA32-NEXT:  # %bb.1:2564; LA32-NEXT:    ret2565; LA32-NEXT:  .LBB95_2:2566; LA32-NEXT:    b bar2567;2568; LA64-LABEL: bit_24_1_z_branch_i32:2569; LA64:       # %bb.0:2570; LA64-NEXT:    slli.d $a0, $a0, 402571; LA64-NEXT:    beqz $a0, .LBB95_22572; LA64-NEXT:  # %bb.1:2573; LA64-NEXT:    ret2574; LA64-NEXT:  .LBB95_2:2575; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2576; LA64-NEXT:    jr $t82577  %2 = and i32 %0, 167772152578  %3 = icmp eq i32 %2, 02579  br i1 %3, label %4, label %52580 25814:2582  tail call void @bar()2583  br label %52584 25855:2586  ret void2587}2588 2589define void @bit_24_1_nz_branch_i32(i32 signext %0) {2590; LA32-LABEL: bit_24_1_nz_branch_i32:2591; LA32:       # %bb.0:2592; LA32-NEXT:    slli.w $a0, $a0, 82593; LA32-NEXT:    beq $a0, $zero, .LBB96_22594; LA32-NEXT:  # %bb.1:2595; LA32-NEXT:    b bar2596; LA32-NEXT:  .LBB96_2:2597; LA32-NEXT:    ret2598;2599; LA64-LABEL: bit_24_1_nz_branch_i32:2600; LA64:       # %bb.0:2601; LA64-NEXT:    slli.d $a0, $a0, 402602; LA64-NEXT:    beqz $a0, .LBB96_22603; LA64-NEXT:  # %bb.1:2604; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2605; LA64-NEXT:    jr $t82606; LA64-NEXT:  .LBB96_2:2607; LA64-NEXT:    ret2608  %2 = and i32 %0, 167772152609  %3 = icmp ne i32 %2, 02610  br i1 %3, label %4, label %52611 26124:2613  tail call void @bar()2614  br label %52615 26165:2617  ret void2618}2619 2620define void @bit_31_1_z_branch_i32(i32 signext %0) {2621; LA32-LABEL: bit_31_1_z_branch_i32:2622; LA32:       # %bb.0:2623; LA32-NEXT:    slli.w $a0, $a0, 12624; LA32-NEXT:    beq $a0, $zero, .LBB97_22625; LA32-NEXT:  # %bb.1:2626; LA32-NEXT:    ret2627; LA32-NEXT:  .LBB97_2:2628; LA32-NEXT:    b bar2629;2630; LA64-LABEL: bit_31_1_z_branch_i32:2631; LA64:       # %bb.0:2632; LA64-NEXT:    slli.d $a0, $a0, 332633; LA64-NEXT:    beqz $a0, .LBB97_22634; LA64-NEXT:  # %bb.1:2635; LA64-NEXT:    ret2636; LA64-NEXT:  .LBB97_2:2637; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2638; LA64-NEXT:    jr $t82639  %2 = and i32 %0, 21474836472640  %3 = icmp eq i32 %2, 02641  br i1 %3, label %4, label %52642 26434:2644  tail call void @bar()2645  br label %52646 26475:2648  ret void2649}2650 2651define void @bit_31_1_nz_branch_i32(i32 signext %0) {2652; LA32-LABEL: bit_31_1_nz_branch_i32:2653; LA32:       # %bb.0:2654; LA32-NEXT:    slli.w $a0, $a0, 12655; LA32-NEXT:    beq $a0, $zero, .LBB98_22656; LA32-NEXT:  # %bb.1:2657; LA32-NEXT:    b bar2658; LA32-NEXT:  .LBB98_2:2659; LA32-NEXT:    ret2660;2661; LA64-LABEL: bit_31_1_nz_branch_i32:2662; LA64:       # %bb.0:2663; LA64-NEXT:    slli.d $a0, $a0, 332664; LA64-NEXT:    beqz $a0, .LBB98_22665; LA64-NEXT:  # %bb.1:2666; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2667; LA64-NEXT:    jr $t82668; LA64-NEXT:  .LBB98_2:2669; LA64-NEXT:    ret2670  %2 = and i32 %0, 21474836472671  %3 = icmp ne i32 %2, 02672  br i1 %3, label %4, label %52673 26744:2675  tail call void @bar()2676  br label %52677 26785:2679  ret void2680}2681 2682define void @bit_32_1_z_branch_i32(i32 signext %0) {2683; LA32-LABEL: bit_32_1_z_branch_i32:2684; LA32:       # %bb.0:2685; LA32-NEXT:    beq $a0, $zero, .LBB99_22686; LA32-NEXT:  # %bb.1:2687; LA32-NEXT:    ret2688; LA32-NEXT:  .LBB99_2:2689; LA32-NEXT:    b bar2690;2691; LA64-LABEL: bit_32_1_z_branch_i32:2692; LA64:       # %bb.0:2693; LA64-NEXT:    beqz $a0, .LBB99_22694; LA64-NEXT:  # %bb.1:2695; LA64-NEXT:    ret2696; LA64-NEXT:  .LBB99_2:2697; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2698; LA64-NEXT:    jr $t82699  %2 = and i32 %0, 42949672952700  %3 = icmp eq i32 %2, 02701  br i1 %3, label %4, label %52702 27034:2704  tail call void @bar()2705  br label %52706 27075:2708  ret void2709}2710 2711define void @bit_32_1_nz_branch_i32(i32 signext %0) {2712; LA32-LABEL: bit_32_1_nz_branch_i32:2713; LA32:       # %bb.0:2714; LA32-NEXT:    beq $a0, $zero, .LBB100_22715; LA32-NEXT:  # %bb.1:2716; LA32-NEXT:    b bar2717; LA32-NEXT:  .LBB100_2:2718; LA32-NEXT:    ret2719;2720; LA64-LABEL: bit_32_1_nz_branch_i32:2721; LA64:       # %bb.0:2722; LA64-NEXT:    beqz $a0, .LBB100_22723; LA64-NEXT:  # %bb.1:2724; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2725; LA64-NEXT:    jr $t82726; LA64-NEXT:  .LBB100_2:2727; LA64-NEXT:    ret2728  %2 = and i32 %0, 42949672952729  %3 = icmp ne i32 %2, 02730  br i1 %3, label %4, label %52731 27324:2733  tail call void @bar()2734  br label %52735 27365:2737  ret void2738}2739 2740define void @bit_10_1_z_branch_i64(i64 %0) {2741; LA32-LABEL: bit_10_1_z_branch_i64:2742; LA32:       # %bb.0:2743; LA32-NEXT:    andi $a0, $a0, 10232744; LA32-NEXT:    beq $a0, $zero, .LBB101_22745; LA32-NEXT:  # %bb.1:2746; LA32-NEXT:    ret2747; LA32-NEXT:  .LBB101_2:2748; LA32-NEXT:    b bar2749;2750; LA64-LABEL: bit_10_1_z_branch_i64:2751; LA64:       # %bb.0:2752; LA64-NEXT:    andi $a0, $a0, 10232753; LA64-NEXT:    beqz $a0, .LBB101_22754; LA64-NEXT:  # %bb.1:2755; LA64-NEXT:    ret2756; LA64-NEXT:  .LBB101_2:2757; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2758; LA64-NEXT:    jr $t82759  %2 = and i64 %0, 10232760  %3 = icmp eq i64 %2, 02761  br i1 %3, label %4, label %52762 27634:2764  tail call void @bar()2765  br label %52766 27675:2768  ret void2769}2770 2771define void @bit_10_1_nz_branch_i64(i64 %0) {2772; LA32-LABEL: bit_10_1_nz_branch_i64:2773; LA32:       # %bb.0:2774; LA32-NEXT:    andi $a0, $a0, 10232775; LA32-NEXT:    beq $a0, $zero, .LBB102_22776; LA32-NEXT:  # %bb.1:2777; LA32-NEXT:    b bar2778; LA32-NEXT:  .LBB102_2:2779; LA32-NEXT:    ret2780;2781; LA64-LABEL: bit_10_1_nz_branch_i64:2782; LA64:       # %bb.0:2783; LA64-NEXT:    andi $a0, $a0, 10232784; LA64-NEXT:    beqz $a0, .LBB102_22785; LA64-NEXT:  # %bb.1:2786; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2787; LA64-NEXT:    jr $t82788; LA64-NEXT:  .LBB102_2:2789; LA64-NEXT:    ret2790  %2 = and i64 %0, 10232791  %3 = icmp ne i64 %2, 02792  br i1 %3, label %4, label %52793 27944:2795  tail call void @bar()2796  br label %52797 27985:2799  ret void2800}2801 2802define void @bit_11_1_z_branch_i64(i64 %0) {2803; LA32-LABEL: bit_11_1_z_branch_i64:2804; LA32:       # %bb.0:2805; LA32-NEXT:    andi $a0, $a0, 20472806; LA32-NEXT:    beq $a0, $zero, .LBB103_22807; LA32-NEXT:  # %bb.1:2808; LA32-NEXT:    ret2809; LA32-NEXT:  .LBB103_2:2810; LA32-NEXT:    b bar2811;2812; LA64-LABEL: bit_11_1_z_branch_i64:2813; LA64:       # %bb.0:2814; LA64-NEXT:    andi $a0, $a0, 20472815; LA64-NEXT:    beqz $a0, .LBB103_22816; LA64-NEXT:  # %bb.1:2817; LA64-NEXT:    ret2818; LA64-NEXT:  .LBB103_2:2819; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2820; LA64-NEXT:    jr $t82821  %2 = and i64 %0, 20472822  %3 = icmp eq i64 %2, 02823  br i1 %3, label %4, label %52824 28254:2826  tail call void @bar()2827  br label %52828 28295:2830  ret void2831}2832 2833define void @bit_11_1_nz_branch_i64(i64 %0) {2834; LA32-LABEL: bit_11_1_nz_branch_i64:2835; LA32:       # %bb.0:2836; LA32-NEXT:    andi $a0, $a0, 20472837; LA32-NEXT:    beq $a0, $zero, .LBB104_22838; LA32-NEXT:  # %bb.1:2839; LA32-NEXT:    b bar2840; LA32-NEXT:  .LBB104_2:2841; LA32-NEXT:    ret2842;2843; LA64-LABEL: bit_11_1_nz_branch_i64:2844; LA64:       # %bb.0:2845; LA64-NEXT:    andi $a0, $a0, 20472846; LA64-NEXT:    beqz $a0, .LBB104_22847; LA64-NEXT:  # %bb.1:2848; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2849; LA64-NEXT:    jr $t82850; LA64-NEXT:  .LBB104_2:2851; LA64-NEXT:    ret2852  %2 = and i64 %0, 20472853  %3 = icmp ne i64 %2, 02854  br i1 %3, label %4, label %52855 28564:2857  tail call void @bar()2858  br label %52859 28605:2861  ret void2862}2863 2864define void @bit_16_1_z_branch_i64(i64 %0) {2865; LA32-LABEL: bit_16_1_z_branch_i64:2866; LA32:       # %bb.0:2867; LA32-NEXT:    slli.w $a0, $a0, 162868; LA32-NEXT:    beq $a0, $zero, .LBB105_22869; LA32-NEXT:  # %bb.1:2870; LA32-NEXT:    ret2871; LA32-NEXT:  .LBB105_2:2872; LA32-NEXT:    b bar2873;2874; LA64-LABEL: bit_16_1_z_branch_i64:2875; LA64:       # %bb.0:2876; LA64-NEXT:    slli.d $a0, $a0, 482877; LA64-NEXT:    beqz $a0, .LBB105_22878; LA64-NEXT:  # %bb.1:2879; LA64-NEXT:    ret2880; LA64-NEXT:  .LBB105_2:2881; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2882; LA64-NEXT:    jr $t82883  %2 = and i64 %0, 655352884  %3 = icmp eq i64 %2, 02885  br i1 %3, label %4, label %52886 28874:2888  tail call void @bar()2889  br label %52890 28915:2892  ret void2893}2894 2895define void @bit_16_1_nz_branch_i64(i64 %0) {2896; LA32-LABEL: bit_16_1_nz_branch_i64:2897; LA32:       # %bb.0:2898; LA32-NEXT:    slli.w $a0, $a0, 162899; LA32-NEXT:    beq $a0, $zero, .LBB106_22900; LA32-NEXT:  # %bb.1:2901; LA32-NEXT:    b bar2902; LA32-NEXT:  .LBB106_2:2903; LA32-NEXT:    ret2904;2905; LA64-LABEL: bit_16_1_nz_branch_i64:2906; LA64:       # %bb.0:2907; LA64-NEXT:    slli.d $a0, $a0, 482908; LA64-NEXT:    beqz $a0, .LBB106_22909; LA64-NEXT:  # %bb.1:2910; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2911; LA64-NEXT:    jr $t82912; LA64-NEXT:  .LBB106_2:2913; LA64-NEXT:    ret2914  %2 = and i64 %0, 655352915  %3 = icmp ne i64 %2, 02916  br i1 %3, label %4, label %52917 29184:2919  tail call void @bar()2920  br label %52921 29225:2923  ret void2924}2925 2926define void @bit_24_1_z_branch_i64(i64 %0) {2927; LA32-LABEL: bit_24_1_z_branch_i64:2928; LA32:       # %bb.0:2929; LA32-NEXT:    slli.w $a0, $a0, 82930; LA32-NEXT:    beq $a0, $zero, .LBB107_22931; LA32-NEXT:  # %bb.1:2932; LA32-NEXT:    ret2933; LA32-NEXT:  .LBB107_2:2934; LA32-NEXT:    b bar2935;2936; LA64-LABEL: bit_24_1_z_branch_i64:2937; LA64:       # %bb.0:2938; LA64-NEXT:    slli.d $a0, $a0, 402939; LA64-NEXT:    beqz $a0, .LBB107_22940; LA64-NEXT:  # %bb.1:2941; LA64-NEXT:    ret2942; LA64-NEXT:  .LBB107_2:2943; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2944; LA64-NEXT:    jr $t82945  %2 = and i64 %0, 167772152946  %3 = icmp eq i64 %2, 02947  br i1 %3, label %4, label %52948 29494:2950  tail call void @bar()2951  br label %52952 29535:2954  ret void2955}2956 2957define void @bit_24_1_nz_branch_i64(i64 %0) {2958; LA32-LABEL: bit_24_1_nz_branch_i64:2959; LA32:       # %bb.0:2960; LA32-NEXT:    slli.w $a0, $a0, 82961; LA32-NEXT:    beq $a0, $zero, .LBB108_22962; LA32-NEXT:  # %bb.1:2963; LA32-NEXT:    b bar2964; LA32-NEXT:  .LBB108_2:2965; LA32-NEXT:    ret2966;2967; LA64-LABEL: bit_24_1_nz_branch_i64:2968; LA64:       # %bb.0:2969; LA64-NEXT:    slli.d $a0, $a0, 402970; LA64-NEXT:    beqz $a0, .LBB108_22971; LA64-NEXT:  # %bb.1:2972; LA64-NEXT:    pcaddu18i $t8, %call36(bar)2973; LA64-NEXT:    jr $t82974; LA64-NEXT:  .LBB108_2:2975; LA64-NEXT:    ret2976  %2 = and i64 %0, 167772152977  %3 = icmp ne i64 %2, 02978  br i1 %3, label %4, label %52979 29804:2981  tail call void @bar()2982  br label %52983 29845:2985  ret void2986}2987 2988define void @bit_31_1_z_branch_i64(i64 %0) {2989; LA32-LABEL: bit_31_1_z_branch_i64:2990; LA32:       # %bb.0:2991; LA32-NEXT:    slli.w $a0, $a0, 12992; LA32-NEXT:    beq $a0, $zero, .LBB109_22993; LA32-NEXT:  # %bb.1:2994; LA32-NEXT:    ret2995; LA32-NEXT:  .LBB109_2:2996; LA32-NEXT:    b bar2997;2998; LA64-LABEL: bit_31_1_z_branch_i64:2999; LA64:       # %bb.0:3000; LA64-NEXT:    slli.d $a0, $a0, 333001; LA64-NEXT:    beqz $a0, .LBB109_23002; LA64-NEXT:  # %bb.1:3003; LA64-NEXT:    ret3004; LA64-NEXT:  .LBB109_2:3005; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3006; LA64-NEXT:    jr $t83007  %2 = and i64 %0, 21474836473008  %3 = icmp eq i64 %2, 03009  br i1 %3, label %4, label %53010 30114:3012  tail call void @bar()3013  br label %53014 30155:3016  ret void3017}3018 3019define void @bit_31_1_nz_branch_i64(i64 %0) {3020; LA32-LABEL: bit_31_1_nz_branch_i64:3021; LA32:       # %bb.0:3022; LA32-NEXT:    slli.w $a0, $a0, 13023; LA32-NEXT:    beq $a0, $zero, .LBB110_23024; LA32-NEXT:  # %bb.1:3025; LA32-NEXT:    b bar3026; LA32-NEXT:  .LBB110_2:3027; LA32-NEXT:    ret3028;3029; LA64-LABEL: bit_31_1_nz_branch_i64:3030; LA64:       # %bb.0:3031; LA64-NEXT:    slli.d $a0, $a0, 333032; LA64-NEXT:    beqz $a0, .LBB110_23033; LA64-NEXT:  # %bb.1:3034; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3035; LA64-NEXT:    jr $t83036; LA64-NEXT:  .LBB110_2:3037; LA64-NEXT:    ret3038  %2 = and i64 %0, 21474836473039  %3 = icmp ne i64 %2, 03040  br i1 %3, label %4, label %53041 30424:3043  tail call void @bar()3044  br label %53045 30465:3047  ret void3048}3049 3050define void @bit_32_1_z_branch_i64(i64 %0) {3051; LA32-LABEL: bit_32_1_z_branch_i64:3052; LA32:       # %bb.0:3053; LA32-NEXT:    beq $a0, $zero, .LBB111_23054; LA32-NEXT:  # %bb.1:3055; LA32-NEXT:    ret3056; LA32-NEXT:  .LBB111_2:3057; LA32-NEXT:    b bar3058;3059; LA64-LABEL: bit_32_1_z_branch_i64:3060; LA64:       # %bb.0:3061; LA64-NEXT:    slli.d $a0, $a0, 323062; LA64-NEXT:    beqz $a0, .LBB111_23063; LA64-NEXT:  # %bb.1:3064; LA64-NEXT:    ret3065; LA64-NEXT:  .LBB111_2:3066; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3067; LA64-NEXT:    jr $t83068  %2 = and i64 %0, 42949672953069  %3 = icmp eq i64 %2, 03070  br i1 %3, label %4, label %53071 30724:3073  tail call void @bar()3074  br label %53075 30765:3077  ret void3078}3079 3080define void @bit_32_1_nz_branch_i64(i64 %0) {3081; LA32-LABEL: bit_32_1_nz_branch_i64:3082; LA32:       # %bb.0:3083; LA32-NEXT:    beq $a0, $zero, .LBB112_23084; LA32-NEXT:  # %bb.1:3085; LA32-NEXT:    b bar3086; LA32-NEXT:  .LBB112_2:3087; LA32-NEXT:    ret3088;3089; LA64-LABEL: bit_32_1_nz_branch_i64:3090; LA64:       # %bb.0:3091; LA64-NEXT:    slli.d $a0, $a0, 323092; LA64-NEXT:    beqz $a0, .LBB112_23093; LA64-NEXT:  # %bb.1:3094; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3095; LA64-NEXT:    jr $t83096; LA64-NEXT:  .LBB112_2:3097; LA64-NEXT:    ret3098  %2 = and i64 %0, 42949672953099  %3 = icmp ne i64 %2, 03100  br i1 %3, label %4, label %53101 31024:3103  tail call void @bar()3104  br label %53105 31065:3107  ret void3108}3109 3110define void @bit_62_1_z_branch_i64(i64 %0) {3111; LA32-LABEL: bit_62_1_z_branch_i64:3112; LA32:       # %bb.0:3113; LA32-NEXT:    lu12i.w $a2, 2621433114; LA32-NEXT:    ori $a2, $a2, 40953115; LA32-NEXT:    and $a1, $a1, $a23116; LA32-NEXT:    or $a0, $a0, $a13117; LA32-NEXT:    beq $a0, $zero, .LBB113_23118; LA32-NEXT:  # %bb.1:3119; LA32-NEXT:    ret3120; LA32-NEXT:  .LBB113_2:3121; LA32-NEXT:    b bar3122;3123; LA64-LABEL: bit_62_1_z_branch_i64:3124; LA64:       # %bb.0:3125; LA64-NEXT:    slli.d $a0, $a0, 23126; LA64-NEXT:    beqz $a0, .LBB113_23127; LA64-NEXT:  # %bb.1:3128; LA64-NEXT:    ret3129; LA64-NEXT:  .LBB113_2:3130; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3131; LA64-NEXT:    jr $t83132  %2 = and i64 %0, 46116860184273879033133  %3 = icmp eq i64 %2, 03134  br i1 %3, label %4, label %53135 31364:3137  tail call void @bar()3138  br label %53139 31405:3141  ret void3142}3143 3144define void @bit_62_1_nz_branch_i64(i64 %0) {3145; LA32-LABEL: bit_62_1_nz_branch_i64:3146; LA32:       # %bb.0:3147; LA32-NEXT:    lu12i.w $a2, 2621433148; LA32-NEXT:    ori $a2, $a2, 40953149; LA32-NEXT:    and $a1, $a1, $a23150; LA32-NEXT:    or $a0, $a0, $a13151; LA32-NEXT:    beq $a0, $zero, .LBB114_23152; LA32-NEXT:  # %bb.1:3153; LA32-NEXT:    b bar3154; LA32-NEXT:  .LBB114_2:3155; LA32-NEXT:    ret3156;3157; LA64-LABEL: bit_62_1_nz_branch_i64:3158; LA64:       # %bb.0:3159; LA64-NEXT:    slli.d $a0, $a0, 23160; LA64-NEXT:    beqz $a0, .LBB114_23161; LA64-NEXT:  # %bb.1:3162; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3163; LA64-NEXT:    jr $t83164; LA64-NEXT:  .LBB114_2:3165; LA64-NEXT:    ret3166  %2 = and i64 %0, 46116860184273879033167  %3 = icmp ne i64 %2, 03168  br i1 %3, label %4, label %53169 31704:3171  tail call void @bar()3172  br label %53173 31745:3175  ret void3176}3177 3178define void @bit_63_1_z_branch_i64(i64 %0) {3179; LA32-LABEL: bit_63_1_z_branch_i64:3180; LA32:       # %bb.0:3181; LA32-NEXT:    lu12i.w $a2, 5242873182; LA32-NEXT:    ori $a2, $a2, 40953183; LA32-NEXT:    and $a1, $a1, $a23184; LA32-NEXT:    or $a0, $a0, $a13185; LA32-NEXT:    beq $a0, $zero, .LBB115_23186; LA32-NEXT:  # %bb.1:3187; LA32-NEXT:    ret3188; LA32-NEXT:  .LBB115_2:3189; LA32-NEXT:    b bar3190;3191; LA64-LABEL: bit_63_1_z_branch_i64:3192; LA64:       # %bb.0:3193; LA64-NEXT:    slli.d $a0, $a0, 13194; LA64-NEXT:    beqz $a0, .LBB115_23195; LA64-NEXT:  # %bb.1:3196; LA64-NEXT:    ret3197; LA64-NEXT:  .LBB115_2:3198; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3199; LA64-NEXT:    jr $t83200  %2 = and i64 %0, 92233720368547758073201  %3 = icmp eq i64 %2, 03202  br i1 %3, label %4, label %53203 32044:3205  tail call void @bar()3206  br label %53207 32085:3209  ret void3210}3211 3212define void @bit_63_1_nz_branch_i64(i64 %0) {3213; LA32-LABEL: bit_63_1_nz_branch_i64:3214; LA32:       # %bb.0:3215; LA32-NEXT:    lu12i.w $a2, 5242873216; LA32-NEXT:    ori $a2, $a2, 40953217; LA32-NEXT:    and $a1, $a1, $a23218; LA32-NEXT:    or $a0, $a0, $a13219; LA32-NEXT:    beq $a0, $zero, .LBB116_23220; LA32-NEXT:  # %bb.1:3221; LA32-NEXT:    b bar3222; LA32-NEXT:  .LBB116_2:3223; LA32-NEXT:    ret3224;3225; LA64-LABEL: bit_63_1_nz_branch_i64:3226; LA64:       # %bb.0:3227; LA64-NEXT:    slli.d $a0, $a0, 13228; LA64-NEXT:    beqz $a0, .LBB116_23229; LA64-NEXT:  # %bb.1:3230; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3231; LA64-NEXT:    jr $t83232; LA64-NEXT:  .LBB116_2:3233; LA64-NEXT:    ret3234  %2 = and i64 %0, 92233720368547758073235  %3 = icmp ne i64 %2, 03236  br i1 %3, label %4, label %53237 32384:3239  tail call void @bar()3240  br label %53241 32425:3243  ret void3244}3245 3246define void @bit_64_1_z_branch_i64(i64 %0) {3247; LA32-LABEL: bit_64_1_z_branch_i64:3248; LA32:       # %bb.0:3249; LA32-NEXT:    or $a0, $a0, $a13250; LA32-NEXT:    beq $a0, $zero, .LBB117_23251; LA32-NEXT:  # %bb.1:3252; LA32-NEXT:    ret3253; LA32-NEXT:  .LBB117_2:3254; LA32-NEXT:    b bar3255;3256; LA64-LABEL: bit_64_1_z_branch_i64:3257; LA64:       # %bb.0:3258; LA64-NEXT:    beqz $a0, .LBB117_23259; LA64-NEXT:  # %bb.1:3260; LA64-NEXT:    ret3261; LA64-NEXT:  .LBB117_2:3262; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3263; LA64-NEXT:    jr $t83264  %2 = and i64 %0, 184467440737095516153265  %3 = icmp eq i64 %2, 03266  br i1 %3, label %4, label %53267 32684:3269  tail call void @bar()3270  br label %53271 32725:3273  ret void3274}3275 3276define void @bit_64_1_nz_branch_i64(i64 %0) {3277; LA32-LABEL: bit_64_1_nz_branch_i64:3278; LA32:       # %bb.0:3279; LA32-NEXT:    or $a0, $a0, $a13280; LA32-NEXT:    beq $a0, $zero, .LBB118_23281; LA32-NEXT:  # %bb.1:3282; LA32-NEXT:    b bar3283; LA32-NEXT:  .LBB118_2:3284; LA32-NEXT:    ret3285;3286; LA64-LABEL: bit_64_1_nz_branch_i64:3287; LA64:       # %bb.0:3288; LA64-NEXT:    beqz $a0, .LBB118_23289; LA64-NEXT:  # %bb.1:3290; LA64-NEXT:    pcaddu18i $t8, %call36(bar)3291; LA64-NEXT:    jr $t83292; LA64-NEXT:  .LBB118_2:3293; LA64-NEXT:    ret3294  %2 = and i64 %0, 184467440737095516153295  %3 = icmp ne i64 %2, 03296  br i1 %3, label %4, label %53297 32984:3299  tail call void @bar()3300  br label %53301 33025:3303  ret void3304}3305