brintos

brintos / llvm-project-archived public Read only

0
0
Text · 85.3 KiB · 35d3852 Raw
3584 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \3; RUN:   | FileCheck %s -check-prefixes=CHECK,RV32,RV32I4; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \5; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64,RV64I6; RUN: llc -mtriple=riscv32 -mattr=+zbs -verify-machineinstrs < %s \7; RUN:   | FileCheck %s -check-prefixes=CHECK,ZBS,RV32,RV32ZBS8; RUN: llc -mtriple=riscv64 -mattr=+zbs -verify-machineinstrs < %s \9; RUN:   | FileCheck %s -check-prefixes=CHECK,ZBS,RV64,RV64ZBS10; RUN: llc -mtriple=riscv32 -mattr=+xtheadbs -verify-machineinstrs < %s \11; RUN:   | FileCheck %s -check-prefixes=CHECK,XTHEADBS,RV32,RV32XTHEADBS12; RUN: llc -mtriple=riscv64 -mattr=+xtheadbs -verify-machineinstrs < %s \13; RUN:   | FileCheck %s -check-prefixes=CHECK,XTHEADBS,RV64,RV64XTHEADBS14 15define signext i32 @bittest_7_i32(i32 signext %a) nounwind {16; CHECK-LABEL: bittest_7_i32:17; CHECK:       # %bb.0:18; CHECK-NEXT:    andi a0, a0, 12819; CHECK-NEXT:    seqz a0, a020; CHECK-NEXT:    ret21  %shr = lshr i32 %a, 722  %not = xor i32 %shr, -123  %and = and i32 %not, 124  ret i32 %and25}26 27define signext i32 @bittest_10_i32(i32 signext %a) nounwind {28; CHECK-LABEL: bittest_10_i32:29; CHECK:       # %bb.0:30; CHECK-NEXT:    andi a0, a0, 102431; CHECK-NEXT:    seqz a0, a032; CHECK-NEXT:    ret33  %shr = lshr i32 %a, 1034  %not = xor i32 %shr, -135  %and = and i32 %not, 136  ret i32 %and37}38 39define signext i32 @bittest_11_i32(i32 signext %a) nounwind {40; RV32I-LABEL: bittest_11_i32:41; RV32I:       # %bb.0:42; RV32I-NEXT:    not a0, a043; RV32I-NEXT:    slli a0, a0, 2044; RV32I-NEXT:    srli a0, a0, 3145; RV32I-NEXT:    ret46;47; RV64I-LABEL: bittest_11_i32:48; RV64I:       # %bb.0:49; RV64I-NEXT:    not a0, a050; RV64I-NEXT:    slli a0, a0, 5251; RV64I-NEXT:    srli a0, a0, 6352; RV64I-NEXT:    ret53;54; ZBS-LABEL: bittest_11_i32:55; ZBS:       # %bb.0:56; ZBS-NEXT:    not a0, a057; ZBS-NEXT:    bexti a0, a0, 1158; ZBS-NEXT:    ret59;60; XTHEADBS-LABEL: bittest_11_i32:61; XTHEADBS:       # %bb.0:62; XTHEADBS-NEXT:    not a0, a063; XTHEADBS-NEXT:    th.tst a0, a0, 1164; XTHEADBS-NEXT:    ret65  %shr = lshr i32 %a, 1166  %not = xor i32 %shr, -167  %and = and i32 %not, 168  ret i32 %and69}70 71define signext i32 @bittest_31_i32(i32 signext %a) nounwind {72; RV32-LABEL: bittest_31_i32:73; RV32:       # %bb.0:74; RV32-NEXT:    not a0, a075; RV32-NEXT:    srli a0, a0, 3176; RV32-NEXT:    ret77;78; RV64-LABEL: bittest_31_i32:79; RV64:       # %bb.0:80; RV64-NEXT:    not a0, a081; RV64-NEXT:    srliw a0, a0, 3182; RV64-NEXT:    ret83  %shr = lshr i32 %a, 3184  %not = xor i32 %shr, -185  %and = and i32 %not, 186  ret i32 %and87}88 89define i64 @bittest_7_i64(i64 %a) nounwind {90; RV32-LABEL: bittest_7_i64:91; RV32:       # %bb.0:92; RV32-NEXT:    andi a0, a0, 12893; RV32-NEXT:    seqz a0, a094; RV32-NEXT:    li a1, 095; RV32-NEXT:    ret96;97; RV64-LABEL: bittest_7_i64:98; RV64:       # %bb.0:99; RV64-NEXT:    andi a0, a0, 128100; RV64-NEXT:    seqz a0, a0101; RV64-NEXT:    ret102  %shr = lshr i64 %a, 7103  %not = xor i64 %shr, -1104  %and = and i64 %not, 1105  ret i64 %and106}107 108define i64 @bittest_10_i64(i64 %a) nounwind {109; RV32-LABEL: bittest_10_i64:110; RV32:       # %bb.0:111; RV32-NEXT:    andi a0, a0, 1024112; RV32-NEXT:    seqz a0, a0113; RV32-NEXT:    li a1, 0114; RV32-NEXT:    ret115;116; RV64-LABEL: bittest_10_i64:117; RV64:       # %bb.0:118; RV64-NEXT:    andi a0, a0, 1024119; RV64-NEXT:    seqz a0, a0120; RV64-NEXT:    ret121  %shr = lshr i64 %a, 10122  %not = xor i64 %shr, -1123  %and = and i64 %not, 1124  ret i64 %and125}126 127define i64 @bittest_11_i64(i64 %a) nounwind {128; RV32I-LABEL: bittest_11_i64:129; RV32I:       # %bb.0:130; RV32I-NEXT:    not a0, a0131; RV32I-NEXT:    slli a0, a0, 20132; RV32I-NEXT:    srli a0, a0, 31133; RV32I-NEXT:    li a1, 0134; RV32I-NEXT:    ret135;136; RV64I-LABEL: bittest_11_i64:137; RV64I:       # %bb.0:138; RV64I-NEXT:    not a0, a0139; RV64I-NEXT:    slli a0, a0, 52140; RV64I-NEXT:    srli a0, a0, 63141; RV64I-NEXT:    ret142;143; RV32ZBS-LABEL: bittest_11_i64:144; RV32ZBS:       # %bb.0:145; RV32ZBS-NEXT:    not a0, a0146; RV32ZBS-NEXT:    bexti a0, a0, 11147; RV32ZBS-NEXT:    li a1, 0148; RV32ZBS-NEXT:    ret149;150; RV64ZBS-LABEL: bittest_11_i64:151; RV64ZBS:       # %bb.0:152; RV64ZBS-NEXT:    not a0, a0153; RV64ZBS-NEXT:    bexti a0, a0, 11154; RV64ZBS-NEXT:    ret155;156; RV32XTHEADBS-LABEL: bittest_11_i64:157; RV32XTHEADBS:       # %bb.0:158; RV32XTHEADBS-NEXT:    not a0, a0159; RV32XTHEADBS-NEXT:    th.tst a0, a0, 11160; RV32XTHEADBS-NEXT:    li a1, 0161; RV32XTHEADBS-NEXT:    ret162;163; RV64XTHEADBS-LABEL: bittest_11_i64:164; RV64XTHEADBS:       # %bb.0:165; RV64XTHEADBS-NEXT:    not a0, a0166; RV64XTHEADBS-NEXT:    th.tst a0, a0, 11167; RV64XTHEADBS-NEXT:    ret168  %shr = lshr i64 %a, 11169  %not = xor i64 %shr, -1170  %and = and i64 %not, 1171  ret i64 %and172}173 174define i64 @bittest_31_i64(i64 %a) nounwind {175; RV32-LABEL: bittest_31_i64:176; RV32:       # %bb.0:177; RV32-NEXT:    not a0, a0178; RV32-NEXT:    srli a0, a0, 31179; RV32-NEXT:    li a1, 0180; RV32-NEXT:    ret181;182; RV64I-LABEL: bittest_31_i64:183; RV64I:       # %bb.0:184; RV64I-NEXT:    not a0, a0185; RV64I-NEXT:    srliw a0, a0, 31186; RV64I-NEXT:    ret187;188; RV64ZBS-LABEL: bittest_31_i64:189; RV64ZBS:       # %bb.0:190; RV64ZBS-NEXT:    sraiw a0, a0, 31191; RV64ZBS-NEXT:    seqz a0, a0192; RV64ZBS-NEXT:    ret193;194; RV64XTHEADBS-LABEL: bittest_31_i64:195; RV64XTHEADBS:       # %bb.0:196; RV64XTHEADBS-NEXT:    sraiw a0, a0, 31197; RV64XTHEADBS-NEXT:    seqz a0, a0198; RV64XTHEADBS-NEXT:    ret199  %shr = lshr i64 %a, 31200  %not = xor i64 %shr, -1201  %and = and i64 %not, 1202  ret i64 %and203}204 205define i64 @bittest_32_i64(i64 %a) nounwind {206; RV32-LABEL: bittest_32_i64:207; RV32:       # %bb.0:208; RV32-NEXT:    not a0, a1209; RV32-NEXT:    andi a0, a0, 1210; RV32-NEXT:    li a1, 0211; RV32-NEXT:    ret212;213; RV64I-LABEL: bittest_32_i64:214; RV64I:       # %bb.0:215; RV64I-NEXT:    not a0, a0216; RV64I-NEXT:    slli a0, a0, 31217; RV64I-NEXT:    srli a0, a0, 63218; RV64I-NEXT:    ret219;220; RV64ZBS-LABEL: bittest_32_i64:221; RV64ZBS:       # %bb.0:222; RV64ZBS-NEXT:    not a0, a0223; RV64ZBS-NEXT:    bexti a0, a0, 32224; RV64ZBS-NEXT:    ret225;226; RV64XTHEADBS-LABEL: bittest_32_i64:227; RV64XTHEADBS:       # %bb.0:228; RV64XTHEADBS-NEXT:    not a0, a0229; RV64XTHEADBS-NEXT:    th.tst a0, a0, 32230; RV64XTHEADBS-NEXT:    ret231  %shr = lshr i64 %a, 32232  %not = xor i64 %shr, -1233  %and = and i64 %not, 1234  ret i64 %and235}236 237define i64 @bittest_63_i64(i64 %a) nounwind {238; RV32-LABEL: bittest_63_i64:239; RV32:       # %bb.0:240; RV32-NEXT:    not a0, a1241; RV32-NEXT:    srli a0, a0, 31242; RV32-NEXT:    li a1, 0243; RV32-NEXT:    ret244;245; RV64-LABEL: bittest_63_i64:246; RV64:       # %bb.0:247; RV64-NEXT:    not a0, a0248; RV64-NEXT:    srli a0, a0, 63249; RV64-NEXT:    ret250  %shr = lshr i64 %a, 63251  %not = xor i64 %shr, -1252  %and = and i64 %not, 1253  ret i64 %and254}255 256; Make sure we use (andi (srl X, Y), 1) or bext.257define i1 @bittest_constant_by_var_shr_i32(i32 signext %b) nounwind {258; RV32I-LABEL: bittest_constant_by_var_shr_i32:259; RV32I:       # %bb.0:260; RV32I-NEXT:    lui a1, 301408261; RV32I-NEXT:    addi a1, a1, 722262; RV32I-NEXT:    srl a0, a1, a0263; RV32I-NEXT:    andi a0, a0, 1264; RV32I-NEXT:    ret265;266; RV64I-LABEL: bittest_constant_by_var_shr_i32:267; RV64I:       # %bb.0:268; RV64I-NEXT:    lui a1, 301408269; RV64I-NEXT:    addi a1, a1, 722270; RV64I-NEXT:    srlw a0, a1, a0271; RV64I-NEXT:    andi a0, a0, 1272; RV64I-NEXT:    ret273;274; ZBS-LABEL: bittest_constant_by_var_shr_i32:275; ZBS:       # %bb.0:276; ZBS-NEXT:    lui a1, 301408277; ZBS-NEXT:    addi a1, a1, 722278; ZBS-NEXT:    bext a0, a1, a0279; ZBS-NEXT:    ret280;281; RV32XTHEADBS-LABEL: bittest_constant_by_var_shr_i32:282; RV32XTHEADBS:       # %bb.0:283; RV32XTHEADBS-NEXT:    lui a1, 301408284; RV32XTHEADBS-NEXT:    addi a1, a1, 722285; RV32XTHEADBS-NEXT:    srl a0, a1, a0286; RV32XTHEADBS-NEXT:    andi a0, a0, 1287; RV32XTHEADBS-NEXT:    ret288;289; RV64XTHEADBS-LABEL: bittest_constant_by_var_shr_i32:290; RV64XTHEADBS:       # %bb.0:291; RV64XTHEADBS-NEXT:    lui a1, 301408292; RV64XTHEADBS-NEXT:    addi a1, a1, 722293; RV64XTHEADBS-NEXT:    srlw a0, a1, a0294; RV64XTHEADBS-NEXT:    andi a0, a0, 1295; RV64XTHEADBS-NEXT:    ret296  %shl = lshr i32 1234567890, %b297  %and = and i32 %shl, 1298  %cmp = icmp ne i32 %and, 0299  ret i1 %cmp300}301 302; Make sure we use (andi (srl X, Y), 1) or bext.303define i1 @bittest_constant_by_var_shl_i32(i32 signext %b) nounwind {304; RV32I-LABEL: bittest_constant_by_var_shl_i32:305; RV32I:       # %bb.0:306; RV32I-NEXT:    lui a1, 301408307; RV32I-NEXT:    addi a1, a1, 722308; RV32I-NEXT:    srl a0, a1, a0309; RV32I-NEXT:    andi a0, a0, 1310; RV32I-NEXT:    ret311;312; RV64I-LABEL: bittest_constant_by_var_shl_i32:313; RV64I:       # %bb.0:314; RV64I-NEXT:    lui a1, 301408315; RV64I-NEXT:    addi a1, a1, 722316; RV64I-NEXT:    srlw a0, a1, a0317; RV64I-NEXT:    andi a0, a0, 1318; RV64I-NEXT:    ret319;320; ZBS-LABEL: bittest_constant_by_var_shl_i32:321; ZBS:       # %bb.0:322; ZBS-NEXT:    lui a1, 301408323; ZBS-NEXT:    addi a1, a1, 722324; ZBS-NEXT:    bext a0, a1, a0325; ZBS-NEXT:    ret326;327; RV32XTHEADBS-LABEL: bittest_constant_by_var_shl_i32:328; RV32XTHEADBS:       # %bb.0:329; RV32XTHEADBS-NEXT:    lui a1, 301408330; RV32XTHEADBS-NEXT:    addi a1, a1, 722331; RV32XTHEADBS-NEXT:    srl a0, a1, a0332; RV32XTHEADBS-NEXT:    andi a0, a0, 1333; RV32XTHEADBS-NEXT:    ret334;335; RV64XTHEADBS-LABEL: bittest_constant_by_var_shl_i32:336; RV64XTHEADBS:       # %bb.0:337; RV64XTHEADBS-NEXT:    lui a1, 301408338; RV64XTHEADBS-NEXT:    addi a1, a1, 722339; RV64XTHEADBS-NEXT:    srlw a0, a1, a0340; RV64XTHEADBS-NEXT:    andi a0, a0, 1341; RV64XTHEADBS-NEXT:    ret342  %shl = shl i32 1, %b343  %and = and i32 %shl, 1234567890344  %cmp = icmp ne i32 %and, 0345  ret i1 %cmp346}347 348; Make sure we use (andi (srl X, Y), 1) or bext.349define i1 @bittest_constant_by_var_shr_i64(i64 %b) nounwind {350; RV32-LABEL: bittest_constant_by_var_shr_i64:351; RV32:       # %bb.0:352; RV32-NEXT:    lui a1, 301408353; RV32-NEXT:    addi a1, a1, 722354; RV32-NEXT:    srl a1, a1, a0355; RV32-NEXT:    addi a0, a0, -32356; RV32-NEXT:    srli a0, a0, 31357; RV32-NEXT:    and a0, a0, a1358; RV32-NEXT:    ret359;360; RV64I-LABEL: bittest_constant_by_var_shr_i64:361; RV64I:       # %bb.0:362; RV64I-NEXT:    lui a1, 301408363; RV64I-NEXT:    addi a1, a1, 722364; RV64I-NEXT:    srl a0, a1, a0365; RV64I-NEXT:    andi a0, a0, 1366; RV64I-NEXT:    ret367;368; RV64ZBS-LABEL: bittest_constant_by_var_shr_i64:369; RV64ZBS:       # %bb.0:370; RV64ZBS-NEXT:    lui a1, 301408371; RV64ZBS-NEXT:    addi a1, a1, 722372; RV64ZBS-NEXT:    bext a0, a1, a0373; RV64ZBS-NEXT:    ret374;375; RV64XTHEADBS-LABEL: bittest_constant_by_var_shr_i64:376; RV64XTHEADBS:       # %bb.0:377; RV64XTHEADBS-NEXT:    lui a1, 301408378; RV64XTHEADBS-NEXT:    addi a1, a1, 722379; RV64XTHEADBS-NEXT:    srl a0, a1, a0380; RV64XTHEADBS-NEXT:    andi a0, a0, 1381; RV64XTHEADBS-NEXT:    ret382  %shl = lshr i64 1234567890, %b383  %and = and i64 %shl, 1384  %cmp = icmp ne i64 %and, 0385  ret i1 %cmp386}387 388; Make sure we use (andi (srl X, Y), 1) or bext.389define i1 @bittest_constant_by_var_shl_i64(i64 %b) nounwind {390; RV32-LABEL: bittest_constant_by_var_shl_i64:391; RV32:       # %bb.0:392; RV32-NEXT:    lui a1, 301408393; RV32-NEXT:    addi a1, a1, 722394; RV32-NEXT:    srl a1, a1, a0395; RV32-NEXT:    addi a0, a0, -32396; RV32-NEXT:    srli a0, a0, 31397; RV32-NEXT:    and a0, a0, a1398; RV32-NEXT:    ret399;400; RV64I-LABEL: bittest_constant_by_var_shl_i64:401; RV64I:       # %bb.0:402; RV64I-NEXT:    lui a1, 301408403; RV64I-NEXT:    addi a1, a1, 722404; RV64I-NEXT:    srl a0, a1, a0405; RV64I-NEXT:    andi a0, a0, 1406; RV64I-NEXT:    ret407;408; RV64ZBS-LABEL: bittest_constant_by_var_shl_i64:409; RV64ZBS:       # %bb.0:410; RV64ZBS-NEXT:    lui a1, 301408411; RV64ZBS-NEXT:    addi a1, a1, 722412; RV64ZBS-NEXT:    bext a0, a1, a0413; RV64ZBS-NEXT:    ret414;415; RV64XTHEADBS-LABEL: bittest_constant_by_var_shl_i64:416; RV64XTHEADBS:       # %bb.0:417; RV64XTHEADBS-NEXT:    lui a1, 301408418; RV64XTHEADBS-NEXT:    addi a1, a1, 722419; RV64XTHEADBS-NEXT:    srl a0, a1, a0420; RV64XTHEADBS-NEXT:    andi a0, a0, 1421; RV64XTHEADBS-NEXT:    ret422  %shl = shl i64 1, %b423  %and = and i64 %shl, 1234567890424  %cmp = icmp ne i64 %and, 0425  ret i1 %cmp426}427 428; We want to use (andi (srl X, Y), 1) or bext before the beqz.429define void @bittest_switch(i32 signext %0) {430; RV32I-LABEL: bittest_switch:431; RV32I:       # %bb.0:432; RV32I-NEXT:    li a1, 31433; RV32I-NEXT:    bltu a1, a0, .LBB14_3434; RV32I-NEXT:  # %bb.1:435; RV32I-NEXT:    lui a1, 524291436; RV32I-NEXT:    addi a1, a1, 768437; RV32I-NEXT:    srl a0, a1, a0438; RV32I-NEXT:    andi a0, a0, 1439; RV32I-NEXT:    beqz a0, .LBB14_3440; RV32I-NEXT:  # %bb.2:441; RV32I-NEXT:    tail bar442; RV32I-NEXT:  .LBB14_3:443; RV32I-NEXT:    ret444;445; RV64I-LABEL: bittest_switch:446; RV64I:       # %bb.0:447; RV64I-NEXT:    li a1, 31448; RV64I-NEXT:    bltu a1, a0, .LBB14_3449; RV64I-NEXT:  # %bb.1:450; RV64I-NEXT:    lui a1, 2048451; RV64I-NEXT:    addi a1, a1, 51452; RV64I-NEXT:    slli a1, a1, 8453; RV64I-NEXT:    srl a0, a1, a0454; RV64I-NEXT:    andi a0, a0, 1455; RV64I-NEXT:    beqz a0, .LBB14_3456; RV64I-NEXT:  # %bb.2:457; RV64I-NEXT:    tail bar458; RV64I-NEXT:  .LBB14_3:459; RV64I-NEXT:    ret460;461; RV32ZBS-LABEL: bittest_switch:462; RV32ZBS:       # %bb.0:463; RV32ZBS-NEXT:    li a1, 31464; RV32ZBS-NEXT:    bltu a1, a0, .LBB14_3465; RV32ZBS-NEXT:  # %bb.1:466; RV32ZBS-NEXT:    lui a1, 524291467; RV32ZBS-NEXT:    addi a1, a1, 768468; RV32ZBS-NEXT:    bext a0, a1, a0469; RV32ZBS-NEXT:    beqz a0, .LBB14_3470; RV32ZBS-NEXT:  # %bb.2:471; RV32ZBS-NEXT:    tail bar472; RV32ZBS-NEXT:  .LBB14_3:473; RV32ZBS-NEXT:    ret474;475; RV64ZBS-LABEL: bittest_switch:476; RV64ZBS:       # %bb.0:477; RV64ZBS-NEXT:    li a1, 31478; RV64ZBS-NEXT:    bltu a1, a0, .LBB14_3479; RV64ZBS-NEXT:  # %bb.1:480; RV64ZBS-NEXT:    lui a1, 2048481; RV64ZBS-NEXT:    addi a1, a1, 51482; RV64ZBS-NEXT:    slli a1, a1, 8483; RV64ZBS-NEXT:    bext a0, a1, a0484; RV64ZBS-NEXT:    beqz a0, .LBB14_3485; RV64ZBS-NEXT:  # %bb.2:486; RV64ZBS-NEXT:    tail bar487; RV64ZBS-NEXT:  .LBB14_3:488; RV64ZBS-NEXT:    ret489;490; RV32XTHEADBS-LABEL: bittest_switch:491; RV32XTHEADBS:       # %bb.0:492; RV32XTHEADBS-NEXT:    li a1, 31493; RV32XTHEADBS-NEXT:    bltu a1, a0, .LBB14_3494; RV32XTHEADBS-NEXT:  # %bb.1:495; RV32XTHEADBS-NEXT:    lui a1, 524291496; RV32XTHEADBS-NEXT:    addi a1, a1, 768497; RV32XTHEADBS-NEXT:    srl a0, a1, a0498; RV32XTHEADBS-NEXT:    andi a0, a0, 1499; RV32XTHEADBS-NEXT:    beqz a0, .LBB14_3500; RV32XTHEADBS-NEXT:  # %bb.2:501; RV32XTHEADBS-NEXT:    tail bar502; RV32XTHEADBS-NEXT:  .LBB14_3:503; RV32XTHEADBS-NEXT:    ret504;505; RV64XTHEADBS-LABEL: bittest_switch:506; RV64XTHEADBS:       # %bb.0:507; RV64XTHEADBS-NEXT:    li a1, 31508; RV64XTHEADBS-NEXT:    bltu a1, a0, .LBB14_3509; RV64XTHEADBS-NEXT:  # %bb.1:510; RV64XTHEADBS-NEXT:    lui a1, 2048511; RV64XTHEADBS-NEXT:    addi a1, a1, 51512; RV64XTHEADBS-NEXT:    slli a1, a1, 8513; RV64XTHEADBS-NEXT:    srl a0, a1, a0514; RV64XTHEADBS-NEXT:    andi a0, a0, 1515; RV64XTHEADBS-NEXT:    beqz a0, .LBB14_3516; RV64XTHEADBS-NEXT:  # %bb.2:517; RV64XTHEADBS-NEXT:    tail bar518; RV64XTHEADBS-NEXT:  .LBB14_3:519; RV64XTHEADBS-NEXT:    ret520  switch i32 %0, label %3 [521    i32 8, label %2522    i32 9, label %2523    i32 12, label %2524    i32 13, label %2525    i32 31, label %2526  ]527 5282:529  tail call void @bar()530  br label %3531 5323:533  ret void534}535 536declare void @bar()537 538define signext i32 @bit_10_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {539; CHECK-LABEL: bit_10_z_select_i32:540; CHECK:       # %bb.0:541; CHECK-NEXT:    andi a3, a0, 1024542; CHECK-NEXT:    mv a0, a1543; CHECK-NEXT:    beqz a3, .LBB15_2544; CHECK-NEXT:  # %bb.1:545; CHECK-NEXT:    mv a0, a2546; CHECK-NEXT:  .LBB15_2:547; CHECK-NEXT:    ret548  %1 = and i32 %a, 1024549  %2 = icmp eq i32 %1, 0550  %3 = select i1 %2, i32 %b, i32 %c551  ret i32 %3552}553 554define signext i32 @bit_10_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {555; RV32-LABEL: bit_10_nz_select_i32:556; RV32:       # %bb.0:557; RV32-NEXT:    slli a3, a0, 21558; RV32-NEXT:    mv a0, a1559; RV32-NEXT:    bltz a3, .LBB16_2560; RV32-NEXT:  # %bb.1:561; RV32-NEXT:    mv a0, a2562; RV32-NEXT:  .LBB16_2:563; RV32-NEXT:    ret564;565; RV64-LABEL: bit_10_nz_select_i32:566; RV64:       # %bb.0:567; RV64-NEXT:    slli a3, a0, 53568; RV64-NEXT:    mv a0, a1569; RV64-NEXT:    bltz a3, .LBB16_2570; RV64-NEXT:  # %bb.1:571; RV64-NEXT:    mv a0, a2572; RV64-NEXT:  .LBB16_2:573; RV64-NEXT:    ret574  %1 = and i32 %a, 1024575  %2 = icmp ne i32 %1, 0576  %3 = select i1 %2, i32 %b, i32 %c577  ret i32 %3578}579 580define signext i32 @bit_11_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {581; RV32-LABEL: bit_11_z_select_i32:582; RV32:       # %bb.0:583; RV32-NEXT:    slli a3, a0, 20584; RV32-NEXT:    mv a0, a1585; RV32-NEXT:    bgez a3, .LBB17_2586; RV32-NEXT:  # %bb.1:587; RV32-NEXT:    mv a0, a2588; RV32-NEXT:  .LBB17_2:589; RV32-NEXT:    ret590;591; RV64-LABEL: bit_11_z_select_i32:592; RV64:       # %bb.0:593; RV64-NEXT:    slli a3, a0, 52594; RV64-NEXT:    mv a0, a1595; RV64-NEXT:    bgez a3, .LBB17_2596; RV64-NEXT:  # %bb.1:597; RV64-NEXT:    mv a0, a2598; RV64-NEXT:  .LBB17_2:599; RV64-NEXT:    ret600  %1 = and i32 %a, 2048601  %2 = icmp eq i32 %1, 0602  %3 = select i1 %2, i32 %b, i32 %c603  ret i32 %3604}605 606define signext i32 @bit_11_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {607; RV32-LABEL: bit_11_nz_select_i32:608; RV32:       # %bb.0:609; RV32-NEXT:    slli a3, a0, 20610; RV32-NEXT:    mv a0, a1611; RV32-NEXT:    bltz a3, .LBB18_2612; RV32-NEXT:  # %bb.1:613; RV32-NEXT:    mv a0, a2614; RV32-NEXT:  .LBB18_2:615; RV32-NEXT:    ret616;617; RV64-LABEL: bit_11_nz_select_i32:618; RV64:       # %bb.0:619; RV64-NEXT:    slli a3, a0, 52620; RV64-NEXT:    mv a0, a1621; RV64-NEXT:    bltz a3, .LBB18_2622; RV64-NEXT:  # %bb.1:623; RV64-NEXT:    mv a0, a2624; RV64-NEXT:  .LBB18_2:625; RV64-NEXT:    ret626  %1 = and i32 %a, 2048627  %2 = icmp ne i32 %1, 0628  %3 = select i1 %2, i32 %b, i32 %c629  ret i32 %3630}631 632define signext i32 @bit_20_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {633; RV32-LABEL: bit_20_z_select_i32:634; RV32:       # %bb.0:635; RV32-NEXT:    slli a3, a0, 11636; RV32-NEXT:    mv a0, a1637; RV32-NEXT:    bgez a3, .LBB19_2638; RV32-NEXT:  # %bb.1:639; RV32-NEXT:    mv a0, a2640; RV32-NEXT:  .LBB19_2:641; RV32-NEXT:    ret642;643; RV64-LABEL: bit_20_z_select_i32:644; RV64:       # %bb.0:645; RV64-NEXT:    slli a3, a0, 43646; RV64-NEXT:    mv a0, a1647; RV64-NEXT:    bgez a3, .LBB19_2648; RV64-NEXT:  # %bb.1:649; RV64-NEXT:    mv a0, a2650; RV64-NEXT:  .LBB19_2:651; RV64-NEXT:    ret652  %1 = and i32 %a, 1048576653  %2 = icmp eq i32 %1, 0654  %3 = select i1 %2, i32 %b, i32 %c655  ret i32 %3656}657 658define signext i32 @bit_20_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {659; RV32-LABEL: bit_20_nz_select_i32:660; RV32:       # %bb.0:661; RV32-NEXT:    slli a3, a0, 11662; RV32-NEXT:    mv a0, a1663; RV32-NEXT:    bltz a3, .LBB20_2664; RV32-NEXT:  # %bb.1:665; RV32-NEXT:    mv a0, a2666; RV32-NEXT:  .LBB20_2:667; RV32-NEXT:    ret668;669; RV64-LABEL: bit_20_nz_select_i32:670; RV64:       # %bb.0:671; RV64-NEXT:    slli a3, a0, 43672; RV64-NEXT:    mv a0, a1673; RV64-NEXT:    bltz a3, .LBB20_2674; RV64-NEXT:  # %bb.1:675; RV64-NEXT:    mv a0, a2676; RV64-NEXT:  .LBB20_2:677; RV64-NEXT:    ret678  %1 = and i32 %a, 1048576679  %2 = icmp ne i32 %1, 0680  %3 = select i1 %2, i32 %b, i32 %c681  ret i32 %3682}683 684define signext i32 @bit_31_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {685; RV32-LABEL: bit_31_z_select_i32:686; RV32:       # %bb.0:687; RV32-NEXT:    bgez a0, .LBB21_2688; RV32-NEXT:  # %bb.1:689; RV32-NEXT:    mv a1, a2690; RV32-NEXT:  .LBB21_2:691; RV32-NEXT:    mv a0, a1692; RV32-NEXT:    ret693;694; RV64-LABEL: bit_31_z_select_i32:695; RV64:       # %bb.0:696; RV64-NEXT:    lui a3, 524288697; RV64-NEXT:    and a3, a0, a3698; RV64-NEXT:    mv a0, a1699; RV64-NEXT:    beqz a3, .LBB21_2700; RV64-NEXT:  # %bb.1:701; RV64-NEXT:    mv a0, a2702; RV64-NEXT:  .LBB21_2:703; RV64-NEXT:    ret704  %1 = and i32 %a, 2147483648705  %2 = icmp eq i32 %1, 0706  %3 = select i1 %2, i32 %b, i32 %c707  ret i32 %3708}709 710define signext i32 @bit_31_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {711; RV32-LABEL: bit_31_nz_select_i32:712; RV32:       # %bb.0:713; RV32-NEXT:    srli a3, a0, 31714; RV32-NEXT:    mv a0, a1715; RV32-NEXT:    bnez a3, .LBB22_2716; RV32-NEXT:  # %bb.1:717; RV32-NEXT:    mv a0, a2718; RV32-NEXT:  .LBB22_2:719; RV32-NEXT:    ret720;721; RV64-LABEL: bit_31_nz_select_i32:722; RV64:       # %bb.0:723; RV64-NEXT:    lui a3, 524288724; RV64-NEXT:    and a3, a0, a3725; RV64-NEXT:    mv a0, a1726; RV64-NEXT:    bnez a3, .LBB22_2727; RV64-NEXT:  # %bb.1:728; RV64-NEXT:    mv a0, a2729; RV64-NEXT:  .LBB22_2:730; RV64-NEXT:    ret731  %1 = and i32 %a, 2147483648732  %2 = icmp ne i32 %1, 0733  %3 = select i1 %2, i32 %b, i32 %c734  ret i32 %3735}736 737define i64 @bit_10_z_select_i64(i64 %a, i64 %b, i64 %c) {738; RV32-LABEL: bit_10_z_select_i64:739; RV32:       # %bb.0:740; RV32-NEXT:    mv a1, a3741; RV32-NEXT:    andi a3, a0, 1024742; RV32-NEXT:    mv a0, a2743; RV32-NEXT:    beqz a3, .LBB23_2744; RV32-NEXT:  # %bb.1:745; RV32-NEXT:    mv a0, a4746; RV32-NEXT:    mv a1, a5747; RV32-NEXT:  .LBB23_2:748; RV32-NEXT:    ret749;750; RV64-LABEL: bit_10_z_select_i64:751; RV64:       # %bb.0:752; RV64-NEXT:    andi a3, a0, 1024753; RV64-NEXT:    mv a0, a1754; RV64-NEXT:    beqz a3, .LBB23_2755; RV64-NEXT:  # %bb.1:756; RV64-NEXT:    mv a0, a2757; RV64-NEXT:  .LBB23_2:758; RV64-NEXT:    ret759  %1 = and i64 %a, 1024760  %2 = icmp eq i64 %1, 0761  %3 = select i1 %2, i64 %b, i64 %c762  ret i64 %3763}764 765define i64 @bit_10_nz_select_i64(i64 %a, i64 %b, i64 %c) {766; RV32I-LABEL: bit_10_nz_select_i64:767; RV32I:       # %bb.0:768; RV32I-NEXT:    mv a1, a3769; RV32I-NEXT:    slli a0, a0, 21770; RV32I-NEXT:    srli a3, a0, 31771; RV32I-NEXT:    mv a0, a2772; RV32I-NEXT:    bnez a3, .LBB24_2773; RV32I-NEXT:  # %bb.1:774; RV32I-NEXT:    mv a0, a4775; RV32I-NEXT:    mv a1, a5776; RV32I-NEXT:  .LBB24_2:777; RV32I-NEXT:    ret778;779; RV64-LABEL: bit_10_nz_select_i64:780; RV64:       # %bb.0:781; RV64-NEXT:    slli a3, a0, 53782; RV64-NEXT:    mv a0, a1783; RV64-NEXT:    bltz a3, .LBB24_2784; RV64-NEXT:  # %bb.1:785; RV64-NEXT:    mv a0, a2786; RV64-NEXT:  .LBB24_2:787; RV64-NEXT:    ret788;789; RV32ZBS-LABEL: bit_10_nz_select_i64:790; RV32ZBS:       # %bb.0:791; RV32ZBS-NEXT:    mv a1, a3792; RV32ZBS-NEXT:    bexti a3, a0, 10793; RV32ZBS-NEXT:    mv a0, a2794; RV32ZBS-NEXT:    bnez a3, .LBB24_2795; RV32ZBS-NEXT:  # %bb.1:796; RV32ZBS-NEXT:    mv a0, a4797; RV32ZBS-NEXT:    mv a1, a5798; RV32ZBS-NEXT:  .LBB24_2:799; RV32ZBS-NEXT:    ret800;801; RV32XTHEADBS-LABEL: bit_10_nz_select_i64:802; RV32XTHEADBS:       # %bb.0:803; RV32XTHEADBS-NEXT:    mv a1, a3804; RV32XTHEADBS-NEXT:    th.tst a3, a0, 10805; RV32XTHEADBS-NEXT:    mv a0, a2806; RV32XTHEADBS-NEXT:    bnez a3, .LBB24_2807; RV32XTHEADBS-NEXT:  # %bb.1:808; RV32XTHEADBS-NEXT:    mv a0, a4809; RV32XTHEADBS-NEXT:    mv a1, a5810; RV32XTHEADBS-NEXT:  .LBB24_2:811; RV32XTHEADBS-NEXT:    ret812  %1 = and i64 %a, 1024813  %2 = icmp ne i64 %1, 0814  %3 = select i1 %2, i64 %b, i64 %c815  ret i64 %3816}817 818define i64 @bit_11_z_select_i64(i64 %a, i64 %b, i64 %c) {819; RV32-LABEL: bit_11_z_select_i64:820; RV32:       # %bb.0:821; RV32-NEXT:    mv a1, a3822; RV32-NEXT:    slli a3, a0, 20823; RV32-NEXT:    mv a0, a2824; RV32-NEXT:    bgez a3, .LBB25_2825; RV32-NEXT:  # %bb.1:826; RV32-NEXT:    mv a0, a4827; RV32-NEXT:    mv a1, a5828; RV32-NEXT:  .LBB25_2:829; RV32-NEXT:    ret830;831; RV64-LABEL: bit_11_z_select_i64:832; RV64:       # %bb.0:833; RV64-NEXT:    slli a3, a0, 52834; RV64-NEXT:    mv a0, a1835; RV64-NEXT:    bgez a3, .LBB25_2836; RV64-NEXT:  # %bb.1:837; RV64-NEXT:    mv a0, a2838; RV64-NEXT:  .LBB25_2:839; RV64-NEXT:    ret840  %1 = and i64 %a, 2048841  %2 = icmp eq i64 %1, 0842  %3 = select i1 %2, i64 %b, i64 %c843  ret i64 %3844}845 846define i64 @bit_11_nz_select_i64(i64 %a, i64 %b, i64 %c) {847; RV32I-LABEL: bit_11_nz_select_i64:848; RV32I:       # %bb.0:849; RV32I-NEXT:    mv a1, a3850; RV32I-NEXT:    slli a0, a0, 20851; RV32I-NEXT:    srli a3, a0, 31852; RV32I-NEXT:    mv a0, a2853; RV32I-NEXT:    bnez a3, .LBB26_2854; RV32I-NEXT:  # %bb.1:855; RV32I-NEXT:    mv a0, a4856; RV32I-NEXT:    mv a1, a5857; RV32I-NEXT:  .LBB26_2:858; RV32I-NEXT:    ret859;860; RV64-LABEL: bit_11_nz_select_i64:861; RV64:       # %bb.0:862; RV64-NEXT:    slli a3, a0, 52863; RV64-NEXT:    mv a0, a1864; RV64-NEXT:    bltz a3, .LBB26_2865; RV64-NEXT:  # %bb.1:866; RV64-NEXT:    mv a0, a2867; RV64-NEXT:  .LBB26_2:868; RV64-NEXT:    ret869;870; RV32ZBS-LABEL: bit_11_nz_select_i64:871; RV32ZBS:       # %bb.0:872; RV32ZBS-NEXT:    mv a1, a3873; RV32ZBS-NEXT:    bexti a3, a0, 11874; RV32ZBS-NEXT:    mv a0, a2875; RV32ZBS-NEXT:    bnez a3, .LBB26_2876; RV32ZBS-NEXT:  # %bb.1:877; RV32ZBS-NEXT:    mv a0, a4878; RV32ZBS-NEXT:    mv a1, a5879; RV32ZBS-NEXT:  .LBB26_2:880; RV32ZBS-NEXT:    ret881;882; RV32XTHEADBS-LABEL: bit_11_nz_select_i64:883; RV32XTHEADBS:       # %bb.0:884; RV32XTHEADBS-NEXT:    mv a1, a3885; RV32XTHEADBS-NEXT:    th.tst a3, a0, 11886; RV32XTHEADBS-NEXT:    mv a0, a2887; RV32XTHEADBS-NEXT:    bnez a3, .LBB26_2888; RV32XTHEADBS-NEXT:  # %bb.1:889; RV32XTHEADBS-NEXT:    mv a0, a4890; RV32XTHEADBS-NEXT:    mv a1, a5891; RV32XTHEADBS-NEXT:  .LBB26_2:892; RV32XTHEADBS-NEXT:    ret893  %1 = and i64 %a, 2048894  %2 = icmp ne i64 %1, 0895  %3 = select i1 %2, i64 %b, i64 %c896  ret i64 %3897}898 899define i64 @bit_20_z_select_i64(i64 %a, i64 %b, i64 %c) {900; RV32-LABEL: bit_20_z_select_i64:901; RV32:       # %bb.0:902; RV32-NEXT:    mv a1, a3903; RV32-NEXT:    slli a3, a0, 11904; RV32-NEXT:    mv a0, a2905; RV32-NEXT:    bgez a3, .LBB27_2906; RV32-NEXT:  # %bb.1:907; RV32-NEXT:    mv a0, a4908; RV32-NEXT:    mv a1, a5909; RV32-NEXT:  .LBB27_2:910; RV32-NEXT:    ret911;912; RV64-LABEL: bit_20_z_select_i64:913; RV64:       # %bb.0:914; RV64-NEXT:    slli a3, a0, 43915; RV64-NEXT:    mv a0, a1916; RV64-NEXT:    bgez a3, .LBB27_2917; RV64-NEXT:  # %bb.1:918; RV64-NEXT:    mv a0, a2919; RV64-NEXT:  .LBB27_2:920; RV64-NEXT:    ret921  %1 = and i64 %a, 1048576922  %2 = icmp eq i64 %1, 0923  %3 = select i1 %2, i64 %b, i64 %c924  ret i64 %3925}926 927define i64 @bit_20_nz_select_i64(i64 %a, i64 %b, i64 %c) {928; RV32I-LABEL: bit_20_nz_select_i64:929; RV32I:       # %bb.0:930; RV32I-NEXT:    mv a1, a3931; RV32I-NEXT:    slli a0, a0, 11932; RV32I-NEXT:    srli a3, a0, 31933; RV32I-NEXT:    mv a0, a2934; RV32I-NEXT:    bnez a3, .LBB28_2935; RV32I-NEXT:  # %bb.1:936; RV32I-NEXT:    mv a0, a4937; RV32I-NEXT:    mv a1, a5938; RV32I-NEXT:  .LBB28_2:939; RV32I-NEXT:    ret940;941; RV64-LABEL: bit_20_nz_select_i64:942; RV64:       # %bb.0:943; RV64-NEXT:    slli a3, a0, 43944; RV64-NEXT:    mv a0, a1945; RV64-NEXT:    bltz a3, .LBB28_2946; RV64-NEXT:  # %bb.1:947; RV64-NEXT:    mv a0, a2948; RV64-NEXT:  .LBB28_2:949; RV64-NEXT:    ret950;951; RV32ZBS-LABEL: bit_20_nz_select_i64:952; RV32ZBS:       # %bb.0:953; RV32ZBS-NEXT:    mv a1, a3954; RV32ZBS-NEXT:    bexti a3, a0, 20955; RV32ZBS-NEXT:    mv a0, a2956; RV32ZBS-NEXT:    bnez a3, .LBB28_2957; RV32ZBS-NEXT:  # %bb.1:958; RV32ZBS-NEXT:    mv a0, a4959; RV32ZBS-NEXT:    mv a1, a5960; RV32ZBS-NEXT:  .LBB28_2:961; RV32ZBS-NEXT:    ret962;963; RV32XTHEADBS-LABEL: bit_20_nz_select_i64:964; RV32XTHEADBS:       # %bb.0:965; RV32XTHEADBS-NEXT:    mv a1, a3966; RV32XTHEADBS-NEXT:    th.tst a3, a0, 20967; RV32XTHEADBS-NEXT:    mv a0, a2968; RV32XTHEADBS-NEXT:    bnez a3, .LBB28_2969; RV32XTHEADBS-NEXT:  # %bb.1:970; RV32XTHEADBS-NEXT:    mv a0, a4971; RV32XTHEADBS-NEXT:    mv a1, a5972; RV32XTHEADBS-NEXT:  .LBB28_2:973; RV32XTHEADBS-NEXT:    ret974  %1 = and i64 %a, 1048576975  %2 = icmp ne i64 %1, 0976  %3 = select i1 %2, i64 %b, i64 %c977  ret i64 %3978}979 980define i64 @bit_31_z_select_i64(i64 %a, i64 %b, i64 %c) {981; RV32-LABEL: bit_31_z_select_i64:982; RV32:       # %bb.0:983; RV32-NEXT:    mv a1, a3984; RV32-NEXT:    bgez a0, .LBB29_2985; RV32-NEXT:  # %bb.1:986; RV32-NEXT:    mv a2, a4987; RV32-NEXT:    mv a1, a5988; RV32-NEXT:  .LBB29_2:989; RV32-NEXT:    mv a0, a2990; RV32-NEXT:    ret991;992; RV64-LABEL: bit_31_z_select_i64:993; RV64:       # %bb.0:994; RV64-NEXT:    slli a3, a0, 32995; RV64-NEXT:    mv a0, a1996; RV64-NEXT:    bgez a3, .LBB29_2997; RV64-NEXT:  # %bb.1:998; RV64-NEXT:    mv a0, a2999; RV64-NEXT:  .LBB29_2:1000; RV64-NEXT:    ret1001  %1 = and i64 %a, 21474836481002  %2 = icmp eq i64 %1, 01003  %3 = select i1 %2, i64 %b, i64 %c1004  ret i64 %31005}1006 1007define i64 @bit_31_nz_select_i64(i64 %a, i64 %b, i64 %c) {1008; RV32-LABEL: bit_31_nz_select_i64:1009; RV32:       # %bb.0:1010; RV32-NEXT:    mv a1, a31011; RV32-NEXT:    srli a3, a0, 311012; RV32-NEXT:    mv a0, a21013; RV32-NEXT:    bnez a3, .LBB30_21014; RV32-NEXT:  # %bb.1:1015; RV32-NEXT:    mv a0, a41016; RV32-NEXT:    mv a1, a51017; RV32-NEXT:  .LBB30_2:1018; RV32-NEXT:    ret1019;1020; RV64-LABEL: bit_31_nz_select_i64:1021; RV64:       # %bb.0:1022; RV64-NEXT:    slli a3, a0, 321023; RV64-NEXT:    mv a0, a11024; RV64-NEXT:    bltz a3, .LBB30_21025; RV64-NEXT:  # %bb.1:1026; RV64-NEXT:    mv a0, a21027; RV64-NEXT:  .LBB30_2:1028; RV64-NEXT:    ret1029  %1 = and i64 %a, 21474836481030  %2 = icmp ne i64 %1, 01031  %3 = select i1 %2, i64 %b, i64 %c1032  ret i64 %31033}1034 1035define i64 @bit_32_z_select_i64(i64 %a, i64 %b, i64 %c) {1036; RV32-LABEL: bit_32_z_select_i64:1037; RV32:       # %bb.0:1038; RV32-NEXT:    andi a1, a1, 11039; RV32-NEXT:    mv a0, a21040; RV32-NEXT:    beqz a1, .LBB31_21041; RV32-NEXT:  # %bb.1:1042; RV32-NEXT:    mv a0, a41043; RV32-NEXT:    mv a3, a51044; RV32-NEXT:  .LBB31_2:1045; RV32-NEXT:    mv a1, a31046; RV32-NEXT:    ret1047;1048; RV64-LABEL: bit_32_z_select_i64:1049; RV64:       # %bb.0:1050; RV64-NEXT:    slli a3, a0, 311051; RV64-NEXT:    mv a0, a11052; RV64-NEXT:    bgez a3, .LBB31_21053; RV64-NEXT:  # %bb.1:1054; RV64-NEXT:    mv a0, a21055; RV64-NEXT:  .LBB31_2:1056; RV64-NEXT:    ret1057  %1 = and i64 %a, 42949672961058  %2 = icmp eq i64 %1, 01059  %3 = select i1 %2, i64 %b, i64 %c1060  ret i64 %31061}1062 1063define i64 @bit_32_nz_select_i64(i64 %a, i64 %b, i64 %c) {1064; RV32-LABEL: bit_32_nz_select_i64:1065; RV32:       # %bb.0:1066; RV32-NEXT:    andi a1, a1, 11067; RV32-NEXT:    mv a0, a21068; RV32-NEXT:    bnez a1, .LBB32_21069; RV32-NEXT:  # %bb.1:1070; RV32-NEXT:    mv a0, a41071; RV32-NEXT:    mv a3, a51072; RV32-NEXT:  .LBB32_2:1073; RV32-NEXT:    mv a1, a31074; RV32-NEXT:    ret1075;1076; RV64-LABEL: bit_32_nz_select_i64:1077; RV64:       # %bb.0:1078; RV64-NEXT:    slli a3, a0, 311079; RV64-NEXT:    mv a0, a11080; RV64-NEXT:    bltz a3, .LBB32_21081; RV64-NEXT:  # %bb.1:1082; RV64-NEXT:    mv a0, a21083; RV64-NEXT:  .LBB32_2:1084; RV64-NEXT:    ret1085  %1 = and i64 %a, 42949672961086  %2 = icmp ne i64 %1, 01087  %3 = select i1 %2, i64 %b, i64 %c1088  ret i64 %31089}1090 1091define i64 @bit_55_z_select_i64(i64 %a, i64 %b, i64 %c) {1092; RV32-LABEL: bit_55_z_select_i64:1093; RV32:       # %bb.0:1094; RV32-NEXT:    slli a1, a1, 81095; RV32-NEXT:    mv a0, a21096; RV32-NEXT:    bgez a1, .LBB33_21097; RV32-NEXT:  # %bb.1:1098; RV32-NEXT:    mv a0, a41099; RV32-NEXT:    mv a3, a51100; RV32-NEXT:  .LBB33_2:1101; RV32-NEXT:    mv a1, a31102; RV32-NEXT:    ret1103;1104; RV64-LABEL: bit_55_z_select_i64:1105; RV64:       # %bb.0:1106; RV64-NEXT:    slli a3, a0, 81107; RV64-NEXT:    mv a0, a11108; RV64-NEXT:    bgez a3, .LBB33_21109; RV64-NEXT:  # %bb.1:1110; RV64-NEXT:    mv a0, a21111; RV64-NEXT:  .LBB33_2:1112; RV64-NEXT:    ret1113  %1 = and i64 %a, 360287970189639681114  %2 = icmp eq i64 %1, 01115  %3 = select i1 %2, i64 %b, i64 %c1116  ret i64 %31117}1118 1119define i64 @bit_55_nz_select_i64(i64 %a, i64 %b, i64 %c) {1120; RV32I-LABEL: bit_55_nz_select_i64:1121; RV32I:       # %bb.0:1122; RV32I-NEXT:    slli a1, a1, 81123; RV32I-NEXT:    srli a1, a1, 311124; RV32I-NEXT:    mv a0, a21125; RV32I-NEXT:    bnez a1, .LBB34_21126; RV32I-NEXT:  # %bb.1:1127; RV32I-NEXT:    mv a0, a41128; RV32I-NEXT:    mv a3, a51129; RV32I-NEXT:  .LBB34_2:1130; RV32I-NEXT:    mv a1, a31131; RV32I-NEXT:    ret1132;1133; RV64-LABEL: bit_55_nz_select_i64:1134; RV64:       # %bb.0:1135; RV64-NEXT:    slli a3, a0, 81136; RV64-NEXT:    mv a0, a11137; RV64-NEXT:    bltz a3, .LBB34_21138; RV64-NEXT:  # %bb.1:1139; RV64-NEXT:    mv a0, a21140; RV64-NEXT:  .LBB34_2:1141; RV64-NEXT:    ret1142;1143; RV32ZBS-LABEL: bit_55_nz_select_i64:1144; RV32ZBS:       # %bb.0:1145; RV32ZBS-NEXT:    bexti a1, a1, 231146; RV32ZBS-NEXT:    mv a0, a21147; RV32ZBS-NEXT:    bnez a1, .LBB34_21148; RV32ZBS-NEXT:  # %bb.1:1149; RV32ZBS-NEXT:    mv a0, a41150; RV32ZBS-NEXT:    mv a3, a51151; RV32ZBS-NEXT:  .LBB34_2:1152; RV32ZBS-NEXT:    mv a1, a31153; RV32ZBS-NEXT:    ret1154;1155; RV32XTHEADBS-LABEL: bit_55_nz_select_i64:1156; RV32XTHEADBS:       # %bb.0:1157; RV32XTHEADBS-NEXT:    th.tst a1, a1, 231158; RV32XTHEADBS-NEXT:    mv a0, a21159; RV32XTHEADBS-NEXT:    bnez a1, .LBB34_21160; RV32XTHEADBS-NEXT:  # %bb.1:1161; RV32XTHEADBS-NEXT:    mv a0, a41162; RV32XTHEADBS-NEXT:    mv a3, a51163; RV32XTHEADBS-NEXT:  .LBB34_2:1164; RV32XTHEADBS-NEXT:    mv a1, a31165; RV32XTHEADBS-NEXT:    ret1166  %1 = and i64 %a, 360287970189639681167  %2 = icmp ne i64 %1, 01168  %3 = select i1 %2, i64 %b, i64 %c1169  ret i64 %31170}1171 1172define i64 @bit_63_z_select_i64(i64 %a, i64 %b, i64 %c) {1173; RV32-LABEL: bit_63_z_select_i64:1174; RV32:       # %bb.0:1175; RV32-NEXT:    mv a0, a21176; RV32-NEXT:    bgez a1, .LBB35_21177; RV32-NEXT:  # %bb.1:1178; RV32-NEXT:    mv a0, a41179; RV32-NEXT:    mv a3, a51180; RV32-NEXT:  .LBB35_2:1181; RV32-NEXT:    mv a1, a31182; RV32-NEXT:    ret1183;1184; RV64-LABEL: bit_63_z_select_i64:1185; RV64:       # %bb.0:1186; RV64-NEXT:    bgez a0, .LBB35_21187; RV64-NEXT:  # %bb.1:1188; RV64-NEXT:    mv a1, a21189; RV64-NEXT:  .LBB35_2:1190; RV64-NEXT:    mv a0, a11191; RV64-NEXT:    ret1192  %1 = and i64 %a, 92233720368547758081193  %2 = icmp eq i64 %1, 01194  %3 = select i1 %2, i64 %b, i64 %c1195  ret i64 %31196}1197 1198define i64 @bit_63_nz_select_i64(i64 %a, i64 %b, i64 %c) {1199; RV32-LABEL: bit_63_nz_select_i64:1200; RV32:       # %bb.0:1201; RV32-NEXT:    srli a1, a1, 311202; RV32-NEXT:    mv a0, a21203; RV32-NEXT:    bnez a1, .LBB36_21204; RV32-NEXT:  # %bb.1:1205; RV32-NEXT:    mv a0, a41206; RV32-NEXT:    mv a3, a51207; RV32-NEXT:  .LBB36_2:1208; RV32-NEXT:    mv a1, a31209; RV32-NEXT:    ret1210;1211; RV64-LABEL: bit_63_nz_select_i64:1212; RV64:       # %bb.0:1213; RV64-NEXT:    srli a3, a0, 631214; RV64-NEXT:    mv a0, a11215; RV64-NEXT:    bnez a3, .LBB36_21216; RV64-NEXT:  # %bb.1:1217; RV64-NEXT:    mv a0, a21218; RV64-NEXT:  .LBB36_2:1219; RV64-NEXT:    ret1220  %1 = and i64 %a, 92233720368547758081221  %2 = icmp ne i64 %1, 01222  %3 = select i1 %2, i64 %b, i64 %c1223  ret i64 %31224}1225 1226define void @bit_10_z_branch_i32(i32 signext %0) {1227; CHECK-LABEL: bit_10_z_branch_i32:1228; CHECK:       # %bb.0:1229; CHECK-NEXT:    andi a0, a0, 10241230; CHECK-NEXT:    bnez a0, .LBB37_21231; CHECK-NEXT:  # %bb.1:1232; CHECK-NEXT:    tail bar1233; CHECK-NEXT:  .LBB37_2:1234; CHECK-NEXT:    ret1235  %2 = and i32 %0, 10241236  %3 = icmp eq i32 %2, 01237  br i1 %3, label %4, label %51238 12394:1240  tail call void @bar()1241  br label %51242 12435:1244  ret void1245}1246 1247define void @bit_10_nz_branch_i32(i32 signext %0) {1248; CHECK-LABEL: bit_10_nz_branch_i32:1249; CHECK:       # %bb.0:1250; CHECK-NEXT:    andi a0, a0, 10241251; CHECK-NEXT:    beqz a0, .LBB38_21252; CHECK-NEXT:  # %bb.1:1253; CHECK-NEXT:    tail bar1254; CHECK-NEXT:  .LBB38_2:1255; CHECK-NEXT:    ret1256  %2 = and i32 %0, 10241257  %3 = icmp ne i32 %2, 01258  br i1 %3, label %4, label %51259 12604:1261  tail call void @bar()1262  br label %51263 12645:1265  ret void1266}1267 1268define void @bit_11_z_branch_i32(i32 signext %0) {1269; RV32-LABEL: bit_11_z_branch_i32:1270; RV32:       # %bb.0:1271; RV32-NEXT:    slli a0, a0, 201272; RV32-NEXT:    bltz a0, .LBB39_21273; RV32-NEXT:  # %bb.1:1274; RV32-NEXT:    tail bar1275; RV32-NEXT:  .LBB39_2:1276; RV32-NEXT:    ret1277;1278; RV64-LABEL: bit_11_z_branch_i32:1279; RV64:       # %bb.0:1280; RV64-NEXT:    slli a0, a0, 521281; RV64-NEXT:    bltz a0, .LBB39_21282; RV64-NEXT:  # %bb.1:1283; RV64-NEXT:    tail bar1284; RV64-NEXT:  .LBB39_2:1285; RV64-NEXT:    ret1286  %2 = and i32 %0, 20481287  %3 = icmp eq i32 %2, 01288  br i1 %3, label %4, label %51289 12904:1291  tail call void @bar()1292  br label %51293 12945:1295  ret void1296}1297 1298define void @bit_11_nz_branch_i32(i32 signext %0) {1299; RV32-LABEL: bit_11_nz_branch_i32:1300; RV32:       # %bb.0:1301; RV32-NEXT:    slli a0, a0, 201302; RV32-NEXT:    bgez a0, .LBB40_21303; RV32-NEXT:  # %bb.1:1304; RV32-NEXT:    tail bar1305; RV32-NEXT:  .LBB40_2:1306; RV32-NEXT:    ret1307;1308; RV64-LABEL: bit_11_nz_branch_i32:1309; RV64:       # %bb.0:1310; RV64-NEXT:    slli a0, a0, 521311; RV64-NEXT:    bgez a0, .LBB40_21312; RV64-NEXT:  # %bb.1:1313; RV64-NEXT:    tail bar1314; RV64-NEXT:  .LBB40_2:1315; RV64-NEXT:    ret1316  %2 = and i32 %0, 20481317  %3 = icmp ne i32 %2, 01318  br i1 %3, label %4, label %51319 13204:1321  tail call void @bar()1322  br label %51323 13245:1325  ret void1326}1327 1328define void @bit_24_z_branch_i32(i32 signext %0) {1329; RV32-LABEL: bit_24_z_branch_i32:1330; RV32:       # %bb.0:1331; RV32-NEXT:    slli a0, a0, 71332; RV32-NEXT:    bltz a0, .LBB41_21333; RV32-NEXT:  # %bb.1:1334; RV32-NEXT:    tail bar1335; RV32-NEXT:  .LBB41_2:1336; RV32-NEXT:    ret1337;1338; RV64-LABEL: bit_24_z_branch_i32:1339; RV64:       # %bb.0:1340; RV64-NEXT:    slli a0, a0, 391341; RV64-NEXT:    bltz a0, .LBB41_21342; RV64-NEXT:  # %bb.1:1343; RV64-NEXT:    tail bar1344; RV64-NEXT:  .LBB41_2:1345; RV64-NEXT:    ret1346  %2 = and i32 %0, 167772161347  %3 = icmp eq i32 %2, 01348  br i1 %3, label %4, label %51349 13504:1351  tail call void @bar()1352  br label %51353 13545:1355  ret void1356}1357 1358define void @bit_24_nz_branch_i32(i32 signext %0) {1359; RV32-LABEL: bit_24_nz_branch_i32:1360; RV32:       # %bb.0:1361; RV32-NEXT:    slli a0, a0, 71362; RV32-NEXT:    bgez a0, .LBB42_21363; RV32-NEXT:  # %bb.1:1364; RV32-NEXT:    tail bar1365; RV32-NEXT:  .LBB42_2:1366; RV32-NEXT:    ret1367;1368; RV64-LABEL: bit_24_nz_branch_i32:1369; RV64:       # %bb.0:1370; RV64-NEXT:    slli a0, a0, 391371; RV64-NEXT:    bgez a0, .LBB42_21372; RV64-NEXT:  # %bb.1:1373; RV64-NEXT:    tail bar1374; RV64-NEXT:  .LBB42_2:1375; RV64-NEXT:    ret1376  %2 = and i32 %0, 167772161377  %3 = icmp ne i32 %2, 01378  br i1 %3, label %4, label %51379 13804:1381  tail call void @bar()1382  br label %51383 13845:1385  ret void1386}1387 1388define void @bit_31_z_branch_i32(i32 signext %0) {1389; RV32-LABEL: bit_31_z_branch_i32:1390; RV32:       # %bb.0:1391; RV32-NEXT:    bltz a0, .LBB43_21392; RV32-NEXT:  # %bb.1:1393; RV32-NEXT:    tail bar1394; RV32-NEXT:  .LBB43_2:1395; RV32-NEXT:    ret1396;1397; RV64-LABEL: bit_31_z_branch_i32:1398; RV64:       # %bb.0:1399; RV64-NEXT:    lui a1, 5242881400; RV64-NEXT:    and a0, a0, a11401; RV64-NEXT:    bnez a0, .LBB43_21402; RV64-NEXT:  # %bb.1:1403; RV64-NEXT:    tail bar1404; RV64-NEXT:  .LBB43_2:1405; RV64-NEXT:    ret1406  %2 = and i32 %0, 21474836481407  %3 = icmp eq i32 %2, 01408  br i1 %3, label %4, label %51409 14104:1411  tail call void @bar()1412  br label %51413 14145:1415  ret void1416}1417 1418define void @bit_31_nz_branch_i32(i32 signext %0) {1419; RV32-LABEL: bit_31_nz_branch_i32:1420; RV32:       # %bb.0:1421; RV32-NEXT:    bgez a0, .LBB44_21422; RV32-NEXT:  # %bb.1:1423; RV32-NEXT:    tail bar1424; RV32-NEXT:  .LBB44_2:1425; RV32-NEXT:    ret1426;1427; RV64-LABEL: bit_31_nz_branch_i32:1428; RV64:       # %bb.0:1429; RV64-NEXT:    lui a1, 5242881430; RV64-NEXT:    and a0, a0, a11431; RV64-NEXT:    beqz a0, .LBB44_21432; RV64-NEXT:  # %bb.1:1433; RV64-NEXT:    tail bar1434; RV64-NEXT:  .LBB44_2:1435; RV64-NEXT:    ret1436  %2 = and i32 %0, 21474836481437  %3 = icmp ne i32 %2, 01438  br i1 %3, label %4, label %51439 14404:1441  tail call void @bar()1442  br label %51443 14445:1445  ret void1446}1447 1448define void @bit_10_z_branch_i64(i64 %0) {1449; CHECK-LABEL: bit_10_z_branch_i64:1450; CHECK:       # %bb.0:1451; CHECK-NEXT:    andi a0, a0, 10241452; CHECK-NEXT:    bnez a0, .LBB45_21453; CHECK-NEXT:  # %bb.1:1454; CHECK-NEXT:    tail bar1455; CHECK-NEXT:  .LBB45_2:1456; CHECK-NEXT:    ret1457  %2 = and i64 %0, 10241458  %3 = icmp eq i64 %2, 01459  br i1 %3, label %4, label %51460 14614:1462  tail call void @bar()1463  br label %51464 14655:1466  ret void1467}1468 1469define void @bit_10_nz_branch_i64(i64 %0) {1470; CHECK-LABEL: bit_10_nz_branch_i64:1471; CHECK:       # %bb.0:1472; CHECK-NEXT:    andi a0, a0, 10241473; CHECK-NEXT:    beqz a0, .LBB46_21474; CHECK-NEXT:  # %bb.1:1475; CHECK-NEXT:    tail bar1476; CHECK-NEXT:  .LBB46_2:1477; CHECK-NEXT:    ret1478  %2 = and i64 %0, 10241479  %3 = icmp ne i64 %2, 01480  br i1 %3, label %4, label %51481 14824:1483  tail call void @bar()1484  br label %51485 14865:1487  ret void1488}1489 1490define void @bit_11_z_branch_i64(i64 %0) {1491; RV32-LABEL: bit_11_z_branch_i64:1492; RV32:       # %bb.0:1493; RV32-NEXT:    slli a0, a0, 201494; RV32-NEXT:    bltz a0, .LBB47_21495; RV32-NEXT:  # %bb.1:1496; RV32-NEXT:    tail bar1497; RV32-NEXT:  .LBB47_2:1498; RV32-NEXT:    ret1499;1500; RV64-LABEL: bit_11_z_branch_i64:1501; RV64:       # %bb.0:1502; RV64-NEXT:    slli a0, a0, 521503; RV64-NEXT:    bltz a0, .LBB47_21504; RV64-NEXT:  # %bb.1:1505; RV64-NEXT:    tail bar1506; RV64-NEXT:  .LBB47_2:1507; RV64-NEXT:    ret1508  %2 = and i64 %0, 20481509  %3 = icmp eq i64 %2, 01510  br i1 %3, label %4, label %51511 15124:1513  tail call void @bar()1514  br label %51515 15165:1517  ret void1518}1519 1520define void @bit_11_nz_branch_i64(i64 %0) {1521; RV32-LABEL: bit_11_nz_branch_i64:1522; RV32:       # %bb.0:1523; RV32-NEXT:    slli a0, a0, 201524; RV32-NEXT:    bgez a0, .LBB48_21525; RV32-NEXT:  # %bb.1:1526; RV32-NEXT:    tail bar1527; RV32-NEXT:  .LBB48_2:1528; RV32-NEXT:    ret1529;1530; RV64-LABEL: bit_11_nz_branch_i64:1531; RV64:       # %bb.0:1532; RV64-NEXT:    slli a0, a0, 521533; RV64-NEXT:    bgez a0, .LBB48_21534; RV64-NEXT:  # %bb.1:1535; RV64-NEXT:    tail bar1536; RV64-NEXT:  .LBB48_2:1537; RV64-NEXT:    ret1538  %2 = and i64 %0, 20481539  %3 = icmp ne i64 %2, 01540  br i1 %3, label %4, label %51541 15424:1543  tail call void @bar()1544  br label %51545 15465:1547  ret void1548}1549 1550define void @bit_24_z_branch_i64(i64 %0) {1551; RV32-LABEL: bit_24_z_branch_i64:1552; RV32:       # %bb.0:1553; RV32-NEXT:    slli a0, a0, 71554; RV32-NEXT:    bltz a0, .LBB49_21555; RV32-NEXT:  # %bb.1:1556; RV32-NEXT:    tail bar1557; RV32-NEXT:  .LBB49_2:1558; RV32-NEXT:    ret1559;1560; RV64-LABEL: bit_24_z_branch_i64:1561; RV64:       # %bb.0:1562; RV64-NEXT:    slli a0, a0, 391563; RV64-NEXT:    bltz a0, .LBB49_21564; RV64-NEXT:  # %bb.1:1565; RV64-NEXT:    tail bar1566; RV64-NEXT:  .LBB49_2:1567; RV64-NEXT:    ret1568  %2 = and i64 %0, 167772161569  %3 = icmp eq i64 %2, 01570  br i1 %3, label %4, label %51571 15724:1573  tail call void @bar()1574  br label %51575 15765:1577  ret void1578}1579 1580define void @bit_24_nz_branch_i64(i64 %0) {1581; RV32-LABEL: bit_24_nz_branch_i64:1582; RV32:       # %bb.0:1583; RV32-NEXT:    slli a0, a0, 71584; RV32-NEXT:    bgez a0, .LBB50_21585; RV32-NEXT:  # %bb.1:1586; RV32-NEXT:    tail bar1587; RV32-NEXT:  .LBB50_2:1588; RV32-NEXT:    ret1589;1590; RV64-LABEL: bit_24_nz_branch_i64:1591; RV64:       # %bb.0:1592; RV64-NEXT:    slli a0, a0, 391593; RV64-NEXT:    bgez a0, .LBB50_21594; RV64-NEXT:  # %bb.1:1595; RV64-NEXT:    tail bar1596; RV64-NEXT:  .LBB50_2:1597; RV64-NEXT:    ret1598  %2 = and i64 %0, 167772161599  %3 = icmp ne i64 %2, 01600  br i1 %3, label %4, label %51601 16024:1603  tail call void @bar()1604  br label %51605 16065:1607  ret void1608}1609 1610define void @bit_31_z_branch_i64(i64 %0) {1611; RV32-LABEL: bit_31_z_branch_i64:1612; RV32:       # %bb.0:1613; RV32-NEXT:    bltz a0, .LBB51_21614; RV32-NEXT:  # %bb.1:1615; RV32-NEXT:    tail bar1616; RV32-NEXT:  .LBB51_2:1617; RV32-NEXT:    ret1618;1619; RV64-LABEL: bit_31_z_branch_i64:1620; RV64:       # %bb.0:1621; RV64-NEXT:    slli a0, a0, 321622; RV64-NEXT:    bltz a0, .LBB51_21623; RV64-NEXT:  # %bb.1:1624; RV64-NEXT:    tail bar1625; RV64-NEXT:  .LBB51_2:1626; RV64-NEXT:    ret1627  %2 = and i64 %0, 21474836481628  %3 = icmp eq i64 %2, 01629  br i1 %3, label %4, label %51630 16314:1632  tail call void @bar()1633  br label %51634 16355:1636  ret void1637}1638 1639define void @bit_31_nz_branch_i64(i64 %0) {1640; RV32-LABEL: bit_31_nz_branch_i64:1641; RV32:       # %bb.0:1642; RV32-NEXT:    bgez a0, .LBB52_21643; RV32-NEXT:  # %bb.1:1644; RV32-NEXT:    tail bar1645; RV32-NEXT:  .LBB52_2:1646; RV32-NEXT:    ret1647;1648; RV64-LABEL: bit_31_nz_branch_i64:1649; RV64:       # %bb.0:1650; RV64-NEXT:    slli a0, a0, 321651; RV64-NEXT:    bgez a0, .LBB52_21652; RV64-NEXT:  # %bb.1:1653; RV64-NEXT:    tail bar1654; RV64-NEXT:  .LBB52_2:1655; RV64-NEXT:    ret1656  %2 = and i64 %0, 21474836481657  %3 = icmp ne i64 %2, 01658  br i1 %3, label %4, label %51659 16604:1661  tail call void @bar()1662  br label %51663 16645:1665  ret void1666}1667 1668define void @bit_32_z_branch_i64(i64 %0) {1669; RV32-LABEL: bit_32_z_branch_i64:1670; RV32:       # %bb.0:1671; RV32-NEXT:    andi a1, a1, 11672; RV32-NEXT:    bnez a1, .LBB53_21673; RV32-NEXT:  # %bb.1:1674; RV32-NEXT:    tail bar1675; RV32-NEXT:  .LBB53_2:1676; RV32-NEXT:    ret1677;1678; RV64-LABEL: bit_32_z_branch_i64:1679; RV64:       # %bb.0:1680; RV64-NEXT:    slli a0, a0, 311681; RV64-NEXT:    bltz a0, .LBB53_21682; RV64-NEXT:  # %bb.1:1683; RV64-NEXT:    tail bar1684; RV64-NEXT:  .LBB53_2:1685; RV64-NEXT:    ret1686  %2 = and i64 %0, 42949672961687  %3 = icmp eq i64 %2, 01688  br i1 %3, label %4, label %51689 16904:1691  tail call void @bar()1692  br label %51693 16945:1695  ret void1696}1697 1698define void @bit_32_nz_branch_i64(i64 %0) {1699; RV32-LABEL: bit_32_nz_branch_i64:1700; RV32:       # %bb.0:1701; RV32-NEXT:    andi a1, a1, 11702; RV32-NEXT:    beqz a1, .LBB54_21703; RV32-NEXT:  # %bb.1:1704; RV32-NEXT:    tail bar1705; RV32-NEXT:  .LBB54_2:1706; RV32-NEXT:    ret1707;1708; RV64-LABEL: bit_32_nz_branch_i64:1709; RV64:       # %bb.0:1710; RV64-NEXT:    slli a0, a0, 311711; RV64-NEXT:    bgez a0, .LBB54_21712; RV64-NEXT:  # %bb.1:1713; RV64-NEXT:    tail bar1714; RV64-NEXT:  .LBB54_2:1715; RV64-NEXT:    ret1716  %2 = and i64 %0, 42949672961717  %3 = icmp ne i64 %2, 01718  br i1 %3, label %4, label %51719 17204:1721  tail call void @bar()1722  br label %51723 17245:1725  ret void1726}1727 1728define void @bit_62_z_branch_i64(i64 %0) {1729; RV32-LABEL: bit_62_z_branch_i64:1730; RV32:       # %bb.0:1731; RV32-NEXT:    slli a1, a1, 11732; RV32-NEXT:    bltz a1, .LBB55_21733; RV32-NEXT:  # %bb.1:1734; RV32-NEXT:    tail bar1735; RV32-NEXT:  .LBB55_2:1736; RV32-NEXT:    ret1737;1738; RV64-LABEL: bit_62_z_branch_i64:1739; RV64:       # %bb.0:1740; RV64-NEXT:    slli a0, a0, 11741; RV64-NEXT:    bltz a0, .LBB55_21742; RV64-NEXT:  # %bb.1:1743; RV64-NEXT:    tail bar1744; RV64-NEXT:  .LBB55_2:1745; RV64-NEXT:    ret1746  %2 = and i64 %0, 46116860184273879041747  %3 = icmp eq i64 %2, 01748  br i1 %3, label %4, label %51749 17504:1751  tail call void @bar()1752  br label %51753 17545:1755  ret void1756}1757 1758define void @bit_62_nz_branch_i64(i64 %0) {1759; RV32-LABEL: bit_62_nz_branch_i64:1760; RV32:       # %bb.0:1761; RV32-NEXT:    slli a1, a1, 11762; RV32-NEXT:    bgez a1, .LBB56_21763; RV32-NEXT:  # %bb.1:1764; RV32-NEXT:    tail bar1765; RV32-NEXT:  .LBB56_2:1766; RV32-NEXT:    ret1767;1768; RV64-LABEL: bit_62_nz_branch_i64:1769; RV64:       # %bb.0:1770; RV64-NEXT:    slli a0, a0, 11771; RV64-NEXT:    bgez a0, .LBB56_21772; RV64-NEXT:  # %bb.1:1773; RV64-NEXT:    tail bar1774; RV64-NEXT:  .LBB56_2:1775; RV64-NEXT:    ret1776  %2 = and i64 %0, 46116860184273879041777  %3 = icmp ne i64 %2, 01778  br i1 %3, label %4, label %51779 17804:1781  tail call void @bar()1782  br label %51783 17845:1785  ret void1786}1787 1788define void @bit_63_z_branch_i64(i64 %0) {1789; RV32-LABEL: bit_63_z_branch_i64:1790; RV32:       # %bb.0:1791; RV32-NEXT:    bltz a1, .LBB57_21792; RV32-NEXT:  # %bb.1:1793; RV32-NEXT:    tail bar1794; RV32-NEXT:  .LBB57_2:1795; RV32-NEXT:    ret1796;1797; RV64-LABEL: bit_63_z_branch_i64:1798; RV64:       # %bb.0:1799; RV64-NEXT:    bltz a0, .LBB57_21800; RV64-NEXT:  # %bb.1:1801; RV64-NEXT:    tail bar1802; RV64-NEXT:  .LBB57_2:1803; RV64-NEXT:    ret1804  %2 = and i64 %0, 92233720368547758081805  %3 = icmp eq i64 %2, 01806  br i1 %3, label %4, label %51807 18084:1809  tail call void @bar()1810  br label %51811 18125:1813  ret void1814}1815 1816define void @bit_63_nz_branch_i64(i64 %0) {1817; RV32-LABEL: bit_63_nz_branch_i64:1818; RV32:       # %bb.0:1819; RV32-NEXT:    bgez a1, .LBB58_21820; RV32-NEXT:  # %bb.1:1821; RV32-NEXT:    tail bar1822; RV32-NEXT:  .LBB58_2:1823; RV32-NEXT:    ret1824;1825; RV64-LABEL: bit_63_nz_branch_i64:1826; RV64:       # %bb.0:1827; RV64-NEXT:    bgez a0, .LBB58_21828; RV64-NEXT:  # %bb.1:1829; RV64-NEXT:    tail bar1830; RV64-NEXT:  .LBB58_2:1831; RV64-NEXT:    ret1832  %2 = and i64 %0, 92233720368547758081833  %3 = icmp ne i64 %2, 01834  br i1 %3, label %4, label %51835 18364:1837  tail call void @bar()1838  br label %51839 18405:1841  ret void1842}1843 1844define signext i32 @bit_10_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1845; CHECK-LABEL: bit_10_1_z_select_i32:1846; CHECK:       # %bb.0:1847; CHECK-NEXT:    andi a3, a0, 10231848; CHECK-NEXT:    mv a0, a11849; CHECK-NEXT:    beqz a3, .LBB59_21850; CHECK-NEXT:  # %bb.1:1851; CHECK-NEXT:    mv a0, a21852; CHECK-NEXT:  .LBB59_2:1853; CHECK-NEXT:    ret1854  %1 = and i32 %a, 10231855  %2 = icmp eq i32 %1, 01856  %3 = select i1 %2, i32 %b, i32 %c1857  ret i32 %31858}1859 1860define signext i32 @bit_10_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1861; CHECK-LABEL: bit_10_1_nz_select_i32:1862; CHECK:       # %bb.0:1863; CHECK-NEXT:    andi a3, a0, 10231864; CHECK-NEXT:    mv a0, a11865; CHECK-NEXT:    bnez a3, .LBB60_21866; CHECK-NEXT:  # %bb.1:1867; CHECK-NEXT:    mv a0, a21868; CHECK-NEXT:  .LBB60_2:1869; CHECK-NEXT:    ret1870  %1 = and i32 %a, 10231871  %2 = icmp ne i32 %1, 01872  %3 = select i1 %2, i32 %b, i32 %c1873  ret i32 %31874}1875 1876define signext i32 @bit_11_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1877; CHECK-LABEL: bit_11_1_z_select_i32:1878; CHECK:       # %bb.0:1879; CHECK-NEXT:    andi a3, a0, 20471880; CHECK-NEXT:    mv a0, a11881; CHECK-NEXT:    beqz a3, .LBB61_21882; CHECK-NEXT:  # %bb.1:1883; CHECK-NEXT:    mv a0, a21884; CHECK-NEXT:  .LBB61_2:1885; CHECK-NEXT:    ret1886  %1 = and i32 %a, 20471887  %2 = icmp eq i32 %1, 01888  %3 = select i1 %2, i32 %b, i32 %c1889  ret i32 %31890}1891 1892define signext i32 @bit_11_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1893; CHECK-LABEL: bit_11_1_nz_select_i32:1894; CHECK:       # %bb.0:1895; CHECK-NEXT:    andi a3, a0, 20471896; CHECK-NEXT:    mv a0, a11897; CHECK-NEXT:    bnez a3, .LBB62_21898; CHECK-NEXT:  # %bb.1:1899; CHECK-NEXT:    mv a0, a21900; CHECK-NEXT:  .LBB62_2:1901; CHECK-NEXT:    ret1902  %1 = and i32 %a, 20471903  %2 = icmp ne i32 %1, 01904  %3 = select i1 %2, i32 %b, i32 %c1905  ret i32 %31906}1907 1908define signext i32 @bit_16_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1909; RV32-LABEL: bit_16_1_z_select_i32:1910; RV32:       # %bb.0:1911; RV32-NEXT:    slli a3, a0, 161912; RV32-NEXT:    mv a0, a11913; RV32-NEXT:    beqz a3, .LBB63_21914; RV32-NEXT:  # %bb.1:1915; RV32-NEXT:    mv a0, a21916; RV32-NEXT:  .LBB63_2:1917; RV32-NEXT:    ret1918;1919; RV64-LABEL: bit_16_1_z_select_i32:1920; RV64:       # %bb.0:1921; RV64-NEXT:    slli a3, a0, 481922; RV64-NEXT:    mv a0, a11923; RV64-NEXT:    beqz a3, .LBB63_21924; RV64-NEXT:  # %bb.1:1925; RV64-NEXT:    mv a0, a21926; RV64-NEXT:  .LBB63_2:1927; RV64-NEXT:    ret1928  %1 = and i32 %a, 655351929  %2 = icmp eq i32 %1, 01930  %3 = select i1 %2, i32 %b, i32 %c1931  ret i32 %31932}1933 1934define signext i32 @bit_16_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1935; RV32-LABEL: bit_16_1_nz_select_i32:1936; RV32:       # %bb.0:1937; RV32-NEXT:    slli a3, a0, 161938; RV32-NEXT:    mv a0, a11939; RV32-NEXT:    bnez a3, .LBB64_21940; RV32-NEXT:  # %bb.1:1941; RV32-NEXT:    mv a0, a21942; RV32-NEXT:  .LBB64_2:1943; RV32-NEXT:    ret1944;1945; RV64-LABEL: bit_16_1_nz_select_i32:1946; RV64:       # %bb.0:1947; RV64-NEXT:    slli a3, a0, 481948; RV64-NEXT:    mv a0, a11949; RV64-NEXT:    bnez a3, .LBB64_21950; RV64-NEXT:  # %bb.1:1951; RV64-NEXT:    mv a0, a21952; RV64-NEXT:  .LBB64_2:1953; RV64-NEXT:    ret1954  %1 = and i32 %a, 655351955  %2 = icmp ne i32 %1, 01956  %3 = select i1 %2, i32 %b, i32 %c1957  ret i32 %31958}1959 1960define signext i32 @bit_20_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1961; RV32-LABEL: bit_20_1_z_select_i32:1962; RV32:       # %bb.0:1963; RV32-NEXT:    slli a3, a0, 121964; RV32-NEXT:    mv a0, a11965; RV32-NEXT:    beqz a3, .LBB65_21966; RV32-NEXT:  # %bb.1:1967; RV32-NEXT:    mv a0, a21968; RV32-NEXT:  .LBB65_2:1969; RV32-NEXT:    ret1970;1971; RV64-LABEL: bit_20_1_z_select_i32:1972; RV64:       # %bb.0:1973; RV64-NEXT:    slli a3, a0, 441974; RV64-NEXT:    mv a0, a11975; RV64-NEXT:    beqz a3, .LBB65_21976; RV64-NEXT:  # %bb.1:1977; RV64-NEXT:    mv a0, a21978; RV64-NEXT:  .LBB65_2:1979; RV64-NEXT:    ret1980  %1 = and i32 %a, 10485751981  %2 = icmp eq i32 %1, 01982  %3 = select i1 %2, i32 %b, i32 %c1983  ret i32 %31984}1985 1986define signext i32 @bit_20_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {1987; RV32-LABEL: bit_20_1_nz_select_i32:1988; RV32:       # %bb.0:1989; RV32-NEXT:    slli a3, a0, 121990; RV32-NEXT:    mv a0, a11991; RV32-NEXT:    bnez a3, .LBB66_21992; RV32-NEXT:  # %bb.1:1993; RV32-NEXT:    mv a0, a21994; RV32-NEXT:  .LBB66_2:1995; RV32-NEXT:    ret1996;1997; RV64-LABEL: bit_20_1_nz_select_i32:1998; RV64:       # %bb.0:1999; RV64-NEXT:    slli a3, a0, 442000; RV64-NEXT:    mv a0, a12001; RV64-NEXT:    bnez a3, .LBB66_22002; RV64-NEXT:  # %bb.1:2003; RV64-NEXT:    mv a0, a22004; RV64-NEXT:  .LBB66_2:2005; RV64-NEXT:    ret2006  %1 = and i32 %a, 10485752007  %2 = icmp ne i32 %1, 02008  %3 = select i1 %2, i32 %b, i32 %c2009  ret i32 %32010}2011 2012define signext i32 @bit_31_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {2013; RV32-LABEL: bit_31_1_z_select_i32:2014; RV32:       # %bb.0:2015; RV32-NEXT:    slli a3, a0, 12016; RV32-NEXT:    mv a0, a12017; RV32-NEXT:    beqz a3, .LBB67_22018; RV32-NEXT:  # %bb.1:2019; RV32-NEXT:    mv a0, a22020; RV32-NEXT:  .LBB67_2:2021; RV32-NEXT:    ret2022;2023; RV64-LABEL: bit_31_1_z_select_i32:2024; RV64:       # %bb.0:2025; RV64-NEXT:    slli a3, a0, 332026; RV64-NEXT:    mv a0, a12027; RV64-NEXT:    beqz a3, .LBB67_22028; RV64-NEXT:  # %bb.1:2029; RV64-NEXT:    mv a0, a22030; RV64-NEXT:  .LBB67_2:2031; RV64-NEXT:    ret2032  %1 = and i32 %a, 21474836472033  %2 = icmp eq i32 %1, 02034  %3 = select i1 %2, i32 %b, i32 %c2035  ret i32 %32036}2037 2038define signext i32 @bit_31_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {2039; RV32-LABEL: bit_31_1_nz_select_i32:2040; RV32:       # %bb.0:2041; RV32-NEXT:    slli a3, a0, 12042; RV32-NEXT:    mv a0, a12043; RV32-NEXT:    bnez a3, .LBB68_22044; RV32-NEXT:  # %bb.1:2045; RV32-NEXT:    mv a0, a22046; RV32-NEXT:  .LBB68_2:2047; RV32-NEXT:    ret2048;2049; RV64-LABEL: bit_31_1_nz_select_i32:2050; RV64:       # %bb.0:2051; RV64-NEXT:    slli a3, a0, 332052; RV64-NEXT:    mv a0, a12053; RV64-NEXT:    bnez a3, .LBB68_22054; RV64-NEXT:  # %bb.1:2055; RV64-NEXT:    mv a0, a22056; RV64-NEXT:  .LBB68_2:2057; RV64-NEXT:    ret2058  %1 = and i32 %a, 21474836472059  %2 = icmp ne i32 %1, 02060  %3 = select i1 %2, i32 %b, i32 %c2061  ret i32 %32062}2063 2064define signext i32 @bit_32_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {2065; CHECK-LABEL: bit_32_1_z_select_i32:2066; CHECK:       # %bb.0:2067; CHECK-NEXT:    beqz a0, .LBB69_22068; CHECK-NEXT:  # %bb.1:2069; CHECK-NEXT:    mv a1, a22070; CHECK-NEXT:  .LBB69_2:2071; CHECK-NEXT:    mv a0, a12072; CHECK-NEXT:    ret2073  %1 = and i32 %a, 42949672952074  %2 = icmp eq i32 %1, 02075  %3 = select i1 %2, i32 %b, i32 %c2076  ret i32 %32077}2078 2079define signext i32 @bit_32_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {2080; CHECK-LABEL: bit_32_1_nz_select_i32:2081; CHECK:       # %bb.0:2082; CHECK-NEXT:    bnez a0, .LBB70_22083; CHECK-NEXT:  # %bb.1:2084; CHECK-NEXT:    mv a1, a22085; CHECK-NEXT:  .LBB70_2:2086; CHECK-NEXT:    mv a0, a12087; CHECK-NEXT:    ret2088  %1 = and i32 %a, 42949672952089  %2 = icmp ne i32 %1, 02090  %3 = select i1 %2, i32 %b, i32 %c2091  ret i32 %32092}2093 2094define i64 @bit_10_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2095; RV32-LABEL: bit_10_1_z_select_i64:2096; RV32:       # %bb.0:2097; RV32-NEXT:    mv a1, a32098; RV32-NEXT:    andi a3, a0, 10232099; RV32-NEXT:    mv a0, a22100; RV32-NEXT:    beqz a3, .LBB71_22101; RV32-NEXT:  # %bb.1:2102; RV32-NEXT:    mv a0, a42103; RV32-NEXT:    mv a1, a52104; RV32-NEXT:  .LBB71_2:2105; RV32-NEXT:    ret2106;2107; RV64-LABEL: bit_10_1_z_select_i64:2108; RV64:       # %bb.0:2109; RV64-NEXT:    andi a3, a0, 10232110; RV64-NEXT:    mv a0, a12111; RV64-NEXT:    beqz a3, .LBB71_22112; RV64-NEXT:  # %bb.1:2113; RV64-NEXT:    mv a0, a22114; RV64-NEXT:  .LBB71_2:2115; RV64-NEXT:    ret2116  %1 = and i64 %a, 10232117  %2 = icmp eq i64 %1, 02118  %3 = select i1 %2, i64 %b, i64 %c2119  ret i64 %32120}2121 2122define i64 @bit_10_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2123; RV32-LABEL: bit_10_1_nz_select_i64:2124; RV32:       # %bb.0:2125; RV32-NEXT:    mv a1, a32126; RV32-NEXT:    andi a3, a0, 10232127; RV32-NEXT:    mv a0, a22128; RV32-NEXT:    bnez a3, .LBB72_22129; RV32-NEXT:  # %bb.1:2130; RV32-NEXT:    mv a0, a42131; RV32-NEXT:    mv a1, a52132; RV32-NEXT:  .LBB72_2:2133; RV32-NEXT:    ret2134;2135; RV64-LABEL: bit_10_1_nz_select_i64:2136; RV64:       # %bb.0:2137; RV64-NEXT:    andi a3, a0, 10232138; RV64-NEXT:    mv a0, a12139; RV64-NEXT:    bnez a3, .LBB72_22140; RV64-NEXT:  # %bb.1:2141; RV64-NEXT:    mv a0, a22142; RV64-NEXT:  .LBB72_2:2143; RV64-NEXT:    ret2144  %1 = and i64 %a, 10232145  %2 = icmp ne i64 %1, 02146  %3 = select i1 %2, i64 %b, i64 %c2147  ret i64 %32148}2149 2150define i64 @bit_11_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2151; RV32-LABEL: bit_11_1_z_select_i64:2152; RV32:       # %bb.0:2153; RV32-NEXT:    mv a1, a32154; RV32-NEXT:    andi a3, a0, 20472155; RV32-NEXT:    mv a0, a22156; RV32-NEXT:    beqz a3, .LBB73_22157; RV32-NEXT:  # %bb.1:2158; RV32-NEXT:    mv a0, a42159; RV32-NEXT:    mv a1, a52160; RV32-NEXT:  .LBB73_2:2161; RV32-NEXT:    ret2162;2163; RV64-LABEL: bit_11_1_z_select_i64:2164; RV64:       # %bb.0:2165; RV64-NEXT:    andi a3, a0, 20472166; RV64-NEXT:    mv a0, a12167; RV64-NEXT:    beqz a3, .LBB73_22168; RV64-NEXT:  # %bb.1:2169; RV64-NEXT:    mv a0, a22170; RV64-NEXT:  .LBB73_2:2171; RV64-NEXT:    ret2172  %1 = and i64 %a, 20472173  %2 = icmp eq i64 %1, 02174  %3 = select i1 %2, i64 %b, i64 %c2175  ret i64 %32176}2177 2178define i64 @bit_11_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2179; RV32-LABEL: bit_11_1_nz_select_i64:2180; RV32:       # %bb.0:2181; RV32-NEXT:    mv a1, a32182; RV32-NEXT:    andi a3, a0, 20472183; RV32-NEXT:    mv a0, a22184; RV32-NEXT:    bnez a3, .LBB74_22185; RV32-NEXT:  # %bb.1:2186; RV32-NEXT:    mv a0, a42187; RV32-NEXT:    mv a1, a52188; RV32-NEXT:  .LBB74_2:2189; RV32-NEXT:    ret2190;2191; RV64-LABEL: bit_11_1_nz_select_i64:2192; RV64:       # %bb.0:2193; RV64-NEXT:    andi a3, a0, 20472194; RV64-NEXT:    mv a0, a12195; RV64-NEXT:    bnez a3, .LBB74_22196; RV64-NEXT:  # %bb.1:2197; RV64-NEXT:    mv a0, a22198; RV64-NEXT:  .LBB74_2:2199; RV64-NEXT:    ret2200  %1 = and i64 %a, 20472201  %2 = icmp ne i64 %1, 02202  %3 = select i1 %2, i64 %b, i64 %c2203  ret i64 %32204}2205 2206define i64 @bit_16_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2207; RV32-LABEL: bit_16_1_z_select_i64:2208; RV32:       # %bb.0:2209; RV32-NEXT:    mv a1, a32210; RV32-NEXT:    slli a3, a0, 162211; RV32-NEXT:    mv a0, a22212; RV32-NEXT:    beqz a3, .LBB75_22213; RV32-NEXT:  # %bb.1:2214; RV32-NEXT:    mv a0, a42215; RV32-NEXT:    mv a1, a52216; RV32-NEXT:  .LBB75_2:2217; RV32-NEXT:    ret2218;2219; RV64-LABEL: bit_16_1_z_select_i64:2220; RV64:       # %bb.0:2221; RV64-NEXT:    slli a3, a0, 482222; RV64-NEXT:    mv a0, a12223; RV64-NEXT:    beqz a3, .LBB75_22224; RV64-NEXT:  # %bb.1:2225; RV64-NEXT:    mv a0, a22226; RV64-NEXT:  .LBB75_2:2227; RV64-NEXT:    ret2228  %1 = and i64 %a, 655352229  %2 = icmp eq i64 %1, 02230  %3 = select i1 %2, i64 %b, i64 %c2231  ret i64 %32232}2233 2234define i64 @bit_16_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2235; RV32-LABEL: bit_16_1_nz_select_i64:2236; RV32:       # %bb.0:2237; RV32-NEXT:    mv a1, a32238; RV32-NEXT:    bnez a0, .LBB76_22239; RV32-NEXT:  # %bb.1:2240; RV32-NEXT:    mv a2, a42241; RV32-NEXT:    mv a1, a52242; RV32-NEXT:  .LBB76_2:2243; RV32-NEXT:    mv a0, a22244; RV32-NEXT:    ret2245;2246; RV64-LABEL: bit_16_1_nz_select_i64:2247; RV64:       # %bb.0:2248; RV64-NEXT:    sext.w a3, a02249; RV64-NEXT:    mv a0, a12250; RV64-NEXT:    bnez a3, .LBB76_22251; RV64-NEXT:  # %bb.1:2252; RV64-NEXT:    mv a0, a22253; RV64-NEXT:  .LBB76_2:2254; RV64-NEXT:    ret2255  %1 = and i64 %a, 42949672952256  %2 = icmp ne i64 %1, 02257  %3 = select i1 %2, i64 %b, i64 %c2258  ret i64 %32259}2260 2261 2262define i64 @bit_20_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2263; RV32-LABEL: bit_20_1_z_select_i64:2264; RV32:       # %bb.0:2265; RV32-NEXT:    mv a1, a32266; RV32-NEXT:    slli a3, a0, 122267; RV32-NEXT:    mv a0, a22268; RV32-NEXT:    beqz a3, .LBB77_22269; RV32-NEXT:  # %bb.1:2270; RV32-NEXT:    mv a0, a42271; RV32-NEXT:    mv a1, a52272; RV32-NEXT:  .LBB77_2:2273; RV32-NEXT:    ret2274;2275; RV64-LABEL: bit_20_1_z_select_i64:2276; RV64:       # %bb.0:2277; RV64-NEXT:    slli a3, a0, 442278; RV64-NEXT:    mv a0, a12279; RV64-NEXT:    beqz a3, .LBB77_22280; RV64-NEXT:  # %bb.1:2281; RV64-NEXT:    mv a0, a22282; RV64-NEXT:  .LBB77_2:2283; RV64-NEXT:    ret2284  %1 = and i64 %a, 10485752285  %2 = icmp eq i64 %1, 02286  %3 = select i1 %2, i64 %b, i64 %c2287  ret i64 %32288}2289 2290define i64 @bit_20_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2291; RV32-LABEL: bit_20_1_nz_select_i64:2292; RV32:       # %bb.0:2293; RV32-NEXT:    mv a1, a32294; RV32-NEXT:    slli a3, a0, 122295; RV32-NEXT:    mv a0, a22296; RV32-NEXT:    bnez a3, .LBB78_22297; RV32-NEXT:  # %bb.1:2298; RV32-NEXT:    mv a0, a42299; RV32-NEXT:    mv a1, a52300; RV32-NEXT:  .LBB78_2:2301; RV32-NEXT:    ret2302;2303; RV64-LABEL: bit_20_1_nz_select_i64:2304; RV64:       # %bb.0:2305; RV64-NEXT:    slli a3, a0, 442306; RV64-NEXT:    mv a0, a12307; RV64-NEXT:    bnez a3, .LBB78_22308; RV64-NEXT:  # %bb.1:2309; RV64-NEXT:    mv a0, a22310; RV64-NEXT:  .LBB78_2:2311; RV64-NEXT:    ret2312  %1 = and i64 %a, 10485752313  %2 = icmp ne i64 %1, 02314  %3 = select i1 %2, i64 %b, i64 %c2315  ret i64 %32316}2317 2318define i64 @bit_31_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2319; RV32-LABEL: bit_31_1_z_select_i64:2320; RV32:       # %bb.0:2321; RV32-NEXT:    mv a1, a32322; RV32-NEXT:    slli a3, a0, 12323; RV32-NEXT:    mv a0, a22324; RV32-NEXT:    beqz a3, .LBB79_22325; RV32-NEXT:  # %bb.1:2326; RV32-NEXT:    mv a0, a42327; RV32-NEXT:    mv a1, a52328; RV32-NEXT:  .LBB79_2:2329; RV32-NEXT:    ret2330;2331; RV64-LABEL: bit_31_1_z_select_i64:2332; RV64:       # %bb.0:2333; RV64-NEXT:    slli a3, a0, 332334; RV64-NEXT:    mv a0, a12335; RV64-NEXT:    beqz a3, .LBB79_22336; RV64-NEXT:  # %bb.1:2337; RV64-NEXT:    mv a0, a22338; RV64-NEXT:  .LBB79_2:2339; RV64-NEXT:    ret2340  %1 = and i64 %a, 21474836472341  %2 = icmp eq i64 %1, 02342  %3 = select i1 %2, i64 %b, i64 %c2343  ret i64 %32344}2345 2346define i64 @bit_31_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2347; RV32-LABEL: bit_31_1_nz_select_i64:2348; RV32:       # %bb.0:2349; RV32-NEXT:    mv a1, a32350; RV32-NEXT:    slli a3, a0, 12351; RV32-NEXT:    mv a0, a22352; RV32-NEXT:    bnez a3, .LBB80_22353; RV32-NEXT:  # %bb.1:2354; RV32-NEXT:    mv a0, a42355; RV32-NEXT:    mv a1, a52356; RV32-NEXT:  .LBB80_2:2357; RV32-NEXT:    ret2358;2359; RV64-LABEL: bit_31_1_nz_select_i64:2360; RV64:       # %bb.0:2361; RV64-NEXT:    slli a3, a0, 332362; RV64-NEXT:    mv a0, a12363; RV64-NEXT:    bnez a3, .LBB80_22364; RV64-NEXT:  # %bb.1:2365; RV64-NEXT:    mv a0, a22366; RV64-NEXT:  .LBB80_2:2367; RV64-NEXT:    ret2368  %1 = and i64 %a, 21474836472369  %2 = icmp ne i64 %1, 02370  %3 = select i1 %2, i64 %b, i64 %c2371  ret i64 %32372}2373 2374define i64 @bit_32_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2375; RV32-LABEL: bit_32_1_z_select_i64:2376; RV32:       # %bb.0:2377; RV32-NEXT:    mv a1, a32378; RV32-NEXT:    beqz a0, .LBB81_22379; RV32-NEXT:  # %bb.1:2380; RV32-NEXT:    mv a2, a42381; RV32-NEXT:    mv a1, a52382; RV32-NEXT:  .LBB81_2:2383; RV32-NEXT:    mv a0, a22384; RV32-NEXT:    ret2385;2386; RV64-LABEL: bit_32_1_z_select_i64:2387; RV64:       # %bb.0:2388; RV64-NEXT:    sext.w a3, a02389; RV64-NEXT:    mv a0, a12390; RV64-NEXT:    beqz a3, .LBB81_22391; RV64-NEXT:  # %bb.1:2392; RV64-NEXT:    mv a0, a22393; RV64-NEXT:  .LBB81_2:2394; RV64-NEXT:    ret2395  %1 = and i64 %a, 42949672952396  %2 = icmp eq i64 %1, 02397  %3 = select i1 %2, i64 %b, i64 %c2398  ret i64 %32399}2400 2401define i64 @bit_32_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2402; RV32-LABEL: bit_32_1_nz_select_i64:2403; RV32:       # %bb.0:2404; RV32-NEXT:    mv a1, a32405; RV32-NEXT:    bnez a0, .LBB82_22406; RV32-NEXT:  # %bb.1:2407; RV32-NEXT:    mv a2, a42408; RV32-NEXT:    mv a1, a52409; RV32-NEXT:  .LBB82_2:2410; RV32-NEXT:    mv a0, a22411; RV32-NEXT:    ret2412;2413; RV64-LABEL: bit_32_1_nz_select_i64:2414; RV64:       # %bb.0:2415; RV64-NEXT:    sext.w a3, a02416; RV64-NEXT:    mv a0, a12417; RV64-NEXT:    bnez a3, .LBB82_22418; RV64-NEXT:  # %bb.1:2419; RV64-NEXT:    mv a0, a22420; RV64-NEXT:  .LBB82_2:2421; RV64-NEXT:    ret2422  %1 = and i64 %a, 42949672952423  %2 = icmp ne i64 %1, 02424  %3 = select i1 %2, i64 %b, i64 %c2425  ret i64 %32426}2427 2428define i64 @bit_55_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2429; RV32-LABEL: bit_55_1_z_select_i64:2430; RV32:       # %bb.0:2431; RV32-NEXT:    slli a1, a1, 92432; RV32-NEXT:    srli a1, a1, 92433; RV32-NEXT:    or a1, a0, a12434; RV32-NEXT:    mv a0, a22435; RV32-NEXT:    beqz a1, .LBB83_22436; RV32-NEXT:  # %bb.1:2437; RV32-NEXT:    mv a0, a42438; RV32-NEXT:    mv a3, a52439; RV32-NEXT:  .LBB83_2:2440; RV32-NEXT:    mv a1, a32441; RV32-NEXT:    ret2442;2443; RV64-LABEL: bit_55_1_z_select_i64:2444; RV64:       # %bb.0:2445; RV64-NEXT:    slli a3, a0, 92446; RV64-NEXT:    mv a0, a12447; RV64-NEXT:    beqz a3, .LBB83_22448; RV64-NEXT:  # %bb.1:2449; RV64-NEXT:    mv a0, a22450; RV64-NEXT:  .LBB83_2:2451; RV64-NEXT:    ret2452  %1 = and i64 %a, 360287970189639672453  %2 = icmp eq i64 %1, 02454  %3 = select i1 %2, i64 %b, i64 %c2455  ret i64 %32456}2457 2458define i64 @bit_55_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2459; RV32-LABEL: bit_55_1_nz_select_i64:2460; RV32:       # %bb.0:2461; RV32-NEXT:    slli a1, a1, 92462; RV32-NEXT:    srli a1, a1, 92463; RV32-NEXT:    or a1, a0, a12464; RV32-NEXT:    mv a0, a22465; RV32-NEXT:    bnez a1, .LBB84_22466; RV32-NEXT:  # %bb.1:2467; RV32-NEXT:    mv a0, a42468; RV32-NEXT:    mv a3, a52469; RV32-NEXT:  .LBB84_2:2470; RV32-NEXT:    mv a1, a32471; RV32-NEXT:    ret2472;2473; RV64-LABEL: bit_55_1_nz_select_i64:2474; RV64:       # %bb.0:2475; RV64-NEXT:    slli a3, a0, 92476; RV64-NEXT:    mv a0, a12477; RV64-NEXT:    bnez a3, .LBB84_22478; RV64-NEXT:  # %bb.1:2479; RV64-NEXT:    mv a0, a22480; RV64-NEXT:  .LBB84_2:2481; RV64-NEXT:    ret2482  %1 = and i64 %a, 360287970189639672483  %2 = icmp ne i64 %1, 02484  %3 = select i1 %2, i64 %b, i64 %c2485  ret i64 %32486}2487 2488define i64 @bit_63_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2489; RV32I-LABEL: bit_63_1_z_select_i64:2490; RV32I:       # %bb.0:2491; RV32I-NEXT:    slli a1, a1, 12492; RV32I-NEXT:    srli a1, a1, 12493; RV32I-NEXT:    or a1, a0, a12494; RV32I-NEXT:    mv a0, a22495; RV32I-NEXT:    beqz a1, .LBB85_22496; RV32I-NEXT:  # %bb.1:2497; RV32I-NEXT:    mv a0, a42498; RV32I-NEXT:    mv a3, a52499; RV32I-NEXT:  .LBB85_2:2500; RV32I-NEXT:    mv a1, a32501; RV32I-NEXT:    ret2502;2503; RV64-LABEL: bit_63_1_z_select_i64:2504; RV64:       # %bb.0:2505; RV64-NEXT:    slli a3, a0, 12506; RV64-NEXT:    mv a0, a12507; RV64-NEXT:    beqz a3, .LBB85_22508; RV64-NEXT:  # %bb.1:2509; RV64-NEXT:    mv a0, a22510; RV64-NEXT:  .LBB85_2:2511; RV64-NEXT:    ret2512;2513; RV32ZBS-LABEL: bit_63_1_z_select_i64:2514; RV32ZBS:       # %bb.0:2515; RV32ZBS-NEXT:    bclri a1, a1, 312516; RV32ZBS-NEXT:    or a1, a0, a12517; RV32ZBS-NEXT:    mv a0, a22518; RV32ZBS-NEXT:    beqz a1, .LBB85_22519; RV32ZBS-NEXT:  # %bb.1:2520; RV32ZBS-NEXT:    mv a0, a42521; RV32ZBS-NEXT:    mv a3, a52522; RV32ZBS-NEXT:  .LBB85_2:2523; RV32ZBS-NEXT:    mv a1, a32524; RV32ZBS-NEXT:    ret2525;2526; RV32XTHEADBS-LABEL: bit_63_1_z_select_i64:2527; RV32XTHEADBS:       # %bb.0:2528; RV32XTHEADBS-NEXT:    slli a1, a1, 12529; RV32XTHEADBS-NEXT:    srli a1, a1, 12530; RV32XTHEADBS-NEXT:    or a1, a0, a12531; RV32XTHEADBS-NEXT:    mv a0, a22532; RV32XTHEADBS-NEXT:    beqz a1, .LBB85_22533; RV32XTHEADBS-NEXT:  # %bb.1:2534; RV32XTHEADBS-NEXT:    mv a0, a42535; RV32XTHEADBS-NEXT:    mv a3, a52536; RV32XTHEADBS-NEXT:  .LBB85_2:2537; RV32XTHEADBS-NEXT:    mv a1, a32538; RV32XTHEADBS-NEXT:    ret2539  %1 = and i64 %a, 92233720368547758072540  %2 = icmp eq i64 %1, 02541  %3 = select i1 %2, i64 %b, i64 %c2542  ret i64 %32543}2544 2545define i64 @bit_63_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2546; RV32I-LABEL: bit_63_1_nz_select_i64:2547; RV32I:       # %bb.0:2548; RV32I-NEXT:    slli a1, a1, 12549; RV32I-NEXT:    srli a1, a1, 12550; RV32I-NEXT:    or a1, a0, a12551; RV32I-NEXT:    mv a0, a22552; RV32I-NEXT:    bnez a1, .LBB86_22553; RV32I-NEXT:  # %bb.1:2554; RV32I-NEXT:    mv a0, a42555; RV32I-NEXT:    mv a3, a52556; RV32I-NEXT:  .LBB86_2:2557; RV32I-NEXT:    mv a1, a32558; RV32I-NEXT:    ret2559;2560; RV64-LABEL: bit_63_1_nz_select_i64:2561; RV64:       # %bb.0:2562; RV64-NEXT:    slli a3, a0, 12563; RV64-NEXT:    mv a0, a12564; RV64-NEXT:    bnez a3, .LBB86_22565; RV64-NEXT:  # %bb.1:2566; RV64-NEXT:    mv a0, a22567; RV64-NEXT:  .LBB86_2:2568; RV64-NEXT:    ret2569;2570; RV32ZBS-LABEL: bit_63_1_nz_select_i64:2571; RV32ZBS:       # %bb.0:2572; RV32ZBS-NEXT:    bclri a1, a1, 312573; RV32ZBS-NEXT:    or a1, a0, a12574; RV32ZBS-NEXT:    mv a0, a22575; RV32ZBS-NEXT:    bnez a1, .LBB86_22576; RV32ZBS-NEXT:  # %bb.1:2577; RV32ZBS-NEXT:    mv a0, a42578; RV32ZBS-NEXT:    mv a3, a52579; RV32ZBS-NEXT:  .LBB86_2:2580; RV32ZBS-NEXT:    mv a1, a32581; RV32ZBS-NEXT:    ret2582;2583; RV32XTHEADBS-LABEL: bit_63_1_nz_select_i64:2584; RV32XTHEADBS:       # %bb.0:2585; RV32XTHEADBS-NEXT:    slli a1, a1, 12586; RV32XTHEADBS-NEXT:    srli a1, a1, 12587; RV32XTHEADBS-NEXT:    or a1, a0, a12588; RV32XTHEADBS-NEXT:    mv a0, a22589; RV32XTHEADBS-NEXT:    bnez a1, .LBB86_22590; RV32XTHEADBS-NEXT:  # %bb.1:2591; RV32XTHEADBS-NEXT:    mv a0, a42592; RV32XTHEADBS-NEXT:    mv a3, a52593; RV32XTHEADBS-NEXT:  .LBB86_2:2594; RV32XTHEADBS-NEXT:    mv a1, a32595; RV32XTHEADBS-NEXT:    ret2596  %1 = and i64 %a, 92233720368547758072597  %2 = icmp ne i64 %1, 02598  %3 = select i1 %2, i64 %b, i64 %c2599  ret i64 %32600}2601 2602define i64 @bit_64_1_z_select_i64(i64 %a, i64 %b, i64 %c) {2603; RV32-LABEL: bit_64_1_z_select_i64:2604; RV32:       # %bb.0:2605; RV32-NEXT:    or a1, a0, a12606; RV32-NEXT:    mv a0, a22607; RV32-NEXT:    beqz a1, .LBB87_22608; RV32-NEXT:  # %bb.1:2609; RV32-NEXT:    mv a0, a42610; RV32-NEXT:    mv a3, a52611; RV32-NEXT:  .LBB87_2:2612; RV32-NEXT:    mv a1, a32613; RV32-NEXT:    ret2614;2615; RV64-LABEL: bit_64_1_z_select_i64:2616; RV64:       # %bb.0:2617; RV64-NEXT:    beqz a0, .LBB87_22618; RV64-NEXT:  # %bb.1:2619; RV64-NEXT:    mv a1, a22620; RV64-NEXT:  .LBB87_2:2621; RV64-NEXT:    mv a0, a12622; RV64-NEXT:    ret2623  %1 = and i64 %a, 184467440737095516152624  %2 = icmp eq i64 %1, 02625  %3 = select i1 %2, i64 %b, i64 %c2626  ret i64 %32627}2628 2629define i64 @bit_64_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {2630; RV32-LABEL: bit_64_1_nz_select_i64:2631; RV32:       # %bb.0:2632; RV32-NEXT:    or a1, a0, a12633; RV32-NEXT:    mv a0, a22634; RV32-NEXT:    bnez a1, .LBB88_22635; RV32-NEXT:  # %bb.1:2636; RV32-NEXT:    mv a0, a42637; RV32-NEXT:    mv a3, a52638; RV32-NEXT:  .LBB88_2:2639; RV32-NEXT:    mv a1, a32640; RV32-NEXT:    ret2641;2642; RV64-LABEL: bit_64_1_nz_select_i64:2643; RV64:       # %bb.0:2644; RV64-NEXT:    bnez a0, .LBB88_22645; RV64-NEXT:  # %bb.1:2646; RV64-NEXT:    mv a1, a22647; RV64-NEXT:  .LBB88_2:2648; RV64-NEXT:    mv a0, a12649; RV64-NEXT:    ret2650  %1 = and i64 %a, 184467440737095516152651  %2 = icmp ne i64 %1, 02652  %3 = select i1 %2, i64 %b, i64 %c2653  ret i64 %32654}2655 2656define void @bit_10_1_z_branch_i32(i32 signext %0) {2657; CHECK-LABEL: bit_10_1_z_branch_i32:2658; CHECK:       # %bb.0:2659; CHECK-NEXT:    andi a0, a0, 10232660; CHECK-NEXT:    beqz a0, .LBB89_22661; CHECK-NEXT:  # %bb.1:2662; CHECK-NEXT:    ret2663; CHECK-NEXT:  .LBB89_2:2664; CHECK-NEXT:    tail bar2665  %2 = and i32 %0, 10232666  %3 = icmp eq i32 %2, 02667  br i1 %3, label %4, label %52668 26694:2670  tail call void @bar()2671  br label %52672 26735:2674  ret void2675}2676 2677define void @bit_10_1_nz_branch_i32(i32 signext %0) {2678; CHECK-LABEL: bit_10_1_nz_branch_i32:2679; CHECK:       # %bb.0:2680; CHECK-NEXT:    andi a0, a0, 10232681; CHECK-NEXT:    beqz a0, .LBB90_22682; CHECK-NEXT:  # %bb.1:2683; CHECK-NEXT:    tail bar2684; CHECK-NEXT:  .LBB90_2:2685; CHECK-NEXT:    ret2686  %2 = and i32 %0, 10232687  %3 = icmp ne i32 %2, 02688  br i1 %3, label %4, label %52689 26904:2691  tail call void @bar()2692  br label %52693 26945:2695  ret void2696}2697 2698define void @bit_11_1_z_branch_i32(i32 signext %0) {2699; CHECK-LABEL: bit_11_1_z_branch_i32:2700; CHECK:       # %bb.0:2701; CHECK-NEXT:    andi a0, a0, 20472702; CHECK-NEXT:    beqz a0, .LBB91_22703; CHECK-NEXT:  # %bb.1:2704; CHECK-NEXT:    ret2705; CHECK-NEXT:  .LBB91_2:2706; CHECK-NEXT:    tail bar2707  %2 = and i32 %0, 20472708  %3 = icmp eq i32 %2, 02709  br i1 %3, label %4, label %52710 27114:2712  tail call void @bar()2713  br label %52714 27155:2716  ret void2717}2718 2719define void @bit_11_1_nz_branch_i32(i32 signext %0) {2720; CHECK-LABEL: bit_11_1_nz_branch_i32:2721; CHECK:       # %bb.0:2722; CHECK-NEXT:    andi a0, a0, 20472723; CHECK-NEXT:    beqz a0, .LBB92_22724; CHECK-NEXT:  # %bb.1:2725; CHECK-NEXT:    tail bar2726; CHECK-NEXT:  .LBB92_2:2727; CHECK-NEXT:    ret2728  %2 = and i32 %0, 20472729  %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_16_1_z_branch_i32(i32 signext %0) {2741; RV32-LABEL: bit_16_1_z_branch_i32:2742; RV32:       # %bb.0:2743; RV32-NEXT:    slli a0, a0, 162744; RV32-NEXT:    beqz a0, .LBB93_22745; RV32-NEXT:  # %bb.1:2746; RV32-NEXT:    ret2747; RV32-NEXT:  .LBB93_2:2748; RV32-NEXT:    tail bar2749;2750; RV64-LABEL: bit_16_1_z_branch_i32:2751; RV64:       # %bb.0:2752; RV64-NEXT:    slli a0, a0, 482753; RV64-NEXT:    beqz a0, .LBB93_22754; RV64-NEXT:  # %bb.1:2755; RV64-NEXT:    ret2756; RV64-NEXT:  .LBB93_2:2757; RV64-NEXT:    tail bar2758  %2 = and i32 %0, 655352759  %3 = icmp eq i32 %2, 02760  br i1 %3, label %4, label %52761 27624:2763  tail call void @bar()2764  br label %52765 27665:2767  ret void2768}2769 2770define void @bit_16_1_nz_branch_i32(i32 signext %0) {2771; RV32-LABEL: bit_16_1_nz_branch_i32:2772; RV32:       # %bb.0:2773; RV32-NEXT:    slli a0, a0, 162774; RV32-NEXT:    beqz a0, .LBB94_22775; RV32-NEXT:  # %bb.1:2776; RV32-NEXT:    tail bar2777; RV32-NEXT:  .LBB94_2:2778; RV32-NEXT:    ret2779;2780; RV64-LABEL: bit_16_1_nz_branch_i32:2781; RV64:       # %bb.0:2782; RV64-NEXT:    slli a0, a0, 482783; RV64-NEXT:    beqz a0, .LBB94_22784; RV64-NEXT:  # %bb.1:2785; RV64-NEXT:    tail bar2786; RV64-NEXT:  .LBB94_2:2787; RV64-NEXT:    ret2788  %2 = and i32 %0, 655352789  %3 = icmp ne i32 %2, 02790  br i1 %3, label %4, label %52791 27924:2793  tail call void @bar()2794  br label %52795 27965:2797  ret void2798}2799 2800define void @bit_24_1_z_branch_i32(i32 signext %0) {2801; RV32-LABEL: bit_24_1_z_branch_i32:2802; RV32:       # %bb.0:2803; RV32-NEXT:    slli a0, a0, 82804; RV32-NEXT:    beqz a0, .LBB95_22805; RV32-NEXT:  # %bb.1:2806; RV32-NEXT:    ret2807; RV32-NEXT:  .LBB95_2:2808; RV32-NEXT:    tail bar2809;2810; RV64-LABEL: bit_24_1_z_branch_i32:2811; RV64:       # %bb.0:2812; RV64-NEXT:    slli a0, a0, 402813; RV64-NEXT:    beqz a0, .LBB95_22814; RV64-NEXT:  # %bb.1:2815; RV64-NEXT:    ret2816; RV64-NEXT:  .LBB95_2:2817; RV64-NEXT:    tail bar2818  %2 = and i32 %0, 167772152819  %3 = icmp eq i32 %2, 02820  br i1 %3, label %4, label %52821 28224:2823  tail call void @bar()2824  br label %52825 28265:2827  ret void2828}2829 2830define void @bit_24_1_nz_branch_i32(i32 signext %0) {2831; RV32-LABEL: bit_24_1_nz_branch_i32:2832; RV32:       # %bb.0:2833; RV32-NEXT:    slli a0, a0, 82834; RV32-NEXT:    beqz a0, .LBB96_22835; RV32-NEXT:  # %bb.1:2836; RV32-NEXT:    tail bar2837; RV32-NEXT:  .LBB96_2:2838; RV32-NEXT:    ret2839;2840; RV64-LABEL: bit_24_1_nz_branch_i32:2841; RV64:       # %bb.0:2842; RV64-NEXT:    slli a0, a0, 402843; RV64-NEXT:    beqz a0, .LBB96_22844; RV64-NEXT:  # %bb.1:2845; RV64-NEXT:    tail bar2846; RV64-NEXT:  .LBB96_2:2847; RV64-NEXT:    ret2848  %2 = and i32 %0, 167772152849  %3 = icmp ne i32 %2, 02850  br i1 %3, label %4, label %52851 28524:2853  tail call void @bar()2854  br label %52855 28565:2857  ret void2858}2859 2860define void @bit_31_1_z_branch_i32(i32 signext %0) {2861; RV32-LABEL: bit_31_1_z_branch_i32:2862; RV32:       # %bb.0:2863; RV32-NEXT:    slli a0, a0, 12864; RV32-NEXT:    beqz a0, .LBB97_22865; RV32-NEXT:  # %bb.1:2866; RV32-NEXT:    ret2867; RV32-NEXT:  .LBB97_2:2868; RV32-NEXT:    tail bar2869;2870; RV64-LABEL: bit_31_1_z_branch_i32:2871; RV64:       # %bb.0:2872; RV64-NEXT:    slli a0, a0, 332873; RV64-NEXT:    beqz a0, .LBB97_22874; RV64-NEXT:  # %bb.1:2875; RV64-NEXT:    ret2876; RV64-NEXT:  .LBB97_2:2877; RV64-NEXT:    tail bar2878  %2 = and i32 %0, 21474836472879  %3 = icmp eq i32 %2, 02880  br i1 %3, label %4, label %52881 28824:2883  tail call void @bar()2884  br label %52885 28865:2887  ret void2888}2889 2890define void @bit_31_1_nz_branch_i32(i32 signext %0) {2891; RV32-LABEL: bit_31_1_nz_branch_i32:2892; RV32:       # %bb.0:2893; RV32-NEXT:    slli a0, a0, 12894; RV32-NEXT:    beqz a0, .LBB98_22895; RV32-NEXT:  # %bb.1:2896; RV32-NEXT:    tail bar2897; RV32-NEXT:  .LBB98_2:2898; RV32-NEXT:    ret2899;2900; RV64-LABEL: bit_31_1_nz_branch_i32:2901; RV64:       # %bb.0:2902; RV64-NEXT:    slli a0, a0, 332903; RV64-NEXT:    beqz a0, .LBB98_22904; RV64-NEXT:  # %bb.1:2905; RV64-NEXT:    tail bar2906; RV64-NEXT:  .LBB98_2:2907; RV64-NEXT:    ret2908  %2 = and i32 %0, 21474836472909  %3 = icmp ne i32 %2, 02910  br i1 %3, label %4, label %52911 29124:2913  tail call void @bar()2914  br label %52915 29165:2917  ret void2918}2919 2920define void @bit_32_1_z_branch_i32(i32 signext %0) {2921; CHECK-LABEL: bit_32_1_z_branch_i32:2922; CHECK:       # %bb.0:2923; CHECK-NEXT:    beqz a0, .LBB99_22924; CHECK-NEXT:  # %bb.1:2925; CHECK-NEXT:    ret2926; CHECK-NEXT:  .LBB99_2:2927; CHECK-NEXT:    tail bar2928  %2 = and i32 %0, 42949672952929  %3 = icmp eq i32 %2, 02930  br i1 %3, label %4, label %52931 29324:2933  tail call void @bar()2934  br label %52935 29365:2937  ret void2938}2939 2940define void @bit_32_1_nz_branch_i32(i32 signext %0) {2941; CHECK-LABEL: bit_32_1_nz_branch_i32:2942; CHECK:       # %bb.0:2943; CHECK-NEXT:    beqz a0, .LBB100_22944; CHECK-NEXT:  # %bb.1:2945; CHECK-NEXT:    tail bar2946; CHECK-NEXT:  .LBB100_2:2947; CHECK-NEXT:    ret2948  %2 = and i32 %0, 42949672952949  %3 = icmp ne i32 %2, 02950  br i1 %3, label %4, label %52951 29524:2953  tail call void @bar()2954  br label %52955 29565:2957  ret void2958}2959 2960 2961define void @bit_10_1_z_branch_i64(i64 %0) {2962; CHECK-LABEL: bit_10_1_z_branch_i64:2963; CHECK:       # %bb.0:2964; CHECK-NEXT:    andi a0, a0, 10232965; CHECK-NEXT:    beqz a0, .LBB101_22966; CHECK-NEXT:  # %bb.1:2967; CHECK-NEXT:    ret2968; CHECK-NEXT:  .LBB101_2:2969; CHECK-NEXT:    tail bar2970  %2 = and i64 %0, 10232971  %3 = icmp eq i64 %2, 02972  br i1 %3, label %4, label %52973 29744:2975  tail call void @bar()2976  br label %52977 29785:2979  ret void2980}2981 2982define void @bit_10_1_nz_branch_i64(i64 %0) {2983; CHECK-LABEL: bit_10_1_nz_branch_i64:2984; CHECK:       # %bb.0:2985; CHECK-NEXT:    andi a0, a0, 10232986; CHECK-NEXT:    beqz a0, .LBB102_22987; CHECK-NEXT:  # %bb.1:2988; CHECK-NEXT:    tail bar2989; CHECK-NEXT:  .LBB102_2:2990; CHECK-NEXT:    ret2991  %2 = and i64 %0, 10232992  %3 = icmp ne i64 %2, 02993  br i1 %3, label %4, label %52994 29954:2996  tail call void @bar()2997  br label %52998 29995:3000  ret void3001}3002 3003define void @bit_11_1_z_branch_i64(i64 %0) {3004; CHECK-LABEL: bit_11_1_z_branch_i64:3005; CHECK:       # %bb.0:3006; CHECK-NEXT:    andi a0, a0, 20473007; CHECK-NEXT:    beqz a0, .LBB103_23008; CHECK-NEXT:  # %bb.1:3009; CHECK-NEXT:    ret3010; CHECK-NEXT:  .LBB103_2:3011; CHECK-NEXT:    tail bar3012  %2 = and i64 %0, 20473013  %3 = icmp eq i64 %2, 03014  br i1 %3, label %4, label %53015 30164:3017  tail call void @bar()3018  br label %53019 30205:3021  ret void3022}3023 3024define void @bit_11_1_nz_branch_i64(i64 %0) {3025; CHECK-LABEL: bit_11_1_nz_branch_i64:3026; CHECK:       # %bb.0:3027; CHECK-NEXT:    andi a0, a0, 20473028; CHECK-NEXT:    beqz a0, .LBB104_23029; CHECK-NEXT:  # %bb.1:3030; CHECK-NEXT:    tail bar3031; CHECK-NEXT:  .LBB104_2:3032; CHECK-NEXT:    ret3033  %2 = and i64 %0, 20473034  %3 = icmp ne i64 %2, 03035  br i1 %3, label %4, label %53036 30374:3038  tail call void @bar()3039  br label %53040 30415:3042  ret void3043}3044 3045define void @bit_16_1_z_branch_i64(i64 %0) {3046; RV32-LABEL: bit_16_1_z_branch_i64:3047; RV32:       # %bb.0:3048; RV32-NEXT:    slli a0, a0, 163049; RV32-NEXT:    beqz a0, .LBB105_23050; RV32-NEXT:  # %bb.1:3051; RV32-NEXT:    ret3052; RV32-NEXT:  .LBB105_2:3053; RV32-NEXT:    tail bar3054;3055; RV64-LABEL: bit_16_1_z_branch_i64:3056; RV64:       # %bb.0:3057; RV64-NEXT:    slli a0, a0, 483058; RV64-NEXT:    beqz a0, .LBB105_23059; RV64-NEXT:  # %bb.1:3060; RV64-NEXT:    ret3061; RV64-NEXT:  .LBB105_2:3062; RV64-NEXT:    tail bar3063  %2 = and i64 %0, 655353064  %3 = icmp eq i64 %2, 03065  br i1 %3, label %4, label %53066 30674:3068  tail call void @bar()3069  br label %53070 30715:3072  ret void3073}3074 3075define void @bit_16_1_nz_branch_i64(i64 %0) {3076; RV32-LABEL: bit_16_1_nz_branch_i64:3077; RV32:       # %bb.0:3078; RV32-NEXT:    slli a0, a0, 163079; RV32-NEXT:    beqz a0, .LBB106_23080; RV32-NEXT:  # %bb.1:3081; RV32-NEXT:    tail bar3082; RV32-NEXT:  .LBB106_2:3083; RV32-NEXT:    ret3084;3085; RV64-LABEL: bit_16_1_nz_branch_i64:3086; RV64:       # %bb.0:3087; RV64-NEXT:    slli a0, a0, 483088; RV64-NEXT:    beqz a0, .LBB106_23089; RV64-NEXT:  # %bb.1:3090; RV64-NEXT:    tail bar3091; RV64-NEXT:  .LBB106_2:3092; RV64-NEXT:    ret3093  %2 = and i64 %0, 655353094  %3 = icmp ne i64 %2, 03095  br i1 %3, label %4, label %53096 30974:3098  tail call void @bar()3099  br label %53100 31015:3102  ret void3103}3104 3105define void @bit_24_1_z_branch_i64(i64 %0) {3106; RV32-LABEL: bit_24_1_z_branch_i64:3107; RV32:       # %bb.0:3108; RV32-NEXT:    slli a0, a0, 83109; RV32-NEXT:    beqz a0, .LBB107_23110; RV32-NEXT:  # %bb.1:3111; RV32-NEXT:    ret3112; RV32-NEXT:  .LBB107_2:3113; RV32-NEXT:    tail bar3114;3115; RV64-LABEL: bit_24_1_z_branch_i64:3116; RV64:       # %bb.0:3117; RV64-NEXT:    slli a0, a0, 403118; RV64-NEXT:    beqz a0, .LBB107_23119; RV64-NEXT:  # %bb.1:3120; RV64-NEXT:    ret3121; RV64-NEXT:  .LBB107_2:3122; RV64-NEXT:    tail bar3123  %2 = and i64 %0, 167772153124  %3 = icmp eq i64 %2, 03125  br i1 %3, label %4, label %53126 31274:3128  tail call void @bar()3129  br label %53130 31315:3132  ret void3133}3134 3135define void @bit_24_1_nz_branch_i64(i64 %0) {3136; RV32-LABEL: bit_24_1_nz_branch_i64:3137; RV32:       # %bb.0:3138; RV32-NEXT:    slli a0, a0, 83139; RV32-NEXT:    beqz a0, .LBB108_23140; RV32-NEXT:  # %bb.1:3141; RV32-NEXT:    tail bar3142; RV32-NEXT:  .LBB108_2:3143; RV32-NEXT:    ret3144;3145; RV64-LABEL: bit_24_1_nz_branch_i64:3146; RV64:       # %bb.0:3147; RV64-NEXT:    slli a0, a0, 403148; RV64-NEXT:    beqz a0, .LBB108_23149; RV64-NEXT:  # %bb.1:3150; RV64-NEXT:    tail bar3151; RV64-NEXT:  .LBB108_2:3152; RV64-NEXT:    ret3153  %2 = and i64 %0, 167772153154  %3 = icmp ne i64 %2, 03155  br i1 %3, label %4, label %53156 31574:3158  tail call void @bar()3159  br label %53160 31615:3162  ret void3163}3164 3165define void @bit_31_1_z_branch_i64(i64 %0) {3166; RV32-LABEL: bit_31_1_z_branch_i64:3167; RV32:       # %bb.0:3168; RV32-NEXT:    slli a0, a0, 13169; RV32-NEXT:    beqz a0, .LBB109_23170; RV32-NEXT:  # %bb.1:3171; RV32-NEXT:    ret3172; RV32-NEXT:  .LBB109_2:3173; RV32-NEXT:    tail bar3174;3175; RV64-LABEL: bit_31_1_z_branch_i64:3176; RV64:       # %bb.0:3177; RV64-NEXT:    slli a0, a0, 333178; RV64-NEXT:    beqz a0, .LBB109_23179; RV64-NEXT:  # %bb.1:3180; RV64-NEXT:    ret3181; RV64-NEXT:  .LBB109_2:3182; RV64-NEXT:    tail bar3183  %2 = and i64 %0, 21474836473184  %3 = icmp eq i64 %2, 03185  br i1 %3, label %4, label %53186 31874:3188  tail call void @bar()3189  br label %53190 31915:3192  ret void3193}3194 3195define void @bit_31_1_nz_branch_i64(i64 %0) {3196; RV32-LABEL: bit_31_1_nz_branch_i64:3197; RV32:       # %bb.0:3198; RV32-NEXT:    slli a0, a0, 13199; RV32-NEXT:    beqz a0, .LBB110_23200; RV32-NEXT:  # %bb.1:3201; RV32-NEXT:    tail bar3202; RV32-NEXT:  .LBB110_2:3203; RV32-NEXT:    ret3204;3205; RV64-LABEL: bit_31_1_nz_branch_i64:3206; RV64:       # %bb.0:3207; RV64-NEXT:    slli a0, a0, 333208; RV64-NEXT:    beqz a0, .LBB110_23209; RV64-NEXT:  # %bb.1:3210; RV64-NEXT:    tail bar3211; RV64-NEXT:  .LBB110_2:3212; RV64-NEXT:    ret3213  %2 = and i64 %0, 21474836473214  %3 = icmp ne i64 %2, 03215  br i1 %3, label %4, label %53216 32174:3218  tail call void @bar()3219  br label %53220 32215:3222  ret void3223}3224 3225define void @bit_32_1_z_branch_i64(i64 %0) {3226; RV32-LABEL: bit_32_1_z_branch_i64:3227; RV32:       # %bb.0:3228; RV32-NEXT:    beqz a0, .LBB111_23229; RV32-NEXT:  # %bb.1:3230; RV32-NEXT:    ret3231; RV32-NEXT:  .LBB111_2:3232; RV32-NEXT:    tail bar3233;3234; RV64-LABEL: bit_32_1_z_branch_i64:3235; RV64:       # %bb.0:3236; RV64-NEXT:    sext.w a0, a03237; RV64-NEXT:    beqz a0, .LBB111_23238; RV64-NEXT:  # %bb.1:3239; RV64-NEXT:    ret3240; RV64-NEXT:  .LBB111_2:3241; RV64-NEXT:    tail bar3242  %2 = and i64 %0, 42949672953243  %3 = icmp eq i64 %2, 03244  br i1 %3, label %4, label %53245 32464:3247  tail call void @bar()3248  br label %53249 32505:3251  ret void3252}3253 3254define void @bit_32_1_nz_branch_i64(i64 %0) {3255; RV32-LABEL: bit_32_1_nz_branch_i64:3256; RV32:       # %bb.0:3257; RV32-NEXT:    beqz a0, .LBB112_23258; RV32-NEXT:  # %bb.1:3259; RV32-NEXT:    tail bar3260; RV32-NEXT:  .LBB112_2:3261; RV32-NEXT:    ret3262;3263; RV64-LABEL: bit_32_1_nz_branch_i64:3264; RV64:       # %bb.0:3265; RV64-NEXT:    sext.w a0, a03266; RV64-NEXT:    beqz a0, .LBB112_23267; RV64-NEXT:  # %bb.1:3268; RV64-NEXT:    tail bar3269; RV64-NEXT:  .LBB112_2:3270; RV64-NEXT:    ret3271  %2 = and i64 %0, 42949672953272  %3 = icmp ne i64 %2, 03273  br i1 %3, label %4, label %53274 32754:3276  tail call void @bar()3277  br label %53278 32795:3280  ret void3281}3282 3283define void @bit_62_1_z_branch_i64(i64 %0) {3284; RV32-LABEL: bit_62_1_z_branch_i64:3285; RV32:       # %bb.0:3286; RV32-NEXT:    slli a1, a1, 23287; RV32-NEXT:    srli a1, a1, 23288; RV32-NEXT:    or a0, a0, a13289; RV32-NEXT:    beqz a0, .LBB113_23290; RV32-NEXT:  # %bb.1:3291; RV32-NEXT:    ret3292; RV32-NEXT:  .LBB113_2:3293; RV32-NEXT:    tail bar3294;3295; RV64-LABEL: bit_62_1_z_branch_i64:3296; RV64:       # %bb.0:3297; RV64-NEXT:    slli a0, a0, 23298; RV64-NEXT:    beqz a0, .LBB113_23299; RV64-NEXT:  # %bb.1:3300; RV64-NEXT:    ret3301; RV64-NEXT:  .LBB113_2:3302; RV64-NEXT:    tail bar3303  %2 = and i64 %0, 46116860184273879033304  %3 = icmp eq i64 %2, 03305  br i1 %3, label %4, label %53306 33074:3308  tail call void @bar()3309  br label %53310 33115:3312  ret void3313}3314 3315define void @bit_62_1_nz_branch_i64(i64 %0) {3316; RV32-LABEL: bit_62_1_nz_branch_i64:3317; RV32:       # %bb.0:3318; RV32-NEXT:    slli a1, a1, 23319; RV32-NEXT:    srli a1, a1, 23320; RV32-NEXT:    or a0, a0, a13321; RV32-NEXT:    beqz a0, .LBB114_23322; RV32-NEXT:  # %bb.1:3323; RV32-NEXT:    tail bar3324; RV32-NEXT:  .LBB114_2:3325; RV32-NEXT:    ret3326;3327; RV64-LABEL: bit_62_1_nz_branch_i64:3328; RV64:       # %bb.0:3329; RV64-NEXT:    slli a0, a0, 23330; RV64-NEXT:    beqz a0, .LBB114_23331; RV64-NEXT:  # %bb.1:3332; RV64-NEXT:    tail bar3333; RV64-NEXT:  .LBB114_2:3334; RV64-NEXT:    ret3335  %2 = and i64 %0, 46116860184273879033336  %3 = icmp ne i64 %2, 03337  br i1 %3, label %4, label %53338 33394:3340  tail call void @bar()3341  br label %53342 33435:3344  ret void3345}3346 3347define void @bit_63_1_z_branch_i64(i64 %0) {3348; RV32I-LABEL: bit_63_1_z_branch_i64:3349; RV32I:       # %bb.0:3350; RV32I-NEXT:    slli a1, a1, 13351; RV32I-NEXT:    srli a1, a1, 13352; RV32I-NEXT:    or a0, a0, a13353; RV32I-NEXT:    beqz a0, .LBB115_23354; RV32I-NEXT:  # %bb.1:3355; RV32I-NEXT:    ret3356; RV32I-NEXT:  .LBB115_2:3357; RV32I-NEXT:    tail bar3358;3359; RV64-LABEL: bit_63_1_z_branch_i64:3360; RV64:       # %bb.0:3361; RV64-NEXT:    slli a0, a0, 13362; RV64-NEXT:    beqz a0, .LBB115_23363; RV64-NEXT:  # %bb.1:3364; RV64-NEXT:    ret3365; RV64-NEXT:  .LBB115_2:3366; RV64-NEXT:    tail bar3367;3368; RV32ZBS-LABEL: bit_63_1_z_branch_i64:3369; RV32ZBS:       # %bb.0:3370; RV32ZBS-NEXT:    bclri a1, a1, 313371; RV32ZBS-NEXT:    or a0, a0, a13372; RV32ZBS-NEXT:    beqz a0, .LBB115_23373; RV32ZBS-NEXT:  # %bb.1:3374; RV32ZBS-NEXT:    ret3375; RV32ZBS-NEXT:  .LBB115_2:3376; RV32ZBS-NEXT:    tail bar3377;3378; RV32XTHEADBS-LABEL: bit_63_1_z_branch_i64:3379; RV32XTHEADBS:       # %bb.0:3380; RV32XTHEADBS-NEXT:    slli a1, a1, 13381; RV32XTHEADBS-NEXT:    srli a1, a1, 13382; RV32XTHEADBS-NEXT:    or a0, a0, a13383; RV32XTHEADBS-NEXT:    beqz a0, .LBB115_23384; RV32XTHEADBS-NEXT:  # %bb.1:3385; RV32XTHEADBS-NEXT:    ret3386; RV32XTHEADBS-NEXT:  .LBB115_2:3387; RV32XTHEADBS-NEXT:    tail bar3388  %2 = and i64 %0, 92233720368547758073389  %3 = icmp eq i64 %2, 03390  br i1 %3, label %4, label %53391 33924:3393  tail call void @bar()3394  br label %53395 33965:3397  ret void3398}3399 3400define void @bit_63_1_nz_branch_i64(i64 %0) {3401; RV32I-LABEL: bit_63_1_nz_branch_i64:3402; RV32I:       # %bb.0:3403; RV32I-NEXT:    slli a1, a1, 13404; RV32I-NEXT:    srli a1, a1, 13405; RV32I-NEXT:    or a0, a0, a13406; RV32I-NEXT:    beqz a0, .LBB116_23407; RV32I-NEXT:  # %bb.1:3408; RV32I-NEXT:    tail bar3409; RV32I-NEXT:  .LBB116_2:3410; RV32I-NEXT:    ret3411;3412; RV64-LABEL: bit_63_1_nz_branch_i64:3413; RV64:       # %bb.0:3414; RV64-NEXT:    slli a0, a0, 13415; RV64-NEXT:    beqz a0, .LBB116_23416; RV64-NEXT:  # %bb.1:3417; RV64-NEXT:    tail bar3418; RV64-NEXT:  .LBB116_2:3419; RV64-NEXT:    ret3420;3421; RV32ZBS-LABEL: bit_63_1_nz_branch_i64:3422; RV32ZBS:       # %bb.0:3423; RV32ZBS-NEXT:    bclri a1, a1, 313424; RV32ZBS-NEXT:    or a0, a0, a13425; RV32ZBS-NEXT:    beqz a0, .LBB116_23426; RV32ZBS-NEXT:  # %bb.1:3427; RV32ZBS-NEXT:    tail bar3428; RV32ZBS-NEXT:  .LBB116_2:3429; RV32ZBS-NEXT:    ret3430;3431; RV32XTHEADBS-LABEL: bit_63_1_nz_branch_i64:3432; RV32XTHEADBS:       # %bb.0:3433; RV32XTHEADBS-NEXT:    slli a1, a1, 13434; RV32XTHEADBS-NEXT:    srli a1, a1, 13435; RV32XTHEADBS-NEXT:    or a0, a0, a13436; RV32XTHEADBS-NEXT:    beqz a0, .LBB116_23437; RV32XTHEADBS-NEXT:  # %bb.1:3438; RV32XTHEADBS-NEXT:    tail bar3439; RV32XTHEADBS-NEXT:  .LBB116_2:3440; RV32XTHEADBS-NEXT:    ret3441  %2 = and i64 %0, 92233720368547758073442  %3 = icmp ne i64 %2, 03443  br i1 %3, label %4, label %53444 34454:3446  tail call void @bar()3447  br label %53448 34495:3450  ret void3451}3452 3453define void @bit_64_1_z_branch_i64(i64 %0) {3454; RV32-LABEL: bit_64_1_z_branch_i64:3455; RV32:       # %bb.0:3456; RV32-NEXT:    or a0, a0, a13457; RV32-NEXT:    beqz a0, .LBB117_23458; RV32-NEXT:  # %bb.1:3459; RV32-NEXT:    ret3460; RV32-NEXT:  .LBB117_2:3461; RV32-NEXT:    tail bar3462;3463; RV64-LABEL: bit_64_1_z_branch_i64:3464; RV64:       # %bb.0:3465; RV64-NEXT:    beqz a0, .LBB117_23466; RV64-NEXT:  # %bb.1:3467; RV64-NEXT:    ret3468; RV64-NEXT:  .LBB117_2:3469; RV64-NEXT:    tail bar3470  %2 = and i64 %0, 184467440737095516153471  %3 = icmp eq i64 %2, 03472  br i1 %3, label %4, label %53473 34744:3475  tail call void @bar()3476  br label %53477 34785:3479  ret void3480}3481 3482define void @bit_64_1_nz_branch_i64(i64 %0) {3483; RV32-LABEL: bit_64_1_nz_branch_i64:3484; RV32:       # %bb.0:3485; RV32-NEXT:    or a0, a0, a13486; RV32-NEXT:    beqz a0, .LBB118_23487; RV32-NEXT:  # %bb.1:3488; RV32-NEXT:    tail bar3489; RV32-NEXT:  .LBB118_2:3490; RV32-NEXT:    ret3491;3492; RV64-LABEL: bit_64_1_nz_branch_i64:3493; RV64:       # %bb.0:3494; RV64-NEXT:    beqz a0, .LBB118_23495; RV64-NEXT:  # %bb.1:3496; RV64-NEXT:    tail bar3497; RV64-NEXT:  .LBB118_2:3498; RV64-NEXT:    ret3499  %2 = and i64 %0, 184467440737095516153500  %3 = icmp ne i64 %2, 03501  br i1 %3, label %4, label %53502 35034:3504  tail call void @bar()3505  br label %53506 35075:3508  ret void3509}3510 3511define i32 @bittest_31_andeq0_i64(i64 %x) {3512; RV32-LABEL: bittest_31_andeq0_i64:3513; RV32:       # %bb.0:3514; RV32-NEXT:    srli a0, a0, 313515; RV32-NEXT:    seqz a0, a03516; RV32-NEXT:    ret3517;3518; RV64-LABEL: bittest_31_andeq0_i64:3519; RV64:       # %bb.0:3520; RV64-NEXT:    sraiw a0, a0, 313521; RV64-NEXT:    seqz a0, a03522; RV64-NEXT:    ret3523  %and = and i64 %x, 21474836483524  %cmp = icmp eq i64 %and, 03525  %conv = zext i1 %cmp to i323526  ret i32 %conv3527}3528 3529define i32 @bittest_63_andeq0_i64(i64 %x) {3530; RV32-LABEL: bittest_63_andeq0_i64:3531; RV32:       # %bb.0:3532; RV32-NEXT:    srli a1, a1, 313533; RV32-NEXT:    seqz a0, a13534; RV32-NEXT:    ret3535;3536; RV64-LABEL: bittest_63_andeq0_i64:3537; RV64:       # %bb.0:3538; RV64-NEXT:    srli a0, a0, 633539; RV64-NEXT:    seqz a0, a03540; RV64-NEXT:    ret3541  %and = and i64 %x, 92233720368547758083542  %cmp = icmp eq i64 %and, 03543  %conv = zext i1 %cmp to i323544  ret i32 %conv3545}3546 3547define i32 @bittest_31_slt0_i32(i32 %x, i1 %y) {3548; RV32-LABEL: bittest_31_slt0_i32:3549; RV32:       # %bb.0:3550; RV32-NEXT:    srli a0, a0, 313551; RV32-NEXT:    and a0, a0, a13552; RV32-NEXT:    ret3553;3554; RV64-LABEL: bittest_31_slt0_i32:3555; RV64:       # %bb.0:3556; RV64-NEXT:    srliw a0, a0, 313557; RV64-NEXT:    and a0, a0, a13558; RV64-NEXT:    ret3559  %cmp = icmp slt i32 %x, 03560  %and = and i1 %cmp, %y3561  %ext = zext i1 %and to i323562  ret i32 %ext3563}3564 3565define i32 @bittest_63_slt0_i64(i32 %x, i1 %y) {3566; RV32-LABEL: bittest_63_slt0_i64:3567; RV32:       # %bb.0:3568; RV32-NEXT:    srai a0, a0, 313569; RV32-NEXT:    srli a0, a0, 313570; RV32-NEXT:    and a0, a0, a13571; RV32-NEXT:    ret3572;3573; RV64-LABEL: bittest_63_slt0_i64:3574; RV64:       # %bb.0:3575; RV64-NEXT:    srliw a0, a0, 313576; RV64-NEXT:    and a0, a0, a13577; RV64-NEXT:    ret3578  %ext = sext i32 %x to i643579  %cmp = icmp slt i64 %ext, 03580  %and = and i1 %cmp, %y3581  %cond = zext i1 %and to i323582  ret i32 %cond3583}3584