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