brintos

brintos / llvm-project-archived public Read only

0
0
Text · 74.0 KiB · dc625e2 Raw
2388 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -mattr=+c,+zbb -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=NOSFB %s4; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -mattr=+zbb -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefixes=RV64SFB,RV64SFBSIFIVEU74 %s6; RUN: llc -mtriple=riscv64 -mcpu=andes-ax45 -mattr=+zbb -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefixes=RV64SFB,RV64SFBANDESAX45 %s8; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -mattr=+zicond,+zbb \9; RUN:   -verify-machineinstrs < %s | FileCheck -check-prefixes=ZICOND %s10; RUN: llc -mtriple=riscv32 -mcpu=sifive-e76 -mattr=+zbb -verify-machineinstrs < %s \11; RUN:   | FileCheck -check-prefixes=RV32SFB %s12 13; The sifive-7-series can predicate a mv.14 15define signext i32 @test1(i32 signext %x, i32 signext %y, i32 signext %z) {16; NOSFB-LABEL: test1:17; NOSFB:       # %bb.0:18; NOSFB-NEXT:    beqz a2, .LBB0_219; NOSFB-NEXT:  # %bb.1:20; NOSFB-NEXT:    mv a0, a121; NOSFB-NEXT:  .LBB0_2:22; NOSFB-NEXT:    ret23;24; RV64SFBSIFIVEU74-LABEL: test1:25; RV64SFBSIFIVEU74:       # %bb.0:26; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB0_227; RV64SFBSIFIVEU74-NEXT:  # %bb.1:28; RV64SFBSIFIVEU74-NEXT:    mv a0, a129; RV64SFBSIFIVEU74-NEXT:  .LBB0_2:30; RV64SFBSIFIVEU74-NEXT:    ret31;32; RV64SFBANDESAX45-LABEL: test1:33; RV64SFBANDESAX45:       # %bb.0:34; RV64SFBANDESAX45-NEXT:    nds.beqc a2, 0, .LBB0_235; RV64SFBANDESAX45-NEXT:  # %bb.1:36; RV64SFBANDESAX45-NEXT:    mv a0, a137; RV64SFBANDESAX45-NEXT:  .LBB0_2:38; RV64SFBANDESAX45-NEXT:    ret39;40; ZICOND-LABEL: test1:41; ZICOND:       # %bb.0:42; ZICOND-NEXT:    beqz a2, .LBB0_243; ZICOND-NEXT:  # %bb.1:44; ZICOND-NEXT:    mv a0, a145; ZICOND-NEXT:  .LBB0_2:46; ZICOND-NEXT:    ret47;48; RV32SFB-LABEL: test1:49; RV32SFB:       # %bb.0:50; RV32SFB-NEXT:    beqz a2, .LBB0_251; RV32SFB-NEXT:  # %bb.1:52; RV32SFB-NEXT:    mv a0, a153; RV32SFB-NEXT:  .LBB0_2:54; RV32SFB-NEXT:    ret55  %c = icmp eq i32 %z, 056  %b = select i1 %c, i32 %x, i32 %y57  ret i32 %b58}59 60; Same as above with select operands swapped.61define signext i32 @test2(i32 signext %x, i32 signext %y, i32 signext %z) {62; NOSFB-LABEL: test2:63; NOSFB:       # %bb.0:64; NOSFB-NEXT:    beqz a2, .LBB1_265; NOSFB-NEXT:  # %bb.1:66; NOSFB-NEXT:    mv a1, a067; NOSFB-NEXT:  .LBB1_2:68; NOSFB-NEXT:    mv a0, a169; NOSFB-NEXT:    ret70;71; RV64SFBSIFIVEU74-LABEL: test2:72; RV64SFBSIFIVEU74:       # %bb.0:73; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB1_274; RV64SFBSIFIVEU74-NEXT:  # %bb.1:75; RV64SFBSIFIVEU74-NEXT:    mv a0, a176; RV64SFBSIFIVEU74-NEXT:  .LBB1_2:77; RV64SFBSIFIVEU74-NEXT:    ret78;79; RV64SFBANDESAX45-LABEL: test2:80; RV64SFBANDESAX45:       # %bb.0:81; RV64SFBANDESAX45-NEXT:    nds.beqc a2, 0, .LBB1_282; RV64SFBANDESAX45-NEXT:  # %bb.1:83; RV64SFBANDESAX45-NEXT:    mv a1, a084; RV64SFBANDESAX45-NEXT:  .LBB1_2:85; RV64SFBANDESAX45-NEXT:    mv a0, a186; RV64SFBANDESAX45-NEXT:    ret87;88; ZICOND-LABEL: test2:89; ZICOND:       # %bb.0:90; ZICOND-NEXT:    bnez a2, .LBB1_291; ZICOND-NEXT:  # %bb.1:92; ZICOND-NEXT:    mv a0, a193; ZICOND-NEXT:  .LBB1_2:94; ZICOND-NEXT:    ret95;96; RV32SFB-LABEL: test2:97; RV32SFB:       # %bb.0:98; RV32SFB-NEXT:    bnez a2, .LBB1_299; RV32SFB-NEXT:  # %bb.1:100; RV32SFB-NEXT:    mv a0, a1101; RV32SFB-NEXT:  .LBB1_2:102; RV32SFB-NEXT:    ret103  %c = icmp eq i32 %z, 0104  %b = select i1 %c, i32 %y, i32 %x105  ret i32 %b106}107 108; Make sure we don't share the same basic block for two selects with the same109; condition this would break the predication.110define signext i32 @test3(i32 signext %v, i32 signext %w, i32 signext %x, i32 signext %y, i32 signext %z) {111; NOSFB-LABEL: test3:112; NOSFB:       # %bb.0:113; NOSFB-NEXT:    beqz a4, .LBB2_2114; NOSFB-NEXT:  # %bb.1:115; NOSFB-NEXT:    mv a1, a0116; NOSFB-NEXT:    mv a2, a3117; NOSFB-NEXT:  .LBB2_2:118; NOSFB-NEXT:    addw a0, a1, a2119; NOSFB-NEXT:    ret120;121; RV64SFBSIFIVEU74-LABEL: test3:122; RV64SFBSIFIVEU74:       # %bb.0:123; RV64SFBSIFIVEU74-NEXT:    beqz a4, .LBB2_2124; RV64SFBSIFIVEU74-NEXT:  # %bb.1:125; RV64SFBSIFIVEU74-NEXT:    mv a2, a3126; RV64SFBSIFIVEU74-NEXT:  .LBB2_2:127; RV64SFBSIFIVEU74-NEXT:    bnez a4, .LBB2_4128; RV64SFBSIFIVEU74-NEXT:  # %bb.3:129; RV64SFBSIFIVEU74-NEXT:    mv a0, a1130; RV64SFBSIFIVEU74-NEXT:  .LBB2_4:131; RV64SFBSIFIVEU74-NEXT:    addw a0, a0, a2132; RV64SFBSIFIVEU74-NEXT:    ret133;134; RV64SFBANDESAX45-LABEL: test3:135; RV64SFBANDESAX45:       # %bb.0:136; RV64SFBANDESAX45-NEXT:    nds.bnec a4, 0, .LBB2_3137; RV64SFBANDESAX45-NEXT:  # %bb.1:138; RV64SFBANDESAX45-NEXT:    nds.bnec a4, 0, .LBB2_4139; RV64SFBANDESAX45-NEXT:  .LBB2_2:140; RV64SFBANDESAX45-NEXT:    addw a0, a1, a2141; RV64SFBANDESAX45-NEXT:    ret142; RV64SFBANDESAX45-NEXT:  .LBB2_3:143; RV64SFBANDESAX45-NEXT:    mv a1, a0144; RV64SFBANDESAX45-NEXT:    nds.beqc a4, 0, .LBB2_2145; RV64SFBANDESAX45-NEXT:  .LBB2_4:146; RV64SFBANDESAX45-NEXT:    addw a0, a1, a3147; RV64SFBANDESAX45-NEXT:    ret148;149; ZICOND-LABEL: test3:150; ZICOND:       # %bb.0:151; ZICOND-NEXT:    beqz a4, .LBB2_2152; ZICOND-NEXT:  # %bb.1:153; ZICOND-NEXT:    mv a2, a3154; ZICOND-NEXT:  .LBB2_2:155; ZICOND-NEXT:    bnez a4, .LBB2_4156; ZICOND-NEXT:  # %bb.3:157; ZICOND-NEXT:    mv a0, a1158; ZICOND-NEXT:  .LBB2_4:159; ZICOND-NEXT:    addw a0, a0, a2160; ZICOND-NEXT:    ret161;162; RV32SFB-LABEL: test3:163; RV32SFB:       # %bb.0:164; RV32SFB-NEXT:    beqz a4, .LBB2_2165; RV32SFB-NEXT:  # %bb.1:166; RV32SFB-NEXT:    mv a2, a3167; RV32SFB-NEXT:  .LBB2_2:168; RV32SFB-NEXT:    bnez a4, .LBB2_4169; RV32SFB-NEXT:  # %bb.3:170; RV32SFB-NEXT:    mv a0, a1171; RV32SFB-NEXT:  .LBB2_4:172; RV32SFB-NEXT:    add a0, a0, a2173; RV32SFB-NEXT:    ret174  %c = icmp eq i32 %z, 0175  %a = select i1 %c, i32 %w, i32 %v176  %b = select i1 %c, i32 %x, i32 %y177  %d = add i32 %a, %b178  ret i32 %d179}180 181; Test with false value 0.182define signext i32 @test4(i32 signext %x, i32 signext %z) {183; NOSFB-LABEL: test4:184; NOSFB:       # %bb.0:185; NOSFB-NEXT:    snez a1, a1186; NOSFB-NEXT:    addi a1, a1, -1187; NOSFB-NEXT:    and a0, a0, a1188; NOSFB-NEXT:    ret189;190; RV64SFBSIFIVEU74-LABEL: test4:191; RV64SFBSIFIVEU74:       # %bb.0:192; RV64SFBSIFIVEU74-NEXT:    beqz a1, .LBB3_2193; RV64SFBSIFIVEU74-NEXT:  # %bb.1:194; RV64SFBSIFIVEU74-NEXT:    li a0, 0195; RV64SFBSIFIVEU74-NEXT:  .LBB3_2:196; RV64SFBSIFIVEU74-NEXT:    ret197;198; RV64SFBANDESAX45-LABEL: test4:199; RV64SFBANDESAX45:       # %bb.0:200; RV64SFBANDESAX45-NEXT:    nds.beqc a1, 0, .LBB3_2201; RV64SFBANDESAX45-NEXT:  # %bb.1:202; RV64SFBANDESAX45-NEXT:    li a0, 0203; RV64SFBANDESAX45-NEXT:  .LBB3_2:204; RV64SFBANDESAX45-NEXT:    ret205;206; ZICOND-LABEL: test4:207; ZICOND:       # %bb.0:208; ZICOND-NEXT:    czero.nez a0, a0, a1209; ZICOND-NEXT:    ret210;211; RV32SFB-LABEL: test4:212; RV32SFB:       # %bb.0:213; RV32SFB-NEXT:    beqz a1, .LBB3_2214; RV32SFB-NEXT:  # %bb.1:215; RV32SFB-NEXT:    li a0, 0216; RV32SFB-NEXT:  .LBB3_2:217; RV32SFB-NEXT:    ret218  %c = icmp eq i32 %z, 0219  %b = select i1 %c, i32 %x, i32 0220  ret i32 %b221}222 223; Same as above with select operands swapped.224define signext i32 @test5(i32 signext %x, i32 signext %z) {225; NOSFB-LABEL: test5:226; NOSFB:       # %bb.0:227; NOSFB-NEXT:    seqz a1, a1228; NOSFB-NEXT:    addi a1, a1, -1229; NOSFB-NEXT:    and a0, a0, a1230; NOSFB-NEXT:    ret231;232; RV64SFBSIFIVEU74-LABEL: test5:233; RV64SFBSIFIVEU74:       # %bb.0:234; RV64SFBSIFIVEU74-NEXT:    bnez a1, .LBB4_2235; RV64SFBSIFIVEU74-NEXT:  # %bb.1:236; RV64SFBSIFIVEU74-NEXT:    li a0, 0237; RV64SFBSIFIVEU74-NEXT:  .LBB4_2:238; RV64SFBSIFIVEU74-NEXT:    ret239;240; RV64SFBANDESAX45-LABEL: test5:241; RV64SFBANDESAX45:       # %bb.0:242; RV64SFBANDESAX45-NEXT:    nds.bnec a1, 0, .LBB4_2243; RV64SFBANDESAX45-NEXT:  # %bb.1:244; RV64SFBANDESAX45-NEXT:    li a0, 0245; RV64SFBANDESAX45-NEXT:  .LBB4_2:246; RV64SFBANDESAX45-NEXT:    ret247;248; ZICOND-LABEL: test5:249; ZICOND:       # %bb.0:250; ZICOND-NEXT:    czero.eqz a0, a0, a1251; ZICOND-NEXT:    ret252;253; RV32SFB-LABEL: test5:254; RV32SFB:       # %bb.0:255; RV32SFB-NEXT:    bnez a1, .LBB4_2256; RV32SFB-NEXT:  # %bb.1:257; RV32SFB-NEXT:    li a0, 0258; RV32SFB-NEXT:  .LBB4_2:259; RV32SFB-NEXT:    ret260  %c = icmp eq i32 %z, 0261  %b = select i1 %c, i32 0, i32 %x262  ret i32 %b263}264 265; Test with false value -1.266define signext i32 @test6(i32 signext %x, i32 signext %z) {267; NOSFB-LABEL: test6:268; NOSFB:       # %bb.0:269; NOSFB-NEXT:    seqz a1, a1270; NOSFB-NEXT:    addi a1, a1, -1271; NOSFB-NEXT:    or a0, a0, a1272; NOSFB-NEXT:    ret273;274; RV64SFBSIFIVEU74-LABEL: test6:275; RV64SFBSIFIVEU74:       # %bb.0:276; RV64SFBSIFIVEU74-NEXT:    li a2, -1277; RV64SFBSIFIVEU74-NEXT:    beqz a1, .LBB5_2278; RV64SFBSIFIVEU74-NEXT:  # %bb.1:279; RV64SFBSIFIVEU74-NEXT:    mv a0, a2280; RV64SFBSIFIVEU74-NEXT:  .LBB5_2:281; RV64SFBSIFIVEU74-NEXT:    ret282;283; RV64SFBANDESAX45-LABEL: test6:284; RV64SFBANDESAX45:       # %bb.0:285; RV64SFBANDESAX45-NEXT:    nds.beqc a1, 0, .LBB5_2286; RV64SFBANDESAX45-NEXT:  # %bb.1:287; RV64SFBANDESAX45-NEXT:    li a0, -1288; RV64SFBANDESAX45-NEXT:  .LBB5_2:289; RV64SFBANDESAX45-NEXT:    ret290;291; ZICOND-LABEL: test6:292; ZICOND:       # %bb.0:293; ZICOND-NEXT:    addi a0, a0, 1294; ZICOND-NEXT:    czero.nez a0, a0, a1295; ZICOND-NEXT:    addi a0, a0, -1296; ZICOND-NEXT:    ret297;298; RV32SFB-LABEL: test6:299; RV32SFB:       # %bb.0:300; RV32SFB-NEXT:    li a2, -1301; RV32SFB-NEXT:    beqz a1, .LBB5_2302; RV32SFB-NEXT:  # %bb.1:303; RV32SFB-NEXT:    mv a0, a2304; RV32SFB-NEXT:  .LBB5_2:305; RV32SFB-NEXT:    ret306  %c = icmp eq i32 %z, 0307  %b = select i1 %c, i32 %x, i32 -1308  ret i32 %b309}310 311; Same as above with select operands swapped.312define signext i32 @test7(i32 signext %x, i32 signext %z) {313; NOSFB-LABEL: test7:314; NOSFB:       # %bb.0:315; NOSFB-NEXT:    snez a1, a1316; NOSFB-NEXT:    addi a1, a1, -1317; NOSFB-NEXT:    or a0, a0, a1318; NOSFB-NEXT:    ret319;320; RV64SFBSIFIVEU74-LABEL: test7:321; RV64SFBSIFIVEU74:       # %bb.0:322; RV64SFBSIFIVEU74-NEXT:    li a2, -1323; RV64SFBSIFIVEU74-NEXT:    bnez a1, .LBB6_2324; RV64SFBSIFIVEU74-NEXT:  # %bb.1:325; RV64SFBSIFIVEU74-NEXT:    mv a0, a2326; RV64SFBSIFIVEU74-NEXT:  .LBB6_2:327; RV64SFBSIFIVEU74-NEXT:    ret328;329; RV64SFBANDESAX45-LABEL: test7:330; RV64SFBANDESAX45:       # %bb.0:331; RV64SFBANDESAX45-NEXT:    nds.bnec a1, 0, .LBB6_2332; RV64SFBANDESAX45-NEXT:  # %bb.1:333; RV64SFBANDESAX45-NEXT:    li a0, -1334; RV64SFBANDESAX45-NEXT:  .LBB6_2:335; RV64SFBANDESAX45-NEXT:    ret336;337; ZICOND-LABEL: test7:338; ZICOND:       # %bb.0:339; ZICOND-NEXT:    addi a0, a0, 1340; ZICOND-NEXT:    czero.eqz a0, a0, a1341; ZICOND-NEXT:    addi a0, a0, -1342; ZICOND-NEXT:    ret343;344; RV32SFB-LABEL: test7:345; RV32SFB:       # %bb.0:346; RV32SFB-NEXT:    li a2, -1347; RV32SFB-NEXT:    bnez a1, .LBB6_2348; RV32SFB-NEXT:  # %bb.1:349; RV32SFB-NEXT:    mv a0, a2350; RV32SFB-NEXT:  .LBB6_2:351; RV32SFB-NEXT:    ret352  %c = icmp eq i32 %z, 0353  %b = select i1 %c, i32 -1, i32 %x354  ret i32 %b355}356 357define i16 @select_xor_1(i16 %A, i8 %cond) {358; NOSFB-LABEL: select_xor_1:359; NOSFB:       # %bb.0: # %entry360; NOSFB-NEXT:    slli a1, a1, 63361; NOSFB-NEXT:    srai a1, a1, 63362; NOSFB-NEXT:    andi a1, a1, 43363; NOSFB-NEXT:    xor a0, a0, a1364; NOSFB-NEXT:    ret365;366; RV64SFBSIFIVEU74-LABEL: select_xor_1:367; RV64SFBSIFIVEU74:       # %bb.0: # %entry368; RV64SFBSIFIVEU74-NEXT:    andi a1, a1, 1369; RV64SFBSIFIVEU74-NEXT:    beqz a1, .LBB7_2370; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry371; RV64SFBSIFIVEU74-NEXT:    xori a0, a0, 43372; RV64SFBSIFIVEU74-NEXT:  .LBB7_2: # %entry373; RV64SFBSIFIVEU74-NEXT:    ret374;375; RV64SFBANDESAX45-LABEL: select_xor_1:376; RV64SFBANDESAX45:       # %bb.0: # %entry377; RV64SFBANDESAX45-NEXT:    nds.bbc a1, 0, .LBB7_2378; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry379; RV64SFBANDESAX45-NEXT:    xori a0, a0, 43380; RV64SFBANDESAX45-NEXT:  .LBB7_2: # %entry381; RV64SFBANDESAX45-NEXT:    ret382;383; ZICOND-LABEL: select_xor_1:384; ZICOND:       # %bb.0: # %entry385; ZICOND-NEXT:    andi a1, a1, 1386; ZICOND-NEXT:    beqz a1, .LBB7_2387; ZICOND-NEXT:  # %bb.1: # %entry388; ZICOND-NEXT:    xori a0, a0, 43389; ZICOND-NEXT:  .LBB7_2: # %entry390; ZICOND-NEXT:    ret391;392; RV32SFB-LABEL: select_xor_1:393; RV32SFB:       # %bb.0: # %entry394; RV32SFB-NEXT:    andi a1, a1, 1395; RV32SFB-NEXT:    beqz a1, .LBB7_2396; RV32SFB-NEXT:  # %bb.1: # %entry397; RV32SFB-NEXT:    xori a0, a0, 43398; RV32SFB-NEXT:  .LBB7_2: # %entry399; RV32SFB-NEXT:    ret400entry:401 %and = and i8 %cond, 1402 %cmp10 = icmp eq i8 %and, 0403 %0 = xor i16 %A, 43404 %1 = select i1 %cmp10, i16 %A, i16 %0405 ret i16 %1406}407 408; Equivalent to above, but with icmp ne (and %cond, 1), 1 instead of409; icmp eq (and %cond, 1), 0410define i16 @select_xor_1b(i16 %A, i8 %cond) {411; NOSFB-LABEL: select_xor_1b:412; NOSFB:       # %bb.0: # %entry413; NOSFB-NEXT:    slli a1, a1, 63414; NOSFB-NEXT:    srai a1, a1, 63415; NOSFB-NEXT:    andi a1, a1, 43416; NOSFB-NEXT:    xor a0, a0, a1417; NOSFB-NEXT:    ret418;419; RV64SFBSIFIVEU74-LABEL: select_xor_1b:420; RV64SFBSIFIVEU74:       # %bb.0: # %entry421; RV64SFBSIFIVEU74-NEXT:    andi a1, a1, 1422; RV64SFBSIFIVEU74-NEXT:    beqz a1, .LBB8_2423; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry424; RV64SFBSIFIVEU74-NEXT:    xori a0, a0, 43425; RV64SFBSIFIVEU74-NEXT:  .LBB8_2: # %entry426; RV64SFBSIFIVEU74-NEXT:    ret427;428; RV64SFBANDESAX45-LABEL: select_xor_1b:429; RV64SFBANDESAX45:       # %bb.0: # %entry430; RV64SFBANDESAX45-NEXT:    nds.bbc a1, 0, .LBB8_2431; RV64SFBANDESAX45-NEXT:  # %bb.1:432; RV64SFBANDESAX45-NEXT:    xori a0, a0, 43433; RV64SFBANDESAX45-NEXT:  .LBB8_2: # %entry434; RV64SFBANDESAX45-NEXT:    ret435;436; ZICOND-LABEL: select_xor_1b:437; ZICOND:       # %bb.0: # %entry438; ZICOND-NEXT:    andi a1, a1, 1439; ZICOND-NEXT:    beqz a1, .LBB8_2440; ZICOND-NEXT:  # %bb.1: # %entry441; ZICOND-NEXT:    xori a0, a0, 43442; ZICOND-NEXT:  .LBB8_2: # %entry443; ZICOND-NEXT:    ret444;445; RV32SFB-LABEL: select_xor_1b:446; RV32SFB:       # %bb.0: # %entry447; RV32SFB-NEXT:    andi a1, a1, 1448; RV32SFB-NEXT:    beqz a1, .LBB8_2449; RV32SFB-NEXT:  # %bb.1: # %entry450; RV32SFB-NEXT:    xori a0, a0, 43451; RV32SFB-NEXT:  .LBB8_2: # %entry452; RV32SFB-NEXT:    ret453entry:454 %and = and i8 %cond, 1455 %cmp10 = icmp ne i8 %and, 1456 %0 = xor i16 %A, 43457 %1 = select i1 %cmp10, i16 %A, i16 %0458 ret i16 %1459}460 461define i32 @select_xor_2(i32 %A, i32 %B, i8 %cond) {462; NOSFB-LABEL: select_xor_2:463; NOSFB:       # %bb.0: # %entry464; NOSFB-NEXT:    slli a2, a2, 63465; NOSFB-NEXT:    srai a2, a2, 63466; NOSFB-NEXT:    and a1, a1, a2467; NOSFB-NEXT:    xor a0, a0, a1468; NOSFB-NEXT:    ret469;470; RV64SFBSIFIVEU74-LABEL: select_xor_2:471; RV64SFBSIFIVEU74:       # %bb.0: # %entry472; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1473; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB9_2474; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry475; RV64SFBSIFIVEU74-NEXT:    xor a0, a0, a1476; RV64SFBSIFIVEU74-NEXT:  .LBB9_2: # %entry477; RV64SFBSIFIVEU74-NEXT:    ret478;479; RV64SFBANDESAX45-LABEL: select_xor_2:480; RV64SFBANDESAX45:       # %bb.0: # %entry481; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB9_2482; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry483; RV64SFBANDESAX45-NEXT:    xor a0, a0, a1484; RV64SFBANDESAX45-NEXT:  .LBB9_2: # %entry485; RV64SFBANDESAX45-NEXT:    ret486;487; ZICOND-LABEL: select_xor_2:488; ZICOND:       # %bb.0: # %entry489; ZICOND-NEXT:    andi a2, a2, 1490; ZICOND-NEXT:    beqz a2, .LBB9_2491; ZICOND-NEXT:  # %bb.1: # %entry492; ZICOND-NEXT:    xor a0, a0, a1493; ZICOND-NEXT:  .LBB9_2: # %entry494; ZICOND-NEXT:    ret495;496; RV32SFB-LABEL: select_xor_2:497; RV32SFB:       # %bb.0: # %entry498; RV32SFB-NEXT:    andi a2, a2, 1499; RV32SFB-NEXT:    beqz a2, .LBB9_2500; RV32SFB-NEXT:  # %bb.1: # %entry501; RV32SFB-NEXT:    xor a0, a0, a1502; RV32SFB-NEXT:  .LBB9_2: # %entry503; RV32SFB-NEXT:    ret504entry:505 %and = and i8 %cond, 1506 %cmp10 = icmp eq i8 %and, 0507 %0 = xor i32 %B, %A508 %1 = select i1 %cmp10, i32 %A, i32 %0509 ret i32 %1510}511 512; Equivalent to above, but with icmp ne (and %cond, 1), 1 instead of513; icmp eq (and %cond, 1), 0514define i32 @select_xor_2b(i32 %A, i32 %B, i8 %cond) {515; NOSFB-LABEL: select_xor_2b:516; NOSFB:       # %bb.0: # %entry517; NOSFB-NEXT:    slli a2, a2, 63518; NOSFB-NEXT:    srai a2, a2, 63519; NOSFB-NEXT:    and a1, a1, a2520; NOSFB-NEXT:    xor a0, a0, a1521; NOSFB-NEXT:    ret522;523; RV64SFBSIFIVEU74-LABEL: select_xor_2b:524; RV64SFBSIFIVEU74:       # %bb.0: # %entry525; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1526; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB10_2527; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry528; RV64SFBSIFIVEU74-NEXT:    xor a0, a0, a1529; RV64SFBSIFIVEU74-NEXT:  .LBB10_2: # %entry530; RV64SFBSIFIVEU74-NEXT:    ret531;532; RV64SFBANDESAX45-LABEL: select_xor_2b:533; RV64SFBANDESAX45:       # %bb.0: # %entry534; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB10_2535; RV64SFBANDESAX45-NEXT:  # %bb.1:536; RV64SFBANDESAX45-NEXT:    xor a0, a0, a1537; RV64SFBANDESAX45-NEXT:  .LBB10_2: # %entry538; RV64SFBANDESAX45-NEXT:    ret539;540; ZICOND-LABEL: select_xor_2b:541; ZICOND:       # %bb.0: # %entry542; ZICOND-NEXT:    andi a2, a2, 1543; ZICOND-NEXT:    beqz a2, .LBB10_2544; ZICOND-NEXT:  # %bb.1: # %entry545; ZICOND-NEXT:    xor a0, a0, a1546; ZICOND-NEXT:  .LBB10_2: # %entry547; ZICOND-NEXT:    ret548;549; RV32SFB-LABEL: select_xor_2b:550; RV32SFB:       # %bb.0: # %entry551; RV32SFB-NEXT:    andi a2, a2, 1552; RV32SFB-NEXT:    beqz a2, .LBB10_2553; RV32SFB-NEXT:  # %bb.1: # %entry554; RV32SFB-NEXT:    xor a0, a0, a1555; RV32SFB-NEXT:  .LBB10_2: # %entry556; RV32SFB-NEXT:    ret557entry:558 %and = and i8 %cond, 1559 %cmp10 = icmp ne i8 %and, 1560 %0 = xor i32 %B, %A561 %1 = select i1 %cmp10, i32 %A, i32 %0562 ret i32 %1563}564 565define i32 @select_or(i32 %A, i32 %B, i8 %cond) {566; NOSFB-LABEL: select_or:567; NOSFB:       # %bb.0: # %entry568; NOSFB-NEXT:    slli a2, a2, 63569; NOSFB-NEXT:    srai a2, a2, 63570; NOSFB-NEXT:    and a1, a1, a2571; NOSFB-NEXT:    or a0, a0, a1572; NOSFB-NEXT:    ret573;574; RV64SFBSIFIVEU74-LABEL: select_or:575; RV64SFBSIFIVEU74:       # %bb.0: # %entry576; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1577; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB11_2578; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry579; RV64SFBSIFIVEU74-NEXT:    or a0, a0, a1580; RV64SFBSIFIVEU74-NEXT:  .LBB11_2: # %entry581; RV64SFBSIFIVEU74-NEXT:    ret582;583; RV64SFBANDESAX45-LABEL: select_or:584; RV64SFBANDESAX45:       # %bb.0: # %entry585; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB11_2586; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry587; RV64SFBANDESAX45-NEXT:    or a0, a0, a1588; RV64SFBANDESAX45-NEXT:  .LBB11_2: # %entry589; RV64SFBANDESAX45-NEXT:    ret590;591; ZICOND-LABEL: select_or:592; ZICOND:       # %bb.0: # %entry593; ZICOND-NEXT:    andi a2, a2, 1594; ZICOND-NEXT:    beqz a2, .LBB11_2595; ZICOND-NEXT:  # %bb.1: # %entry596; ZICOND-NEXT:    or a0, a0, a1597; ZICOND-NEXT:  .LBB11_2: # %entry598; ZICOND-NEXT:    ret599;600; RV32SFB-LABEL: select_or:601; RV32SFB:       # %bb.0: # %entry602; RV32SFB-NEXT:    andi a2, a2, 1603; RV32SFB-NEXT:    beqz a2, .LBB11_2604; RV32SFB-NEXT:  # %bb.1: # %entry605; RV32SFB-NEXT:    or a0, a0, a1606; RV32SFB-NEXT:  .LBB11_2: # %entry607; RV32SFB-NEXT:    ret608entry:609 %and = and i8 %cond, 1610 %cmp10 = icmp eq i8 %and, 0611 %0 = or i32 %B, %A612 %1 = select i1 %cmp10, i32 %A, i32 %0613 ret i32 %1614}615 616; Equivalent to above, but with icmp ne (and %cond, 1), 1 instead of617; icmp eq (and %cond, 1), 0618define i32 @select_or_b(i32 %A, i32 %B, i8 %cond) {619; NOSFB-LABEL: select_or_b:620; NOSFB:       # %bb.0: # %entry621; NOSFB-NEXT:    slli a2, a2, 63622; NOSFB-NEXT:    srai a2, a2, 63623; NOSFB-NEXT:    and a1, a1, a2624; NOSFB-NEXT:    or a0, a0, a1625; NOSFB-NEXT:    ret626;627; RV64SFBSIFIVEU74-LABEL: select_or_b:628; RV64SFBSIFIVEU74:       # %bb.0: # %entry629; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1630; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB12_2631; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry632; RV64SFBSIFIVEU74-NEXT:    or a0, a0, a1633; RV64SFBSIFIVEU74-NEXT:  .LBB12_2: # %entry634; RV64SFBSIFIVEU74-NEXT:    ret635;636; RV64SFBANDESAX45-LABEL: select_or_b:637; RV64SFBANDESAX45:       # %bb.0: # %entry638; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB12_2639; RV64SFBANDESAX45-NEXT:  # %bb.1:640; RV64SFBANDESAX45-NEXT:    or a0, a0, a1641; RV64SFBANDESAX45-NEXT:  .LBB12_2: # %entry642; RV64SFBANDESAX45-NEXT:    ret643;644; ZICOND-LABEL: select_or_b:645; ZICOND:       # %bb.0: # %entry646; ZICOND-NEXT:    andi a2, a2, 1647; ZICOND-NEXT:    beqz a2, .LBB12_2648; ZICOND-NEXT:  # %bb.1: # %entry649; ZICOND-NEXT:    or a0, a0, a1650; ZICOND-NEXT:  .LBB12_2: # %entry651; ZICOND-NEXT:    ret652;653; RV32SFB-LABEL: select_or_b:654; RV32SFB:       # %bb.0: # %entry655; RV32SFB-NEXT:    andi a2, a2, 1656; RV32SFB-NEXT:    beqz a2, .LBB12_2657; RV32SFB-NEXT:  # %bb.1: # %entry658; RV32SFB-NEXT:    or a0, a0, a1659; RV32SFB-NEXT:  .LBB12_2: # %entry660; RV32SFB-NEXT:    ret661entry:662 %and = and i8 %cond, 1663 %cmp10 = icmp ne i8 %and, 1664 %0 = or i32 %B, %A665 %1 = select i1 %cmp10, i32 %A, i32 %0666 ret i32 %1667}668 669define i32 @select_or_1(i32 %A, i32 %B, i32 %cond) {670; NOSFB-LABEL: select_or_1:671; NOSFB:       # %bb.0: # %entry672; NOSFB-NEXT:    slli a2, a2, 63673; NOSFB-NEXT:    srai a2, a2, 63674; NOSFB-NEXT:    and a1, a1, a2675; NOSFB-NEXT:    or a0, a0, a1676; NOSFB-NEXT:    ret677;678; RV64SFBSIFIVEU74-LABEL: select_or_1:679; RV64SFBSIFIVEU74:       # %bb.0: # %entry680; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1681; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB13_2682; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry683; RV64SFBSIFIVEU74-NEXT:    or a0, a0, a1684; RV64SFBSIFIVEU74-NEXT:  .LBB13_2: # %entry685; RV64SFBSIFIVEU74-NEXT:    ret686;687; RV64SFBANDESAX45-LABEL: select_or_1:688; RV64SFBANDESAX45:       # %bb.0: # %entry689; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB13_2690; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry691; RV64SFBANDESAX45-NEXT:    or a0, a0, a1692; RV64SFBANDESAX45-NEXT:  .LBB13_2: # %entry693; RV64SFBANDESAX45-NEXT:    ret694;695; ZICOND-LABEL: select_or_1:696; ZICOND:       # %bb.0: # %entry697; ZICOND-NEXT:    andi a2, a2, 1698; ZICOND-NEXT:    beqz a2, .LBB13_2699; ZICOND-NEXT:  # %bb.1: # %entry700; ZICOND-NEXT:    or a0, a0, a1701; ZICOND-NEXT:  .LBB13_2: # %entry702; ZICOND-NEXT:    ret703;704; RV32SFB-LABEL: select_or_1:705; RV32SFB:       # %bb.0: # %entry706; RV32SFB-NEXT:    andi a2, a2, 1707; RV32SFB-NEXT:    beqz a2, .LBB13_2708; RV32SFB-NEXT:  # %bb.1: # %entry709; RV32SFB-NEXT:    or a0, a0, a1710; RV32SFB-NEXT:  .LBB13_2: # %entry711; RV32SFB-NEXT:    ret712entry:713 %and = and i32 %cond, 1714 %cmp10 = icmp eq i32 %and, 0715 %0 = or i32 %B, %A716 %1 = select i1 %cmp10, i32 %A, i32 %0717 ret i32 %1718}719 720; Equivalent to above, but with icmp ne (and %cond, 1), 1 instead of721; icmp eq (and %cond, 1), 0722define i32 @select_or_1b(i32 %A, i32 %B, i32 %cond) {723; NOSFB-LABEL: select_or_1b:724; NOSFB:       # %bb.0: # %entry725; NOSFB-NEXT:    slli a2, a2, 63726; NOSFB-NEXT:    srai a2, a2, 63727; NOSFB-NEXT:    and a1, a1, a2728; NOSFB-NEXT:    or a0, a0, a1729; NOSFB-NEXT:    ret730;731; RV64SFBSIFIVEU74-LABEL: select_or_1b:732; RV64SFBSIFIVEU74:       # %bb.0: # %entry733; RV64SFBSIFIVEU74-NEXT:    andi a2, a2, 1734; RV64SFBSIFIVEU74-NEXT:    beqz a2, .LBB14_2735; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry736; RV64SFBSIFIVEU74-NEXT:    or a0, a0, a1737; RV64SFBSIFIVEU74-NEXT:  .LBB14_2: # %entry738; RV64SFBSIFIVEU74-NEXT:    ret739;740; RV64SFBANDESAX45-LABEL: select_or_1b:741; RV64SFBANDESAX45:       # %bb.0: # %entry742; RV64SFBANDESAX45-NEXT:    nds.bbc a2, 0, .LBB14_2743; RV64SFBANDESAX45-NEXT:  # %bb.1:744; RV64SFBANDESAX45-NEXT:    or a0, a0, a1745; RV64SFBANDESAX45-NEXT:  .LBB14_2: # %entry746; RV64SFBANDESAX45-NEXT:    ret747;748; ZICOND-LABEL: select_or_1b:749; ZICOND:       # %bb.0: # %entry750; ZICOND-NEXT:    andi a2, a2, 1751; ZICOND-NEXT:    beqz a2, .LBB14_2752; ZICOND-NEXT:  # %bb.1: # %entry753; ZICOND-NEXT:    or a0, a0, a1754; ZICOND-NEXT:  .LBB14_2: # %entry755; ZICOND-NEXT:    ret756;757; RV32SFB-LABEL: select_or_1b:758; RV32SFB:       # %bb.0: # %entry759; RV32SFB-NEXT:    andi a2, a2, 1760; RV32SFB-NEXT:    beqz a2, .LBB14_2761; RV32SFB-NEXT:  # %bb.1: # %entry762; RV32SFB-NEXT:    or a0, a0, a1763; RV32SFB-NEXT:  .LBB14_2: # %entry764; RV32SFB-NEXT:    ret765entry:766 %and = and i32 %cond, 1767 %cmp10 = icmp ne i32 %and, 1768 %0 = or i32 %B, %A769 %1 = select i1 %cmp10, i32 %A, i32 %0770 ret i32 %1771}772 773define void @sextw_removal_ccor(i1 %c, i32 signext %arg, i32 signext %arg1, i32 signext %arg2) nounwind {774; NOSFB-LABEL: sextw_removal_ccor:775; NOSFB:       # %bb.0: # %bb776; NOSFB-NEXT:    addi sp, sp, -32777; NOSFB-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill778; NOSFB-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill779; NOSFB-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill780; NOSFB-NEXT:    mv s0, a2781; NOSFB-NEXT:    slli a0, a0, 63782; NOSFB-NEXT:    srai a0, a0, 63783; NOSFB-NEXT:    and a0, a0, a1784; NOSFB-NEXT:    or s1, a0, a3785; NOSFB-NEXT:  .LBB15_1: # %bb2786; NOSFB-NEXT:    # =>This Inner Loop Header: Depth=1787; NOSFB-NEXT:    mv a0, s1788; NOSFB-NEXT:    call bar789; NOSFB-NEXT:    sllw s1, s1, s0790; NOSFB-NEXT:    bnez a0, .LBB15_1791; NOSFB-NEXT:  # %bb.2: # %bb7792; NOSFB-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload793; NOSFB-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload794; NOSFB-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload795; NOSFB-NEXT:    addi sp, sp, 32796; NOSFB-NEXT:    ret797;798; RV64SFBSIFIVEU74-LABEL: sextw_removal_ccor:799; RV64SFBSIFIVEU74:       # %bb.0: # %bb800; RV64SFBSIFIVEU74-NEXT:    addi sp, sp, -32801; RV64SFBSIFIVEU74-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill802; RV64SFBSIFIVEU74-NEXT:    mv s0, a3803; RV64SFBSIFIVEU74-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill804; RV64SFBSIFIVEU74-NEXT:    andi a0, a0, 1805; RV64SFBSIFIVEU74-NEXT:    mv s1, a2806; RV64SFBSIFIVEU74-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill807; RV64SFBSIFIVEU74-NEXT:    beqz a0, .LBB15_4808; RV64SFBSIFIVEU74-NEXT:  # %bb.3: # %bb809; RV64SFBSIFIVEU74-NEXT:    or s0, a3, a1810; RV64SFBSIFIVEU74-NEXT:  .LBB15_4: # %bb811; RV64SFBSIFIVEU74-NEXT:  .LBB15_1: # %bb2812; RV64SFBSIFIVEU74-NEXT:    # =>This Inner Loop Header: Depth=1813; RV64SFBSIFIVEU74-NEXT:    mv a0, s0814; RV64SFBSIFIVEU74-NEXT:    call bar815; RV64SFBSIFIVEU74-NEXT:    sllw s0, s0, s1816; RV64SFBSIFIVEU74-NEXT:    bnez a0, .LBB15_1817; RV64SFBSIFIVEU74-NEXT:  # %bb.2: # %bb7818; RV64SFBSIFIVEU74-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload819; RV64SFBSIFIVEU74-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload820; RV64SFBSIFIVEU74-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload821; RV64SFBSIFIVEU74-NEXT:    addi sp, sp, 32822; RV64SFBSIFIVEU74-NEXT:    ret823;824; RV64SFBANDESAX45-LABEL: sextw_removal_ccor:825; RV64SFBANDESAX45:       # %bb.0: # %bb826; RV64SFBANDESAX45-NEXT:    addi sp, sp, -32827; RV64SFBANDESAX45-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill828; RV64SFBANDESAX45-NEXT:    mv s0, a3829; RV64SFBANDESAX45-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill830; RV64SFBANDESAX45-NEXT:    mv s1, a2831; RV64SFBANDESAX45-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill832; RV64SFBANDESAX45-NEXT:    nds.bbc a0, 0, .LBB15_2833; RV64SFBANDESAX45-NEXT:  # %bb.1:834; RV64SFBANDESAX45-NEXT:    or s0, s0, a1835; RV64SFBANDESAX45-NEXT:  .LBB15_2: # %bb2836; RV64SFBANDESAX45-NEXT:    # =>This Inner Loop Header: Depth=1837; RV64SFBANDESAX45-NEXT:    mv a0, s0838; RV64SFBANDESAX45-NEXT:    call bar839; RV64SFBANDESAX45-NEXT:    sllw s0, s0, s1840; RV64SFBANDESAX45-NEXT:    bnez a0, .LBB15_2841; RV64SFBANDESAX45-NEXT:  # %bb.3: # %bb7842; RV64SFBANDESAX45-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload843; RV64SFBANDESAX45-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload844; RV64SFBANDESAX45-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload845; RV64SFBANDESAX45-NEXT:    addi sp, sp, 32846; RV64SFBANDESAX45-NEXT:    ret847;848; ZICOND-LABEL: sextw_removal_ccor:849; ZICOND:       # %bb.0: # %bb850; ZICOND-NEXT:    addi sp, sp, -32851; ZICOND-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill852; ZICOND-NEXT:    mv s0, a3853; ZICOND-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill854; ZICOND-NEXT:    andi a0, a0, 1855; ZICOND-NEXT:    mv s1, a2856; ZICOND-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill857; ZICOND-NEXT:    beqz a0, .LBB15_4858; ZICOND-NEXT:  # %bb.3: # %bb859; ZICOND-NEXT:    or s0, a3, a1860; ZICOND-NEXT:  .LBB15_4: # %bb861; ZICOND-NEXT:  .LBB15_1: # %bb2862; ZICOND-NEXT:    # =>This Inner Loop Header: Depth=1863; ZICOND-NEXT:    mv a0, s0864; ZICOND-NEXT:    call bar865; ZICOND-NEXT:    sllw s0, s0, s1866; ZICOND-NEXT:    bnez a0, .LBB15_1867; ZICOND-NEXT:  # %bb.2: # %bb7868; ZICOND-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload869; ZICOND-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload870; ZICOND-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload871; ZICOND-NEXT:    addi sp, sp, 32872; ZICOND-NEXT:    ret873;874; RV32SFB-LABEL: sextw_removal_ccor:875; RV32SFB:       # %bb.0: # %bb876; RV32SFB-NEXT:    addi sp, sp, -16877; RV32SFB-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill878; RV32SFB-NEXT:    mv s0, a3879; RV32SFB-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill880; RV32SFB-NEXT:    andi a0, a0, 1881; RV32SFB-NEXT:    mv s1, a2882; RV32SFB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill883; RV32SFB-NEXT:    beqz a0, .LBB15_4884; RV32SFB-NEXT:  # %bb.3: # %bb885; RV32SFB-NEXT:    or s0, a3, a1886; RV32SFB-NEXT:  .LBB15_4: # %bb887; RV32SFB-NEXT:  .LBB15_1: # %bb2888; RV32SFB-NEXT:    # =>This Inner Loop Header: Depth=1889; RV32SFB-NEXT:    mv a0, s0890; RV32SFB-NEXT:    call bar891; RV32SFB-NEXT:    sll s0, s0, s1892; RV32SFB-NEXT:    bnez a0, .LBB15_1893; RV32SFB-NEXT:  # %bb.2: # %bb7894; RV32SFB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload895; RV32SFB-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload896; RV32SFB-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload897; RV32SFB-NEXT:    addi sp, sp, 16898; RV32SFB-NEXT:    ret899bb:900  %sel = select i1 %c, i32 %arg, i32 0901  %or = or i32 %sel, %arg2902  br label %bb2903 904bb2:                                              ; preds = %bb2, %bb905  %i3 = phi i32 [ %or, %bb ], [ %i5, %bb2 ]906  %i4 = tail call signext i32 @bar(i32 signext %i3)907  %i5 = shl i32 %i3, %arg1908  %i6 = icmp eq i32 %i4, 0909  br i1 %i6, label %bb7, label %bb2910 911bb7:                                              ; preds = %bb2912  ret void913}914declare signext i32 @bar(i32 signext)915 916define void @sextw_removal_ccaddw(i1 %c, i32 signext %arg, i32 signext %arg1, i32 %arg2) nounwind {917; NOSFB-LABEL: sextw_removal_ccaddw:918; NOSFB:       # %bb.0: # %bb919; NOSFB-NEXT:    addi sp, sp, -32920; NOSFB-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill921; NOSFB-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill922; NOSFB-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill923; NOSFB-NEXT:    mv s0, a2924; NOSFB-NEXT:    slli a0, a0, 63925; NOSFB-NEXT:    srai a0, a0, 63926; NOSFB-NEXT:    and a0, a0, a3927; NOSFB-NEXT:    addw s1, a0, a1928; NOSFB-NEXT:  .LBB16_1: # %bb2929; NOSFB-NEXT:    # =>This Inner Loop Header: Depth=1930; NOSFB-NEXT:    mv a0, s1931; NOSFB-NEXT:    call bar932; NOSFB-NEXT:    sllw s1, s1, s0933; NOSFB-NEXT:    bnez a0, .LBB16_1934; NOSFB-NEXT:  # %bb.2: # %bb7935; NOSFB-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload936; NOSFB-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload937; NOSFB-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload938; NOSFB-NEXT:    addi sp, sp, 32939; NOSFB-NEXT:    ret940;941; RV64SFBSIFIVEU74-LABEL: sextw_removal_ccaddw:942; RV64SFBSIFIVEU74:       # %bb.0: # %bb943; RV64SFBSIFIVEU74-NEXT:    addi sp, sp, -32944; RV64SFBSIFIVEU74-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill945; RV64SFBSIFIVEU74-NEXT:    mv s1, a1946; RV64SFBSIFIVEU74-NEXT:    andi a0, a0, 1947; RV64SFBSIFIVEU74-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill948; RV64SFBSIFIVEU74-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill949; RV64SFBSIFIVEU74-NEXT:    mv s0, a2950; RV64SFBSIFIVEU74-NEXT:    beqz a0, .LBB16_4951; RV64SFBSIFIVEU74-NEXT:  # %bb.3: # %bb952; RV64SFBSIFIVEU74-NEXT:    addw s1, a1, a3953; RV64SFBSIFIVEU74-NEXT:  .LBB16_4: # %bb954; RV64SFBSIFIVEU74-NEXT:  .LBB16_1: # %bb2955; RV64SFBSIFIVEU74-NEXT:    # =>This Inner Loop Header: Depth=1956; RV64SFBSIFIVEU74-NEXT:    mv a0, s1957; RV64SFBSIFIVEU74-NEXT:    call bar958; RV64SFBSIFIVEU74-NEXT:    sllw s1, s1, s0959; RV64SFBSIFIVEU74-NEXT:    bnez a0, .LBB16_1960; RV64SFBSIFIVEU74-NEXT:  # %bb.2: # %bb7961; RV64SFBSIFIVEU74-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload962; RV64SFBSIFIVEU74-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload963; RV64SFBSIFIVEU74-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload964; RV64SFBSIFIVEU74-NEXT:    addi sp, sp, 32965; RV64SFBSIFIVEU74-NEXT:    ret966;967; RV64SFBANDESAX45-LABEL: sextw_removal_ccaddw:968; RV64SFBANDESAX45:       # %bb.0: # %bb969; RV64SFBANDESAX45-NEXT:    addi sp, sp, -32970; RV64SFBANDESAX45-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill971; RV64SFBANDESAX45-NEXT:    mv s0, a2972; RV64SFBANDESAX45-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill973; RV64SFBANDESAX45-NEXT:    mv s1, a1974; RV64SFBANDESAX45-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill975; RV64SFBANDESAX45-NEXT:    nds.bbc a0, 0, .LBB16_2976; RV64SFBANDESAX45-NEXT:  # %bb.1:977; RV64SFBANDESAX45-NEXT:    addw s1, s1, a3978; RV64SFBANDESAX45-NEXT:  .LBB16_2: # %bb2979; RV64SFBANDESAX45-NEXT:    # =>This Inner Loop Header: Depth=1980; RV64SFBANDESAX45-NEXT:    mv a0, s1981; RV64SFBANDESAX45-NEXT:    call bar982; RV64SFBANDESAX45-NEXT:    sllw s1, s1, s0983; RV64SFBANDESAX45-NEXT:    bnez a0, .LBB16_2984; RV64SFBANDESAX45-NEXT:  # %bb.3: # %bb7985; RV64SFBANDESAX45-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload986; RV64SFBANDESAX45-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload987; RV64SFBANDESAX45-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload988; RV64SFBANDESAX45-NEXT:    addi sp, sp, 32989; RV64SFBANDESAX45-NEXT:    ret990;991; ZICOND-LABEL: sextw_removal_ccaddw:992; ZICOND:       # %bb.0: # %bb993; ZICOND-NEXT:    addi sp, sp, -32994; ZICOND-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill995; ZICOND-NEXT:    mv s1, a1996; ZICOND-NEXT:    andi a0, a0, 1997; ZICOND-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill998; ZICOND-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill999; ZICOND-NEXT:    mv s0, a21000; ZICOND-NEXT:    beqz a0, .LBB16_41001; ZICOND-NEXT:  # %bb.3: # %bb1002; ZICOND-NEXT:    addw s1, a1, a31003; ZICOND-NEXT:  .LBB16_4: # %bb1004; ZICOND-NEXT:  .LBB16_1: # %bb21005; ZICOND-NEXT:    # =>This Inner Loop Header: Depth=11006; ZICOND-NEXT:    mv a0, s11007; ZICOND-NEXT:    call bar1008; ZICOND-NEXT:    sllw s1, s1, s01009; ZICOND-NEXT:    bnez a0, .LBB16_11010; ZICOND-NEXT:  # %bb.2: # %bb71011; ZICOND-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1012; ZICOND-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1013; ZICOND-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1014; ZICOND-NEXT:    addi sp, sp, 321015; ZICOND-NEXT:    ret1016;1017; RV32SFB-LABEL: sextw_removal_ccaddw:1018; RV32SFB:       # %bb.0: # %bb1019; RV32SFB-NEXT:    addi sp, sp, -161020; RV32SFB-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1021; RV32SFB-NEXT:    mv s1, a11022; RV32SFB-NEXT:    andi a0, a0, 11023; RV32SFB-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1024; RV32SFB-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1025; RV32SFB-NEXT:    mv s0, a21026; RV32SFB-NEXT:    beqz a0, .LBB16_41027; RV32SFB-NEXT:  # %bb.3: # %bb1028; RV32SFB-NEXT:    add s1, a1, a31029; RV32SFB-NEXT:  .LBB16_4: # %bb1030; RV32SFB-NEXT:  .LBB16_1: # %bb21031; RV32SFB-NEXT:    # =>This Inner Loop Header: Depth=11032; RV32SFB-NEXT:    mv a0, s11033; RV32SFB-NEXT:    call bar1034; RV32SFB-NEXT:    sll s1, s1, s01035; RV32SFB-NEXT:    bnez a0, .LBB16_11036; RV32SFB-NEXT:  # %bb.2: # %bb71037; RV32SFB-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1038; RV32SFB-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1039; RV32SFB-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1040; RV32SFB-NEXT:    addi sp, sp, 161041; RV32SFB-NEXT:    ret1042bb:1043  %sel = select i1 %c, i32 %arg2, i32 01044  %or = add i32 %sel, %arg1045  br label %bb21046 1047bb2:                                              ; preds = %bb2, %bb1048  %i3 = phi i32 [ %or, %bb ], [ %i5, %bb2 ]1049  %i4 = tail call signext i32 @bar(i32 signext %i3)1050  %i5 = shl i32 %i3, %arg11051  %i6 = icmp eq i32 %i4, 01052  br i1 %i6, label %bb7, label %bb21053 1054bb7:                                              ; preds = %bb21055  ret void1056}1057 1058define i32 @select_sllw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {1059; NOSFB-LABEL: select_sllw:1060; NOSFB:       # %bb.0: # %entry1061; NOSFB-NEXT:    bnez a3, .LBB17_21062; NOSFB-NEXT:  # %bb.1: # %entry1063; NOSFB-NEXT:    sllw a2, a0, a11064; NOSFB-NEXT:  .LBB17_2: # %entry1065; NOSFB-NEXT:    mv a0, a21066; NOSFB-NEXT:    ret1067;1068; RV64SFBSIFIVEU74-LABEL: select_sllw:1069; RV64SFBSIFIVEU74:       # %bb.0: # %entry1070; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB17_21071; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1072; RV64SFBSIFIVEU74-NEXT:    sllw a2, a0, a11073; RV64SFBSIFIVEU74-NEXT:  .LBB17_2: # %entry1074; RV64SFBSIFIVEU74-NEXT:    mv a0, a21075; RV64SFBSIFIVEU74-NEXT:    ret1076;1077; RV64SFBANDESAX45-LABEL: select_sllw:1078; RV64SFBANDESAX45:       # %bb.0: # %entry1079; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB17_21080; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1081; RV64SFBANDESAX45-NEXT:    sllw a2, a0, a11082; RV64SFBANDESAX45-NEXT:  .LBB17_2: # %entry1083; RV64SFBANDESAX45-NEXT:    mv a0, a21084; RV64SFBANDESAX45-NEXT:    ret1085;1086; ZICOND-LABEL: select_sllw:1087; ZICOND:       # %bb.0: # %entry1088; ZICOND-NEXT:    bnez a3, .LBB17_21089; ZICOND-NEXT:  # %bb.1: # %entry1090; ZICOND-NEXT:    sllw a2, a0, a11091; ZICOND-NEXT:  .LBB17_2: # %entry1092; ZICOND-NEXT:    mv a0, a21093; ZICOND-NEXT:    ret1094;1095; RV32SFB-LABEL: select_sllw:1096; RV32SFB:       # %bb.0: # %entry1097; RV32SFB-NEXT:    bnez a3, .LBB17_21098; RV32SFB-NEXT:  # %bb.1: # %entry1099; RV32SFB-NEXT:    sll a2, a0, a11100; RV32SFB-NEXT:  .LBB17_2: # %entry1101; RV32SFB-NEXT:    mv a0, a21102; RV32SFB-NEXT:    ret1103entry:1104 %0 = shl i32 %A, %B1105 %1 = select i1 %cond, i32 %C, i32 %01106 ret i32 %11107}1108 1109define i32 @select_srlw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {1110; NOSFB-LABEL: select_srlw:1111; NOSFB:       # %bb.0: # %entry1112; NOSFB-NEXT:    bnez a3, .LBB18_21113; NOSFB-NEXT:  # %bb.1: # %entry1114; NOSFB-NEXT:    srlw a2, a0, a11115; NOSFB-NEXT:  .LBB18_2: # %entry1116; NOSFB-NEXT:    mv a0, a21117; NOSFB-NEXT:    ret1118;1119; RV64SFBSIFIVEU74-LABEL: select_srlw:1120; RV64SFBSIFIVEU74:       # %bb.0: # %entry1121; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB18_21122; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1123; RV64SFBSIFIVEU74-NEXT:    srlw a2, a0, a11124; RV64SFBSIFIVEU74-NEXT:  .LBB18_2: # %entry1125; RV64SFBSIFIVEU74-NEXT:    mv a0, a21126; RV64SFBSIFIVEU74-NEXT:    ret1127;1128; RV64SFBANDESAX45-LABEL: select_srlw:1129; RV64SFBANDESAX45:       # %bb.0: # %entry1130; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB18_21131; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1132; RV64SFBANDESAX45-NEXT:    srlw a2, a0, a11133; RV64SFBANDESAX45-NEXT:  .LBB18_2: # %entry1134; RV64SFBANDESAX45-NEXT:    mv a0, a21135; RV64SFBANDESAX45-NEXT:    ret1136;1137; ZICOND-LABEL: select_srlw:1138; ZICOND:       # %bb.0: # %entry1139; ZICOND-NEXT:    bnez a3, .LBB18_21140; ZICOND-NEXT:  # %bb.1: # %entry1141; ZICOND-NEXT:    srlw a2, a0, a11142; ZICOND-NEXT:  .LBB18_2: # %entry1143; ZICOND-NEXT:    mv a0, a21144; ZICOND-NEXT:    ret1145;1146; RV32SFB-LABEL: select_srlw:1147; RV32SFB:       # %bb.0: # %entry1148; RV32SFB-NEXT:    bnez a3, .LBB18_21149; RV32SFB-NEXT:  # %bb.1: # %entry1150; RV32SFB-NEXT:    srl a2, a0, a11151; RV32SFB-NEXT:  .LBB18_2: # %entry1152; RV32SFB-NEXT:    mv a0, a21153; RV32SFB-NEXT:    ret1154entry:1155 %0 = lshr i32 %A, %B1156 %1 = select i1 %cond, i32 %C, i32 %01157 ret i32 %11158}1159 1160define i32 @select_sraw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {1161; NOSFB-LABEL: select_sraw:1162; NOSFB:       # %bb.0: # %entry1163; NOSFB-NEXT:    bnez a3, .LBB19_21164; NOSFB-NEXT:  # %bb.1: # %entry1165; NOSFB-NEXT:    sraw a2, a0, a11166; NOSFB-NEXT:  .LBB19_2: # %entry1167; NOSFB-NEXT:    mv a0, a21168; NOSFB-NEXT:    ret1169;1170; RV64SFBSIFIVEU74-LABEL: select_sraw:1171; RV64SFBSIFIVEU74:       # %bb.0: # %entry1172; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB19_21173; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1174; RV64SFBSIFIVEU74-NEXT:    sraw a2, a0, a11175; RV64SFBSIFIVEU74-NEXT:  .LBB19_2: # %entry1176; RV64SFBSIFIVEU74-NEXT:    mv a0, a21177; RV64SFBSIFIVEU74-NEXT:    ret1178;1179; RV64SFBANDESAX45-LABEL: select_sraw:1180; RV64SFBANDESAX45:       # %bb.0: # %entry1181; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB19_21182; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1183; RV64SFBANDESAX45-NEXT:    sraw a2, a0, a11184; RV64SFBANDESAX45-NEXT:  .LBB19_2: # %entry1185; RV64SFBANDESAX45-NEXT:    mv a0, a21186; RV64SFBANDESAX45-NEXT:    ret1187;1188; ZICOND-LABEL: select_sraw:1189; ZICOND:       # %bb.0: # %entry1190; ZICOND-NEXT:    bnez a3, .LBB19_21191; ZICOND-NEXT:  # %bb.1: # %entry1192; ZICOND-NEXT:    sraw a2, a0, a11193; ZICOND-NEXT:  .LBB19_2: # %entry1194; ZICOND-NEXT:    mv a0, a21195; ZICOND-NEXT:    ret1196;1197; RV32SFB-LABEL: select_sraw:1198; RV32SFB:       # %bb.0: # %entry1199; RV32SFB-NEXT:    bnez a3, .LBB19_21200; RV32SFB-NEXT:  # %bb.1: # %entry1201; RV32SFB-NEXT:    sra a2, a0, a11202; RV32SFB-NEXT:  .LBB19_2: # %entry1203; RV32SFB-NEXT:    mv a0, a21204; RV32SFB-NEXT:    ret1205entry:1206 %0 = ashr i32 %A, %B1207 %1 = select i1 %cond, i32 %C, i32 %01208 ret i32 %11209}1210 1211define i64 @select_sll(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {1212; NOSFB-LABEL: select_sll:1213; NOSFB:       # %bb.0: # %entry1214; NOSFB-NEXT:    bnez a3, .LBB20_21215; NOSFB-NEXT:  # %bb.1: # %entry1216; NOSFB-NEXT:    sll a2, a0, a11217; NOSFB-NEXT:  .LBB20_2: # %entry1218; NOSFB-NEXT:    mv a0, a21219; NOSFB-NEXT:    ret1220;1221; RV64SFBSIFIVEU74-LABEL: select_sll:1222; RV64SFBSIFIVEU74:       # %bb.0: # %entry1223; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB20_21224; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1225; RV64SFBSIFIVEU74-NEXT:    sll a2, a0, a11226; RV64SFBSIFIVEU74-NEXT:  .LBB20_2: # %entry1227; RV64SFBSIFIVEU74-NEXT:    mv a0, a21228; RV64SFBSIFIVEU74-NEXT:    ret1229;1230; RV64SFBANDESAX45-LABEL: select_sll:1231; RV64SFBANDESAX45:       # %bb.0: # %entry1232; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB20_21233; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1234; RV64SFBANDESAX45-NEXT:    sll a2, a0, a11235; RV64SFBANDESAX45-NEXT:  .LBB20_2: # %entry1236; RV64SFBANDESAX45-NEXT:    mv a0, a21237; RV64SFBANDESAX45-NEXT:    ret1238;1239; ZICOND-LABEL: select_sll:1240; ZICOND:       # %bb.0: # %entry1241; ZICOND-NEXT:    bnez a3, .LBB20_21242; ZICOND-NEXT:  # %bb.1: # %entry1243; ZICOND-NEXT:    sll a2, a0, a11244; ZICOND-NEXT:  .LBB20_2: # %entry1245; ZICOND-NEXT:    mv a0, a21246; ZICOND-NEXT:    ret1247;1248; RV32SFB-LABEL: select_sll:1249; RV32SFB:       # %bb.0: # %entry1250; RV32SFB-NEXT:    sll a3, a0, a21251; RV32SFB-NEXT:    not a7, a21252; RV32SFB-NEXT:    srli a0, a0, 11253; RV32SFB-NEXT:    sll t0, a1, a21254; RV32SFB-NEXT:    addi a2, a2, -321255; RV32SFB-NEXT:    srl a0, a0, a71256; RV32SFB-NEXT:    mv a1, a31257; RV32SFB-NEXT:    bltz a2, .LBB20_21258; RV32SFB-NEXT:  # %bb.1: # %entry1259; RV32SFB-NEXT:    li a3, 01260; RV32SFB-NEXT:  .LBB20_2: # %entry1261; RV32SFB-NEXT:    bgez a2, .LBB20_41262; RV32SFB-NEXT:  # %bb.3: # %entry1263; RV32SFB-NEXT:    or a1, t0, a01264; RV32SFB-NEXT:  .LBB20_4: # %entry1265; RV32SFB-NEXT:    beqz a6, .LBB20_61266; RV32SFB-NEXT:  # %bb.5: # %entry1267; RV32SFB-NEXT:    mv a3, a41268; RV32SFB-NEXT:  .LBB20_6: # %entry1269; RV32SFB-NEXT:    beqz a6, .LBB20_81270; RV32SFB-NEXT:  # %bb.7: # %entry1271; RV32SFB-NEXT:    mv a1, a51272; RV32SFB-NEXT:  .LBB20_8: # %entry1273; RV32SFB-NEXT:    mv a0, a31274; RV32SFB-NEXT:    ret1275entry:1276 %0 = shl i64 %A, %B1277 %1 = select i1 %cond, i64 %C, i64 %01278 ret i64 %11279}1280 1281define i64 @select_srl(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {1282; NOSFB-LABEL: select_srl:1283; NOSFB:       # %bb.0: # %entry1284; NOSFB-NEXT:    bnez a3, .LBB21_21285; NOSFB-NEXT:  # %bb.1: # %entry1286; NOSFB-NEXT:    srl a2, a0, a11287; NOSFB-NEXT:  .LBB21_2: # %entry1288; NOSFB-NEXT:    mv a0, a21289; NOSFB-NEXT:    ret1290;1291; RV64SFBSIFIVEU74-LABEL: select_srl:1292; RV64SFBSIFIVEU74:       # %bb.0: # %entry1293; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB21_21294; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1295; RV64SFBSIFIVEU74-NEXT:    srl a2, a0, a11296; RV64SFBSIFIVEU74-NEXT:  .LBB21_2: # %entry1297; RV64SFBSIFIVEU74-NEXT:    mv a0, a21298; RV64SFBSIFIVEU74-NEXT:    ret1299;1300; RV64SFBANDESAX45-LABEL: select_srl:1301; RV64SFBANDESAX45:       # %bb.0: # %entry1302; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB21_21303; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1304; RV64SFBANDESAX45-NEXT:    srl a2, a0, a11305; RV64SFBANDESAX45-NEXT:  .LBB21_2: # %entry1306; RV64SFBANDESAX45-NEXT:    mv a0, a21307; RV64SFBANDESAX45-NEXT:    ret1308;1309; ZICOND-LABEL: select_srl:1310; ZICOND:       # %bb.0: # %entry1311; ZICOND-NEXT:    bnez a3, .LBB21_21312; ZICOND-NEXT:  # %bb.1: # %entry1313; ZICOND-NEXT:    srl a2, a0, a11314; ZICOND-NEXT:  .LBB21_2: # %entry1315; ZICOND-NEXT:    mv a0, a21316; ZICOND-NEXT:    ret1317;1318; RV32SFB-LABEL: select_srl:1319; RV32SFB:       # %bb.0: # %entry1320; RV32SFB-NEXT:    srl a3, a1, a21321; RV32SFB-NEXT:    not a7, a21322; RV32SFB-NEXT:    slli a1, a1, 11323; RV32SFB-NEXT:    srl t0, a0, a21324; RV32SFB-NEXT:    addi a2, a2, -321325; RV32SFB-NEXT:    sll a1, a1, a71326; RV32SFB-NEXT:    mv a0, a31327; RV32SFB-NEXT:    bltz a2, .LBB21_21328; RV32SFB-NEXT:  # %bb.1: # %entry1329; RV32SFB-NEXT:    li a3, 01330; RV32SFB-NEXT:  .LBB21_2: # %entry1331; RV32SFB-NEXT:    bgez a2, .LBB21_41332; RV32SFB-NEXT:  # %bb.3: # %entry1333; RV32SFB-NEXT:    or a0, t0, a11334; RV32SFB-NEXT:  .LBB21_4: # %entry1335; RV32SFB-NEXT:    beqz a6, .LBB21_61336; RV32SFB-NEXT:  # %bb.5: # %entry1337; RV32SFB-NEXT:    mv a3, a51338; RV32SFB-NEXT:  .LBB21_6: # %entry1339; RV32SFB-NEXT:    beqz a6, .LBB21_81340; RV32SFB-NEXT:  # %bb.7: # %entry1341; RV32SFB-NEXT:    mv a0, a41342; RV32SFB-NEXT:  .LBB21_8: # %entry1343; RV32SFB-NEXT:    mv a1, a31344; RV32SFB-NEXT:    ret1345entry:1346 %0 = lshr i64 %A, %B1347 %1 = select i1 %cond, i64 %C, i64 %01348 ret i64 %11349}1350 1351define i64 @select_sra(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {1352; NOSFB-LABEL: select_sra:1353; NOSFB:       # %bb.0: # %entry1354; NOSFB-NEXT:    bnez a3, .LBB22_21355; NOSFB-NEXT:  # %bb.1: # %entry1356; NOSFB-NEXT:    sra a2, a0, a11357; NOSFB-NEXT:  .LBB22_2: # %entry1358; NOSFB-NEXT:    mv a0, a21359; NOSFB-NEXT:    ret1360;1361; RV64SFBSIFIVEU74-LABEL: select_sra:1362; RV64SFBSIFIVEU74:       # %bb.0: # %entry1363; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB22_21364; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1365; RV64SFBSIFIVEU74-NEXT:    sra a2, a0, a11366; RV64SFBSIFIVEU74-NEXT:  .LBB22_2: # %entry1367; RV64SFBSIFIVEU74-NEXT:    mv a0, a21368; RV64SFBSIFIVEU74-NEXT:    ret1369;1370; RV64SFBANDESAX45-LABEL: select_sra:1371; RV64SFBANDESAX45:       # %bb.0: # %entry1372; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB22_21373; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1374; RV64SFBANDESAX45-NEXT:    sra a2, a0, a11375; RV64SFBANDESAX45-NEXT:  .LBB22_2: # %entry1376; RV64SFBANDESAX45-NEXT:    mv a0, a21377; RV64SFBANDESAX45-NEXT:    ret1378;1379; ZICOND-LABEL: select_sra:1380; ZICOND:       # %bb.0: # %entry1381; ZICOND-NEXT:    bnez a3, .LBB22_21382; ZICOND-NEXT:  # %bb.1: # %entry1383; ZICOND-NEXT:    sra a2, a0, a11384; ZICOND-NEXT:  .LBB22_2: # %entry1385; ZICOND-NEXT:    mv a0, a21386; ZICOND-NEXT:    ret1387;1388; RV32SFB-LABEL: select_sra:1389; RV32SFB:       # %bb.0: # %entry1390; RV32SFB-NEXT:    sra a3, a1, a21391; RV32SFB-NEXT:    not a7, a21392; RV32SFB-NEXT:    slli t0, a1, 11393; RV32SFB-NEXT:    srl t1, a0, a21394; RV32SFB-NEXT:    addi a2, a2, -321395; RV32SFB-NEXT:    sll a7, t0, a71396; RV32SFB-NEXT:    mv a0, a31397; RV32SFB-NEXT:    bltz a2, .LBB22_21398; RV32SFB-NEXT:  # %bb.1: # %entry1399; RV32SFB-NEXT:    srai a3, a1, 311400; RV32SFB-NEXT:  .LBB22_2: # %entry1401; RV32SFB-NEXT:    bgez a2, .LBB22_41402; RV32SFB-NEXT:  # %bb.3: # %entry1403; RV32SFB-NEXT:    or a0, t1, a71404; RV32SFB-NEXT:  .LBB22_4: # %entry1405; RV32SFB-NEXT:    beqz a6, .LBB22_61406; RV32SFB-NEXT:  # %bb.5: # %entry1407; RV32SFB-NEXT:    mv a3, a51408; RV32SFB-NEXT:  .LBB22_6: # %entry1409; RV32SFB-NEXT:    beqz a6, .LBB22_81410; RV32SFB-NEXT:  # %bb.7: # %entry1411; RV32SFB-NEXT:    mv a0, a41412; RV32SFB-NEXT:  .LBB22_8: # %entry1413; RV32SFB-NEXT:    mv a1, a31414; RV32SFB-NEXT:    ret1415entry:1416 %0 = ashr i64 %A, %B1417 %1 = select i1 %cond, i64 %C, i64 %01418 ret i64 %11419}1420 1421define i32 @select_addiw(i32 %A, i32 %C, i1 zeroext %cond) {1422; NOSFB-LABEL: select_addiw:1423; NOSFB:       # %bb.0: # %entry1424; NOSFB-NEXT:    bnez a2, .LBB23_21425; NOSFB-NEXT:  # %bb.1: # %entry1426; NOSFB-NEXT:    addiw a1, a0, 12341427; NOSFB-NEXT:  .LBB23_2: # %entry1428; NOSFB-NEXT:    mv a0, a11429; NOSFB-NEXT:    ret1430;1431; RV64SFBSIFIVEU74-LABEL: select_addiw:1432; RV64SFBSIFIVEU74:       # %bb.0: # %entry1433; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB23_21434; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1435; RV64SFBSIFIVEU74-NEXT:    addiw a1, a0, 12341436; RV64SFBSIFIVEU74-NEXT:  .LBB23_2: # %entry1437; RV64SFBSIFIVEU74-NEXT:    mv a0, a11438; RV64SFBSIFIVEU74-NEXT:    ret1439;1440; RV64SFBANDESAX45-LABEL: select_addiw:1441; RV64SFBANDESAX45:       # %bb.0: # %entry1442; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB23_21443; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1444; RV64SFBANDESAX45-NEXT:    addiw a1, a0, 12341445; RV64SFBANDESAX45-NEXT:  .LBB23_2: # %entry1446; RV64SFBANDESAX45-NEXT:    mv a0, a11447; RV64SFBANDESAX45-NEXT:    ret1448;1449; ZICOND-LABEL: select_addiw:1450; ZICOND:       # %bb.0: # %entry1451; ZICOND-NEXT:    bnez a2, .LBB23_21452; ZICOND-NEXT:  # %bb.1: # %entry1453; ZICOND-NEXT:    addiw a1, a0, 12341454; ZICOND-NEXT:  .LBB23_2: # %entry1455; ZICOND-NEXT:    mv a0, a11456; ZICOND-NEXT:    ret1457;1458; RV32SFB-LABEL: select_addiw:1459; RV32SFB:       # %bb.0: # %entry1460; RV32SFB-NEXT:    bnez a2, .LBB23_21461; RV32SFB-NEXT:  # %bb.1: # %entry1462; RV32SFB-NEXT:    addi a1, a0, 12341463; RV32SFB-NEXT:  .LBB23_2: # %entry1464; RV32SFB-NEXT:    mv a0, a11465; RV32SFB-NEXT:    ret1466entry:1467 %0 = add i32 %A, 12341468 %1 = select i1 %cond, i32 %C, i32 %01469 ret i32 %11470}1471 1472define i64 @select_addi(i64 %A, i64 %C, i1 zeroext %cond) {1473; NOSFB-LABEL: select_addi:1474; NOSFB:       # %bb.0: # %entry1475; NOSFB-NEXT:    bnez a2, .LBB24_21476; NOSFB-NEXT:  # %bb.1: # %entry1477; NOSFB-NEXT:    addi a1, a0, 12341478; NOSFB-NEXT:  .LBB24_2: # %entry1479; NOSFB-NEXT:    mv a0, a11480; NOSFB-NEXT:    ret1481;1482; RV64SFBSIFIVEU74-LABEL: select_addi:1483; RV64SFBSIFIVEU74:       # %bb.0: # %entry1484; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB24_21485; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1486; RV64SFBSIFIVEU74-NEXT:    addi a1, a0, 12341487; RV64SFBSIFIVEU74-NEXT:  .LBB24_2: # %entry1488; RV64SFBSIFIVEU74-NEXT:    mv a0, a11489; RV64SFBSIFIVEU74-NEXT:    ret1490;1491; RV64SFBANDESAX45-LABEL: select_addi:1492; RV64SFBANDESAX45:       # %bb.0: # %entry1493; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB24_21494; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1495; RV64SFBANDESAX45-NEXT:    addi a1, a0, 12341496; RV64SFBANDESAX45-NEXT:  .LBB24_2: # %entry1497; RV64SFBANDESAX45-NEXT:    mv a0, a11498; RV64SFBANDESAX45-NEXT:    ret1499;1500; ZICOND-LABEL: select_addi:1501; ZICOND:       # %bb.0: # %entry1502; ZICOND-NEXT:    bnez a2, .LBB24_21503; ZICOND-NEXT:  # %bb.1: # %entry1504; ZICOND-NEXT:    addi a1, a0, 12341505; ZICOND-NEXT:  .LBB24_2: # %entry1506; ZICOND-NEXT:    mv a0, a11507; ZICOND-NEXT:    ret1508;1509; RV32SFB-LABEL: select_addi:1510; RV32SFB:       # %bb.0: # %entry1511; RV32SFB-NEXT:    addi a5, a0, 12341512; RV32SFB-NEXT:    sltu a0, a5, a01513; RV32SFB-NEXT:    beqz a4, .LBB24_21514; RV32SFB-NEXT:  # %bb.1: # %entry1515; RV32SFB-NEXT:    mv a5, a21516; RV32SFB-NEXT:  .LBB24_2: # %entry1517; RV32SFB-NEXT:    bnez a4, .LBB24_41518; RV32SFB-NEXT:  # %bb.3: # %entry1519; RV32SFB-NEXT:    add a3, a1, a01520; RV32SFB-NEXT:  .LBB24_4: # %entry1521; RV32SFB-NEXT:    mv a0, a51522; RV32SFB-NEXT:    mv a1, a31523; RV32SFB-NEXT:    ret1524entry:1525 %0 = add i64 %A, 12341526 %1 = select i1 %cond, i64 %C, i64 %01527 ret i64 %11528}1529 1530define i64 @select_andi(i64 %A, i64 %C, i1 zeroext %cond) {1531; NOSFB-LABEL: select_andi:1532; NOSFB:       # %bb.0: # %entry1533; NOSFB-NEXT:    bnez a2, .LBB25_21534; NOSFB-NEXT:  # %bb.1: # %entry1535; NOSFB-NEXT:    andi a1, a0, 5671536; NOSFB-NEXT:  .LBB25_2: # %entry1537; NOSFB-NEXT:    mv a0, a11538; NOSFB-NEXT:    ret1539;1540; RV64SFBSIFIVEU74-LABEL: select_andi:1541; RV64SFBSIFIVEU74:       # %bb.0: # %entry1542; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB25_21543; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1544; RV64SFBSIFIVEU74-NEXT:    andi a1, a0, 5671545; RV64SFBSIFIVEU74-NEXT:  .LBB25_2: # %entry1546; RV64SFBSIFIVEU74-NEXT:    mv a0, a11547; RV64SFBSIFIVEU74-NEXT:    ret1548;1549; RV64SFBANDESAX45-LABEL: select_andi:1550; RV64SFBANDESAX45:       # %bb.0: # %entry1551; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB25_21552; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1553; RV64SFBANDESAX45-NEXT:    andi a1, a0, 5671554; RV64SFBANDESAX45-NEXT:  .LBB25_2: # %entry1555; RV64SFBANDESAX45-NEXT:    mv a0, a11556; RV64SFBANDESAX45-NEXT:    ret1557;1558; ZICOND-LABEL: select_andi:1559; ZICOND:       # %bb.0: # %entry1560; ZICOND-NEXT:    bnez a2, .LBB25_21561; ZICOND-NEXT:  # %bb.1: # %entry1562; ZICOND-NEXT:    andi a1, a0, 5671563; ZICOND-NEXT:  .LBB25_2: # %entry1564; ZICOND-NEXT:    mv a0, a11565; ZICOND-NEXT:    ret1566;1567; RV32SFB-LABEL: select_andi:1568; RV32SFB:       # %bb.0: # %entry1569; RV32SFB-NEXT:    mv a1, a31570; RV32SFB-NEXT:    bnez a4, .LBB25_21571; RV32SFB-NEXT:  # %bb.1: # %entry1572; RV32SFB-NEXT:    andi a2, a0, 5671573; RV32SFB-NEXT:  .LBB25_2: # %entry1574; RV32SFB-NEXT:    mv a0, a21575; RV32SFB-NEXT:    bnez a4, .LBB25_41576; RV32SFB-NEXT:  # %bb.3: # %entry1577; RV32SFB-NEXT:    li a1, 01578; RV32SFB-NEXT:  .LBB25_4: # %entry1579; RV32SFB-NEXT:    ret1580entry:1581 %0 = and i64 %A, 5671582 %1 = select i1 %cond, i64 %C, i64 %01583 ret i64 %11584}1585 1586define i64 @select_ori(i64 %A, i64 %C, i1 zeroext %cond) {1587; NOSFB-LABEL: select_ori:1588; NOSFB:       # %bb.0: # %entry1589; NOSFB-NEXT:    bnez a2, .LBB26_21590; NOSFB-NEXT:  # %bb.1: # %entry1591; NOSFB-NEXT:    ori a1, a0, 8901592; NOSFB-NEXT:  .LBB26_2: # %entry1593; NOSFB-NEXT:    mv a0, a11594; NOSFB-NEXT:    ret1595;1596; RV64SFBSIFIVEU74-LABEL: select_ori:1597; RV64SFBSIFIVEU74:       # %bb.0: # %entry1598; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB26_21599; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1600; RV64SFBSIFIVEU74-NEXT:    ori a1, a0, 8901601; RV64SFBSIFIVEU74-NEXT:  .LBB26_2: # %entry1602; RV64SFBSIFIVEU74-NEXT:    mv a0, a11603; RV64SFBSIFIVEU74-NEXT:    ret1604;1605; RV64SFBANDESAX45-LABEL: select_ori:1606; RV64SFBANDESAX45:       # %bb.0: # %entry1607; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB26_21608; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1609; RV64SFBANDESAX45-NEXT:    ori a1, a0, 8901610; RV64SFBANDESAX45-NEXT:  .LBB26_2: # %entry1611; RV64SFBANDESAX45-NEXT:    mv a0, a11612; RV64SFBANDESAX45-NEXT:    ret1613;1614; ZICOND-LABEL: select_ori:1615; ZICOND:       # %bb.0: # %entry1616; ZICOND-NEXT:    bnez a2, .LBB26_21617; ZICOND-NEXT:  # %bb.1: # %entry1618; ZICOND-NEXT:    ori a1, a0, 8901619; ZICOND-NEXT:  .LBB26_2: # %entry1620; ZICOND-NEXT:    mv a0, a11621; ZICOND-NEXT:    ret1622;1623; RV32SFB-LABEL: select_ori:1624; RV32SFB:       # %bb.0: # %entry1625; RV32SFB-NEXT:    bnez a4, .LBB26_21626; RV32SFB-NEXT:  # %bb.1: # %entry1627; RV32SFB-NEXT:    ori a2, a0, 8901628; RV32SFB-NEXT:  .LBB26_2: # %entry1629; RV32SFB-NEXT:    beqz a4, .LBB26_41630; RV32SFB-NEXT:  # %bb.3: # %entry1631; RV32SFB-NEXT:    mv a1, a31632; RV32SFB-NEXT:  .LBB26_4: # %entry1633; RV32SFB-NEXT:    mv a0, a21634; RV32SFB-NEXT:    ret1635entry:1636 %0 = or i64 %A, 8901637 %1 = select i1 %cond, i64 %C, i64 %01638 ret i64 %11639}1640 1641define i64 @select_xori(i64 %A, i64 %C, i1 zeroext %cond) {1642; NOSFB-LABEL: select_xori:1643; NOSFB:       # %bb.0: # %entry1644; NOSFB-NEXT:    bnez a2, .LBB27_21645; NOSFB-NEXT:  # %bb.1: # %entry1646; NOSFB-NEXT:    xori a1, a0, 3211647; NOSFB-NEXT:  .LBB27_2: # %entry1648; NOSFB-NEXT:    mv a0, a11649; NOSFB-NEXT:    ret1650;1651; RV64SFBSIFIVEU74-LABEL: select_xori:1652; RV64SFBSIFIVEU74:       # %bb.0: # %entry1653; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB27_21654; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1655; RV64SFBSIFIVEU74-NEXT:    xori a1, a0, 3211656; RV64SFBSIFIVEU74-NEXT:  .LBB27_2: # %entry1657; RV64SFBSIFIVEU74-NEXT:    mv a0, a11658; RV64SFBSIFIVEU74-NEXT:    ret1659;1660; RV64SFBANDESAX45-LABEL: select_xori:1661; RV64SFBANDESAX45:       # %bb.0: # %entry1662; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB27_21663; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1664; RV64SFBANDESAX45-NEXT:    xori a1, a0, 3211665; RV64SFBANDESAX45-NEXT:  .LBB27_2: # %entry1666; RV64SFBANDESAX45-NEXT:    mv a0, a11667; RV64SFBANDESAX45-NEXT:    ret1668;1669; ZICOND-LABEL: select_xori:1670; ZICOND:       # %bb.0: # %entry1671; ZICOND-NEXT:    bnez a2, .LBB27_21672; ZICOND-NEXT:  # %bb.1: # %entry1673; ZICOND-NEXT:    xori a1, a0, 3211674; ZICOND-NEXT:  .LBB27_2: # %entry1675; ZICOND-NEXT:    mv a0, a11676; ZICOND-NEXT:    ret1677;1678; RV32SFB-LABEL: select_xori:1679; RV32SFB:       # %bb.0: # %entry1680; RV32SFB-NEXT:    bnez a4, .LBB27_21681; RV32SFB-NEXT:  # %bb.1: # %entry1682; RV32SFB-NEXT:    xori a2, a0, 3211683; RV32SFB-NEXT:  .LBB27_2: # %entry1684; RV32SFB-NEXT:    beqz a4, .LBB27_41685; RV32SFB-NEXT:  # %bb.3: # %entry1686; RV32SFB-NEXT:    mv a1, a31687; RV32SFB-NEXT:  .LBB27_4: # %entry1688; RV32SFB-NEXT:    mv a0, a21689; RV32SFB-NEXT:    ret1690entry:1691 %0 = xor i64 %A, 3211692 %1 = select i1 %cond, i64 %C, i64 %01693 ret i64 %11694}1695 1696define i64 @select_slli(i64 %A, i64 %C, i1 zeroext %cond) {1697; NOSFB-LABEL: select_slli:1698; NOSFB:       # %bb.0: # %entry1699; NOSFB-NEXT:    bnez a2, .LBB28_21700; NOSFB-NEXT:  # %bb.1: # %entry1701; NOSFB-NEXT:    slli a1, a0, 321702; NOSFB-NEXT:  .LBB28_2: # %entry1703; NOSFB-NEXT:    mv a0, a11704; NOSFB-NEXT:    ret1705;1706; RV64SFBSIFIVEU74-LABEL: select_slli:1707; RV64SFBSIFIVEU74:       # %bb.0: # %entry1708; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB28_21709; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1710; RV64SFBSIFIVEU74-NEXT:    slli a1, a0, 321711; RV64SFBSIFIVEU74-NEXT:  .LBB28_2: # %entry1712; RV64SFBSIFIVEU74-NEXT:    mv a0, a11713; RV64SFBSIFIVEU74-NEXT:    ret1714;1715; RV64SFBANDESAX45-LABEL: select_slli:1716; RV64SFBANDESAX45:       # %bb.0: # %entry1717; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB28_21718; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1719; RV64SFBANDESAX45-NEXT:    slli a1, a0, 321720; RV64SFBANDESAX45-NEXT:  .LBB28_2: # %entry1721; RV64SFBANDESAX45-NEXT:    mv a0, a11722; RV64SFBANDESAX45-NEXT:    ret1723;1724; ZICOND-LABEL: select_slli:1725; ZICOND:       # %bb.0: # %entry1726; ZICOND-NEXT:    bnez a2, .LBB28_21727; ZICOND-NEXT:  # %bb.1: # %entry1728; ZICOND-NEXT:    slli a1, a0, 321729; ZICOND-NEXT:  .LBB28_2: # %entry1730; ZICOND-NEXT:    mv a0, a11731; ZICOND-NEXT:    ret1732;1733; RV32SFB-LABEL: select_slli:1734; RV32SFB:       # %bb.0: # %entry1735; RV32SFB-NEXT:    mv a1, a01736; RV32SFB-NEXT:    bnez a4, .LBB28_21737; RV32SFB-NEXT:  # %bb.1: # %entry1738; RV32SFB-NEXT:    li a2, 01739; RV32SFB-NEXT:  .LBB28_2: # %entry1740; RV32SFB-NEXT:    mv a0, a21741; RV32SFB-NEXT:    beqz a4, .LBB28_41742; RV32SFB-NEXT:  # %bb.3: # %entry1743; RV32SFB-NEXT:    mv a1, a31744; RV32SFB-NEXT:  .LBB28_4: # %entry1745; RV32SFB-NEXT:    ret1746entry:1747 %0 = shl i64 %A, 321748 %1 = select i1 %cond, i64 %C, i64 %01749 ret i64 %11750}1751 1752define i64 @select_srli(i64 %A, i64 %C, i1 zeroext %cond) {1753; NOSFB-LABEL: select_srli:1754; NOSFB:       # %bb.0: # %entry1755; NOSFB-NEXT:    bnez a2, .LBB29_21756; NOSFB-NEXT:  # %bb.1: # %entry1757; NOSFB-NEXT:    srli a1, a0, 351758; NOSFB-NEXT:  .LBB29_2: # %entry1759; NOSFB-NEXT:    mv a0, a11760; NOSFB-NEXT:    ret1761;1762; RV64SFBSIFIVEU74-LABEL: select_srli:1763; RV64SFBSIFIVEU74:       # %bb.0: # %entry1764; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB29_21765; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1766; RV64SFBSIFIVEU74-NEXT:    srli a1, a0, 351767; RV64SFBSIFIVEU74-NEXT:  .LBB29_2: # %entry1768; RV64SFBSIFIVEU74-NEXT:    mv a0, a11769; RV64SFBSIFIVEU74-NEXT:    ret1770;1771; RV64SFBANDESAX45-LABEL: select_srli:1772; RV64SFBANDESAX45:       # %bb.0: # %entry1773; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB29_21774; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1775; RV64SFBANDESAX45-NEXT:    srli a1, a0, 351776; RV64SFBANDESAX45-NEXT:  .LBB29_2: # %entry1777; RV64SFBANDESAX45-NEXT:    mv a0, a11778; RV64SFBANDESAX45-NEXT:    ret1779;1780; ZICOND-LABEL: select_srli:1781; ZICOND:       # %bb.0: # %entry1782; ZICOND-NEXT:    bnez a2, .LBB29_21783; ZICOND-NEXT:  # %bb.1: # %entry1784; ZICOND-NEXT:    srli a1, a0, 351785; ZICOND-NEXT:  .LBB29_2: # %entry1786; ZICOND-NEXT:    mv a0, a11787; ZICOND-NEXT:    ret1788;1789; RV32SFB-LABEL: select_srli:1790; RV32SFB:       # %bb.0: # %entry1791; RV32SFB-NEXT:    mv a0, a21792; RV32SFB-NEXT:    bnez a4, .LBB29_21793; RV32SFB-NEXT:  # %bb.1: # %entry1794; RV32SFB-NEXT:    li a3, 01795; RV32SFB-NEXT:  .LBB29_2: # %entry1796; RV32SFB-NEXT:    bnez a4, .LBB29_41797; RV32SFB-NEXT:  # %bb.3: # %entry1798; RV32SFB-NEXT:    srli a0, a1, 31799; RV32SFB-NEXT:  .LBB29_4: # %entry1800; RV32SFB-NEXT:    mv a1, a31801; RV32SFB-NEXT:    ret1802entry:1803 %0 = lshr i64 %A, 351804 %1 = select i1 %cond, i64 %C, i64 %01805 ret i64 %11806}1807 1808define i64 @select_srai(i64 %A, i64 %C, i1 zeroext %cond) {1809; NOSFB-LABEL: select_srai:1810; NOSFB:       # %bb.0: # %entry1811; NOSFB-NEXT:    bnez a2, .LBB30_21812; NOSFB-NEXT:  # %bb.1: # %entry1813; NOSFB-NEXT:    srai a1, a0, 631814; NOSFB-NEXT:  .LBB30_2: # %entry1815; NOSFB-NEXT:    mv a0, a11816; NOSFB-NEXT:    ret1817;1818; RV64SFBSIFIVEU74-LABEL: select_srai:1819; RV64SFBSIFIVEU74:       # %bb.0: # %entry1820; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB30_21821; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1822; RV64SFBSIFIVEU74-NEXT:    srai a1, a0, 631823; RV64SFBSIFIVEU74-NEXT:  .LBB30_2: # %entry1824; RV64SFBSIFIVEU74-NEXT:    mv a0, a11825; RV64SFBSIFIVEU74-NEXT:    ret1826;1827; RV64SFBANDESAX45-LABEL: select_srai:1828; RV64SFBANDESAX45:       # %bb.0: # %entry1829; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB30_21830; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1831; RV64SFBANDESAX45-NEXT:    srai a1, a0, 631832; RV64SFBANDESAX45-NEXT:  .LBB30_2: # %entry1833; RV64SFBANDESAX45-NEXT:    mv a0, a11834; RV64SFBANDESAX45-NEXT:    ret1835;1836; ZICOND-LABEL: select_srai:1837; ZICOND:       # %bb.0: # %entry1838; ZICOND-NEXT:    bnez a2, .LBB30_21839; ZICOND-NEXT:  # %bb.1: # %entry1840; ZICOND-NEXT:    srai a1, a0, 631841; ZICOND-NEXT:  .LBB30_2: # %entry1842; ZICOND-NEXT:    mv a0, a11843; ZICOND-NEXT:    ret1844;1845; RV32SFB-LABEL: select_srai:1846; RV32SFB:       # %bb.0: # %entry1847; RV32SFB-NEXT:    mv a0, a21848; RV32SFB-NEXT:    srai a1, a1, 311849; RV32SFB-NEXT:    bnez a4, .LBB30_21850; RV32SFB-NEXT:  # %bb.1: # %entry1851; RV32SFB-NEXT:    mv a0, a11852; RV32SFB-NEXT:  .LBB30_2: # %entry1853; RV32SFB-NEXT:    beqz a4, .LBB30_41854; RV32SFB-NEXT:  # %bb.3: # %entry1855; RV32SFB-NEXT:    mv a1, a31856; RV32SFB-NEXT:  .LBB30_4: # %entry1857; RV32SFB-NEXT:    ret1858entry:1859 %0 = ashr i64 %A, 631860 %1 = select i1 %cond, i64 %C, i64 %01861 ret i64 %11862}1863 1864define i32 @select_slliw(i32 %A, i32 %C, i1 zeroext %cond) {1865; NOSFB-LABEL: select_slliw:1866; NOSFB:       # %bb.0: # %entry1867; NOSFB-NEXT:    bnez a2, .LBB31_21868; NOSFB-NEXT:  # %bb.1: # %entry1869; NOSFB-NEXT:    slliw a1, a0, 31870; NOSFB-NEXT:  .LBB31_2: # %entry1871; NOSFB-NEXT:    mv a0, a11872; NOSFB-NEXT:    ret1873;1874; RV64SFBSIFIVEU74-LABEL: select_slliw:1875; RV64SFBSIFIVEU74:       # %bb.0: # %entry1876; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB31_21877; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1878; RV64SFBSIFIVEU74-NEXT:    slliw a1, a0, 31879; RV64SFBSIFIVEU74-NEXT:  .LBB31_2: # %entry1880; RV64SFBSIFIVEU74-NEXT:    mv a0, a11881; RV64SFBSIFIVEU74-NEXT:    ret1882;1883; RV64SFBANDESAX45-LABEL: select_slliw:1884; RV64SFBANDESAX45:       # %bb.0: # %entry1885; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB31_21886; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1887; RV64SFBANDESAX45-NEXT:    slliw a1, a0, 31888; RV64SFBANDESAX45-NEXT:  .LBB31_2: # %entry1889; RV64SFBANDESAX45-NEXT:    mv a0, a11890; RV64SFBANDESAX45-NEXT:    ret1891;1892; ZICOND-LABEL: select_slliw:1893; ZICOND:       # %bb.0: # %entry1894; ZICOND-NEXT:    bnez a2, .LBB31_21895; ZICOND-NEXT:  # %bb.1: # %entry1896; ZICOND-NEXT:    slliw a1, a0, 31897; ZICOND-NEXT:  .LBB31_2: # %entry1898; ZICOND-NEXT:    mv a0, a11899; ZICOND-NEXT:    ret1900;1901; RV32SFB-LABEL: select_slliw:1902; RV32SFB:       # %bb.0: # %entry1903; RV32SFB-NEXT:    bnez a2, .LBB31_21904; RV32SFB-NEXT:  # %bb.1: # %entry1905; RV32SFB-NEXT:    slli a1, a0, 31906; RV32SFB-NEXT:  .LBB31_2: # %entry1907; RV32SFB-NEXT:    mv a0, a11908; RV32SFB-NEXT:    ret1909entry:1910 %0 = shl i32 %A, 31911 %1 = select i1 %cond, i32 %C, i32 %01912 ret i32 %11913}1914 1915define i32 @select_srliw(i32 %A, i32 %C, i1 zeroext %cond) {1916; NOSFB-LABEL: select_srliw:1917; NOSFB:       # %bb.0: # %entry1918; NOSFB-NEXT:    bnez a2, .LBB32_21919; NOSFB-NEXT:  # %bb.1: # %entry1920; NOSFB-NEXT:    srliw a1, a0, 171921; NOSFB-NEXT:  .LBB32_2: # %entry1922; NOSFB-NEXT:    mv a0, a11923; NOSFB-NEXT:    ret1924;1925; RV64SFBSIFIVEU74-LABEL: select_srliw:1926; RV64SFBSIFIVEU74:       # %bb.0: # %entry1927; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB32_21928; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1929; RV64SFBSIFIVEU74-NEXT:    srliw a1, a0, 171930; RV64SFBSIFIVEU74-NEXT:  .LBB32_2: # %entry1931; RV64SFBSIFIVEU74-NEXT:    mv a0, a11932; RV64SFBSIFIVEU74-NEXT:    ret1933;1934; RV64SFBANDESAX45-LABEL: select_srliw:1935; RV64SFBANDESAX45:       # %bb.0: # %entry1936; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB32_21937; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1938; RV64SFBANDESAX45-NEXT:    srliw a1, a0, 171939; RV64SFBANDESAX45-NEXT:  .LBB32_2: # %entry1940; RV64SFBANDESAX45-NEXT:    mv a0, a11941; RV64SFBANDESAX45-NEXT:    ret1942;1943; ZICOND-LABEL: select_srliw:1944; ZICOND:       # %bb.0: # %entry1945; ZICOND-NEXT:    bnez a2, .LBB32_21946; ZICOND-NEXT:  # %bb.1: # %entry1947; ZICOND-NEXT:    srliw a1, a0, 171948; ZICOND-NEXT:  .LBB32_2: # %entry1949; ZICOND-NEXT:    mv a0, a11950; ZICOND-NEXT:    ret1951;1952; RV32SFB-LABEL: select_srliw:1953; RV32SFB:       # %bb.0: # %entry1954; RV32SFB-NEXT:    bnez a2, .LBB32_21955; RV32SFB-NEXT:  # %bb.1: # %entry1956; RV32SFB-NEXT:    srli a1, a0, 171957; RV32SFB-NEXT:  .LBB32_2: # %entry1958; RV32SFB-NEXT:    mv a0, a11959; RV32SFB-NEXT:    ret1960entry:1961 %0 = lshr i32 %A, 171962 %1 = select i1 %cond, i32 %C, i32 %01963 ret i32 %11964}1965 1966define i32 @select_sraiw(i32 %A, i32 %C, i1 zeroext %cond) {1967; NOSFB-LABEL: select_sraiw:1968; NOSFB:       # %bb.0: # %entry1969; NOSFB-NEXT:    bnez a2, .LBB33_21970; NOSFB-NEXT:  # %bb.1: # %entry1971; NOSFB-NEXT:    sraiw a1, a0, 311972; NOSFB-NEXT:  .LBB33_2: # %entry1973; NOSFB-NEXT:    mv a0, a11974; NOSFB-NEXT:    ret1975;1976; RV64SFBSIFIVEU74-LABEL: select_sraiw:1977; RV64SFBSIFIVEU74:       # %bb.0: # %entry1978; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB33_21979; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry1980; RV64SFBSIFIVEU74-NEXT:    sraiw a1, a0, 311981; RV64SFBSIFIVEU74-NEXT:  .LBB33_2: # %entry1982; RV64SFBSIFIVEU74-NEXT:    mv a0, a11983; RV64SFBSIFIVEU74-NEXT:    ret1984;1985; RV64SFBANDESAX45-LABEL: select_sraiw:1986; RV64SFBANDESAX45:       # %bb.0: # %entry1987; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB33_21988; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry1989; RV64SFBANDESAX45-NEXT:    sraiw a1, a0, 311990; RV64SFBANDESAX45-NEXT:  .LBB33_2: # %entry1991; RV64SFBANDESAX45-NEXT:    mv a0, a11992; RV64SFBANDESAX45-NEXT:    ret1993;1994; ZICOND-LABEL: select_sraiw:1995; ZICOND:       # %bb.0: # %entry1996; ZICOND-NEXT:    bnez a2, .LBB33_21997; ZICOND-NEXT:  # %bb.1: # %entry1998; ZICOND-NEXT:    sraiw a1, a0, 311999; ZICOND-NEXT:  .LBB33_2: # %entry2000; ZICOND-NEXT:    mv a0, a12001; ZICOND-NEXT:    ret2002;2003; RV32SFB-LABEL: select_sraiw:2004; RV32SFB:       # %bb.0: # %entry2005; RV32SFB-NEXT:    bnez a2, .LBB33_22006; RV32SFB-NEXT:  # %bb.1: # %entry2007; RV32SFB-NEXT:    srai a1, a0, 312008; RV32SFB-NEXT:  .LBB33_2: # %entry2009; RV32SFB-NEXT:    mv a0, a12010; RV32SFB-NEXT:    ret2011entry:2012 %0 = ashr i32 %A, 312013 %1 = select i1 %cond, i32 %C, i32 %02014 ret i32 %12015}2016 2017define signext i32 @abs_i32(i32 signext %x) {2018; NOSFB-LABEL: abs_i32:2019; NOSFB:       # %bb.0:2020; NOSFB-NEXT:    negw a1, a02021; NOSFB-NEXT:    max a0, a0, a12022; NOSFB-NEXT:    ret2023;2024; RV64SFB-LABEL: abs_i32:2025; RV64SFB:       # %bb.0:2026; RV64SFB-NEXT:    bgez a0, .LBB34_22027; RV64SFB-NEXT:  # %bb.1:2028; RV64SFB-NEXT:    negw a0, a02029; RV64SFB-NEXT:  .LBB34_2:2030; RV64SFB-NEXT:    ret2031;2032; ZICOND-LABEL: abs_i32:2033; ZICOND:       # %bb.0:2034; ZICOND-NEXT:    bgez a0, .LBB34_22035; ZICOND-NEXT:  # %bb.1:2036; ZICOND-NEXT:    negw a0, a02037; ZICOND-NEXT:  .LBB34_2:2038; ZICOND-NEXT:    ret2039;2040; RV32SFB-LABEL: abs_i32:2041; RV32SFB:       # %bb.0:2042; RV32SFB-NEXT:    bgez a0, .LBB34_22043; RV32SFB-NEXT:  # %bb.1:2044; RV32SFB-NEXT:    neg a0, a02045; RV32SFB-NEXT:  .LBB34_2:2046; RV32SFB-NEXT:    ret2047  %a = call i32 @llvm.abs.i32(i32 %x, i1 false)2048  ret i32 %a2049}2050 2051define i64 @abs_i64(i64 %x) {2052; NOSFB-LABEL: abs_i64:2053; NOSFB:       # %bb.0:2054; NOSFB-NEXT:    neg a1, a02055; NOSFB-NEXT:    max a0, a0, a12056; NOSFB-NEXT:    ret2057;2058; RV64SFB-LABEL: abs_i64:2059; RV64SFB:       # %bb.0:2060; RV64SFB-NEXT:    bgez a0, .LBB35_22061; RV64SFB-NEXT:  # %bb.1:2062; RV64SFB-NEXT:    neg a0, a02063; RV64SFB-NEXT:  .LBB35_2:2064; RV64SFB-NEXT:    ret2065;2066; ZICOND-LABEL: abs_i64:2067; ZICOND:       # %bb.0:2068; ZICOND-NEXT:    bgez a0, .LBB35_22069; ZICOND-NEXT:  # %bb.1:2070; ZICOND-NEXT:    neg a0, a02071; ZICOND-NEXT:  .LBB35_2:2072; ZICOND-NEXT:    ret2073;2074; RV32SFB-LABEL: abs_i64:2075; RV32SFB:       # %bb.0:2076; RV32SFB-NEXT:    snez a2, a02077; RV32SFB-NEXT:    neg a3, a12078; RV32SFB-NEXT:    bgez a1, .LBB35_22079; RV32SFB-NEXT:  # %bb.1:2080; RV32SFB-NEXT:    neg a0, a02081; RV32SFB-NEXT:  .LBB35_2:2082; RV32SFB-NEXT:    bgez a1, .LBB35_42083; RV32SFB-NEXT:  # %bb.3:2084; RV32SFB-NEXT:    sub a1, a3, a22085; RV32SFB-NEXT:  .LBB35_4:2086; RV32SFB-NEXT:    ret2087  %a = call i64 @llvm.abs.i64(i64 %x, i1 false)2088  ret i64 %a2089}2090 2091define i64 @select_andn(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {2092; NOSFB-LABEL: select_andn:2093; NOSFB:       # %bb.0: # %entry2094; NOSFB-NEXT:    bnez a3, .LBB36_22095; NOSFB-NEXT:  # %bb.1: # %entry2096; NOSFB-NEXT:    andn a2, a0, a12097; NOSFB-NEXT:  .LBB36_2: # %entry2098; NOSFB-NEXT:    mv a0, a22099; NOSFB-NEXT:    ret2100;2101; RV64SFBSIFIVEU74-LABEL: select_andn:2102; RV64SFBSIFIVEU74:       # %bb.0: # %entry2103; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB36_22104; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry2105; RV64SFBSIFIVEU74-NEXT:    andn a2, a0, a12106; RV64SFBSIFIVEU74-NEXT:  .LBB36_2: # %entry2107; RV64SFBSIFIVEU74-NEXT:    mv a0, a22108; RV64SFBSIFIVEU74-NEXT:    ret2109;2110; RV64SFBANDESAX45-LABEL: select_andn:2111; RV64SFBANDESAX45:       # %bb.0: # %entry2112; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB36_22113; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry2114; RV64SFBANDESAX45-NEXT:    andn a2, a0, a12115; RV64SFBANDESAX45-NEXT:  .LBB36_2: # %entry2116; RV64SFBANDESAX45-NEXT:    mv a0, a22117; RV64SFBANDESAX45-NEXT:    ret2118;2119; ZICOND-LABEL: select_andn:2120; ZICOND:       # %bb.0: # %entry2121; ZICOND-NEXT:    bnez a3, .LBB36_22122; ZICOND-NEXT:  # %bb.1: # %entry2123; ZICOND-NEXT:    andn a2, a0, a12124; ZICOND-NEXT:  .LBB36_2: # %entry2125; ZICOND-NEXT:    mv a0, a22126; ZICOND-NEXT:    ret2127;2128; RV32SFB-LABEL: select_andn:2129; RV32SFB:       # %bb.0: # %entry2130; RV32SFB-NEXT:    bnez a6, .LBB36_22131; RV32SFB-NEXT:  # %bb.1: # %entry2132; RV32SFB-NEXT:    andn a5, a1, a32133; RV32SFB-NEXT:  .LBB36_2: # %entry2134; RV32SFB-NEXT:    bnez a6, .LBB36_42135; RV32SFB-NEXT:  # %bb.3: # %entry2136; RV32SFB-NEXT:    andn a4, a0, a22137; RV32SFB-NEXT:  .LBB36_4: # %entry2138; RV32SFB-NEXT:    mv a0, a42139; RV32SFB-NEXT:    mv a1, a52140; RV32SFB-NEXT:    ret2141entry:2142 %0 = xor i64 %B, -12143 %1 = and i64 %A, %02144 %2 = select i1 %cond, i64 %C, i64 %12145 ret i64 %22146}2147 2148define i64 @select_orn(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {2149; NOSFB-LABEL: select_orn:2150; NOSFB:       # %bb.0: # %entry2151; NOSFB-NEXT:    bnez a3, .LBB37_22152; NOSFB-NEXT:  # %bb.1: # %entry2153; NOSFB-NEXT:    orn a2, a0, a12154; NOSFB-NEXT:  .LBB37_2: # %entry2155; NOSFB-NEXT:    mv a0, a22156; NOSFB-NEXT:    ret2157;2158; RV64SFBSIFIVEU74-LABEL: select_orn:2159; RV64SFBSIFIVEU74:       # %bb.0: # %entry2160; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB37_22161; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry2162; RV64SFBSIFIVEU74-NEXT:    orn a2, a0, a12163; RV64SFBSIFIVEU74-NEXT:  .LBB37_2: # %entry2164; RV64SFBSIFIVEU74-NEXT:    mv a0, a22165; RV64SFBSIFIVEU74-NEXT:    ret2166;2167; RV64SFBANDESAX45-LABEL: select_orn:2168; RV64SFBANDESAX45:       # %bb.0: # %entry2169; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB37_22170; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry2171; RV64SFBANDESAX45-NEXT:    orn a2, a0, a12172; RV64SFBANDESAX45-NEXT:  .LBB37_2: # %entry2173; RV64SFBANDESAX45-NEXT:    mv a0, a22174; RV64SFBANDESAX45-NEXT:    ret2175;2176; ZICOND-LABEL: select_orn:2177; ZICOND:       # %bb.0: # %entry2178; ZICOND-NEXT:    bnez a3, .LBB37_22179; ZICOND-NEXT:  # %bb.1: # %entry2180; ZICOND-NEXT:    orn a2, a0, a12181; ZICOND-NEXT:  .LBB37_2: # %entry2182; ZICOND-NEXT:    mv a0, a22183; ZICOND-NEXT:    ret2184;2185; RV32SFB-LABEL: select_orn:2186; RV32SFB:       # %bb.0: # %entry2187; RV32SFB-NEXT:    bnez a6, .LBB37_22188; RV32SFB-NEXT:  # %bb.1: # %entry2189; RV32SFB-NEXT:    orn a5, a1, a32190; RV32SFB-NEXT:  .LBB37_2: # %entry2191; RV32SFB-NEXT:    bnez a6, .LBB37_42192; RV32SFB-NEXT:  # %bb.3: # %entry2193; RV32SFB-NEXT:    orn a4, a0, a22194; RV32SFB-NEXT:  .LBB37_4: # %entry2195; RV32SFB-NEXT:    mv a0, a42196; RV32SFB-NEXT:    mv a1, a52197; RV32SFB-NEXT:    ret2198entry:2199 %0 = xor i64 %B, -12200 %1 = or i64 %A, %02201 %2 = select i1 %cond, i64 %C, i64 %12202 ret i64 %22203}2204 2205define i64 @select_xnor(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {2206; NOSFB-LABEL: select_xnor:2207; NOSFB:       # %bb.0: # %entry2208; NOSFB-NEXT:    bnez a3, .LBB38_22209; NOSFB-NEXT:  # %bb.1: # %entry2210; NOSFB-NEXT:    xnor a2, a0, a12211; NOSFB-NEXT:  .LBB38_2: # %entry2212; NOSFB-NEXT:    mv a0, a22213; NOSFB-NEXT:    ret2214;2215; RV64SFBSIFIVEU74-LABEL: select_xnor:2216; RV64SFBSIFIVEU74:       # %bb.0: # %entry2217; RV64SFBSIFIVEU74-NEXT:    bnez a3, .LBB38_22218; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry2219; RV64SFBSIFIVEU74-NEXT:    xnor a2, a0, a12220; RV64SFBSIFIVEU74-NEXT:  .LBB38_2: # %entry2221; RV64SFBSIFIVEU74-NEXT:    mv a0, a22222; RV64SFBSIFIVEU74-NEXT:    ret2223;2224; RV64SFBANDESAX45-LABEL: select_xnor:2225; RV64SFBANDESAX45:       # %bb.0: # %entry2226; RV64SFBANDESAX45-NEXT:    nds.bnec a3, 0, .LBB38_22227; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry2228; RV64SFBANDESAX45-NEXT:    xnor a2, a0, a12229; RV64SFBANDESAX45-NEXT:  .LBB38_2: # %entry2230; RV64SFBANDESAX45-NEXT:    mv a0, a22231; RV64SFBANDESAX45-NEXT:    ret2232;2233; ZICOND-LABEL: select_xnor:2234; ZICOND:       # %bb.0: # %entry2235; ZICOND-NEXT:    bnez a3, .LBB38_22236; ZICOND-NEXT:  # %bb.1: # %entry2237; ZICOND-NEXT:    xnor a2, a0, a12238; ZICOND-NEXT:  .LBB38_2: # %entry2239; ZICOND-NEXT:    mv a0, a22240; ZICOND-NEXT:    ret2241;2242; RV32SFB-LABEL: select_xnor:2243; RV32SFB:       # %bb.0: # %entry2244; RV32SFB-NEXT:    bnez a6, .LBB38_22245; RV32SFB-NEXT:  # %bb.1: # %entry2246; RV32SFB-NEXT:    xnor a5, a1, a32247; RV32SFB-NEXT:  .LBB38_2: # %entry2248; RV32SFB-NEXT:    bnez a6, .LBB38_42249; RV32SFB-NEXT:  # %bb.3: # %entry2250; RV32SFB-NEXT:    xnor a4, a0, a22251; RV32SFB-NEXT:  .LBB38_4: # %entry2252; RV32SFB-NEXT:    mv a0, a42253; RV32SFB-NEXT:    mv a1, a52254; RV32SFB-NEXT:    ret2255entry:2256 %0 = xor i64 %A, %B2257 %1 = xor i64 %0, -12258 %2 = select i1 %cond, i64 %C, i64 %12259 ret i64 %22260}2261 2262define i64 @select_bfoz(i64 %A, i64 %B, i1 zeroext %cond) {2263; NOSFB-LABEL: select_bfoz:2264; NOSFB:       # %bb.0: # %entry2265; NOSFB-NEXT:    bnez a2, .LBB39_22266; NOSFB-NEXT:  # %bb.1: # %entry2267; NOSFB-NEXT:    slli a0, a0, 382268; NOSFB-NEXT:    srli a1, a0, 612269; NOSFB-NEXT:  .LBB39_2: # %entry2270; NOSFB-NEXT:    mv a0, a12271; NOSFB-NEXT:    ret2272;2273; RV64SFBSIFIVEU74-LABEL: select_bfoz:2274; RV64SFBSIFIVEU74:       # %bb.0: # %entry2275; RV64SFBSIFIVEU74-NEXT:    slli a0, a0, 382276; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB39_22277; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry2278; RV64SFBSIFIVEU74-NEXT:    srli a1, a0, 612279; RV64SFBSIFIVEU74-NEXT:  .LBB39_2: # %entry2280; RV64SFBSIFIVEU74-NEXT:    mv a0, a12281; RV64SFBSIFIVEU74-NEXT:    ret2282;2283; RV64SFBANDESAX45-LABEL: select_bfoz:2284; RV64SFBANDESAX45:       # %bb.0: # %entry2285; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB39_22286; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry2287; RV64SFBANDESAX45-NEXT:    nds.bfoz a1, a0, 25, 232288; RV64SFBANDESAX45-NEXT:  .LBB39_2: # %entry2289; RV64SFBANDESAX45-NEXT:    mv a0, a12290; RV64SFBANDESAX45-NEXT:    ret2291;2292; ZICOND-LABEL: select_bfoz:2293; ZICOND:       # %bb.0: # %entry2294; ZICOND-NEXT:    slli a0, a0, 382295; ZICOND-NEXT:    bnez a2, .LBB39_22296; ZICOND-NEXT:  # %bb.1: # %entry2297; ZICOND-NEXT:    srli a1, a0, 612298; ZICOND-NEXT:  .LBB39_2: # %entry2299; ZICOND-NEXT:    mv a0, a12300; ZICOND-NEXT:    ret2301;2302; RV32SFB-LABEL: select_bfoz:2303; RV32SFB:       # %bb.0: # %entry2304; RV32SFB-NEXT:    slli a0, a0, 62305; RV32SFB-NEXT:    mv a1, a32306; RV32SFB-NEXT:    bnez a4, .LBB39_22307; RV32SFB-NEXT:  # %bb.1: # %entry2308; RV32SFB-NEXT:    srli a2, a0, 292309; RV32SFB-NEXT:  .LBB39_2: # %entry2310; RV32SFB-NEXT:    bnez a4, .LBB39_42311; RV32SFB-NEXT:  # %bb.3: # %entry2312; RV32SFB-NEXT:    li a1, 02313; RV32SFB-NEXT:  .LBB39_4: # %entry2314; RV32SFB-NEXT:    mv a0, a22315; RV32SFB-NEXT:    ret2316entry:2317 %0 = lshr i64 %A, 232318 %1 = and i64 %0, 72319 %2 = select i1 %cond, i64 %B, i64 %12320 ret i64 %22321}2322 2323define i64 @select_bfos(i64 %A, i64 %B, i1 zeroext %cond) {2324; NOSFB-LABEL: select_bfos:2325; NOSFB:       # %bb.0: # %entry2326; NOSFB-NEXT:    bnez a2, .LBB40_22327; NOSFB-NEXT:  # %bb.1: # %entry2328; NOSFB-NEXT:    slli a0, a0, 312329; NOSFB-NEXT:    srai a1, a0, 172330; NOSFB-NEXT:  .LBB40_2: # %entry2331; NOSFB-NEXT:    mv a0, a12332; NOSFB-NEXT:    ret2333;2334; RV64SFBSIFIVEU74-LABEL: select_bfos:2335; RV64SFBSIFIVEU74:       # %bb.0: # %entry2336; RV64SFBSIFIVEU74-NEXT:    slli a0, a0, 312337; RV64SFBSIFIVEU74-NEXT:    bnez a2, .LBB40_22338; RV64SFBSIFIVEU74-NEXT:  # %bb.1: # %entry2339; RV64SFBSIFIVEU74-NEXT:    srai a1, a0, 172340; RV64SFBSIFIVEU74-NEXT:  .LBB40_2: # %entry2341; RV64SFBSIFIVEU74-NEXT:    mv a0, a12342; RV64SFBSIFIVEU74-NEXT:    ret2343;2344; RV64SFBANDESAX45-LABEL: select_bfos:2345; RV64SFBANDESAX45:       # %bb.0: # %entry2346; RV64SFBANDESAX45-NEXT:    nds.bnec a2, 0, .LBB40_22347; RV64SFBANDESAX45-NEXT:  # %bb.1: # %entry2348; RV64SFBANDESAX45-NEXT:    nds.bfos a1, a0, 14, 462349; RV64SFBANDESAX45-NEXT:  .LBB40_2: # %entry2350; RV64SFBANDESAX45-NEXT:    mv a0, a12351; RV64SFBANDESAX45-NEXT:    ret2352;2353; ZICOND-LABEL: select_bfos:2354; ZICOND:       # %bb.0: # %entry2355; ZICOND-NEXT:    slli a0, a0, 312356; ZICOND-NEXT:    bnez a2, .LBB40_22357; ZICOND-NEXT:  # %bb.1: # %entry2358; ZICOND-NEXT:    srai a1, a0, 172359; ZICOND-NEXT:  .LBB40_2: # %entry2360; ZICOND-NEXT:    mv a0, a12361; ZICOND-NEXT:    ret2362;2363; RV32SFB-LABEL: select_bfos:2364; RV32SFB:       # %bb.0: # %entry2365; RV32SFB-NEXT:    srli a5, a0, 12366; RV32SFB-NEXT:    slli a6, a1, 312367; RV32SFB-NEXT:    slli a0, a0, 312368; RV32SFB-NEXT:    slli a1, a5, 152369; RV32SFB-NEXT:    srli a0, a0, 172370; RV32SFB-NEXT:    or a5, a6, a52371; RV32SFB-NEXT:    bnez a4, .LBB40_22372; RV32SFB-NEXT:  # %bb.1: # %entry2373; RV32SFB-NEXT:    or a2, a0, a12374; RV32SFB-NEXT:  .LBB40_2: # %entry2375; RV32SFB-NEXT:    bnez a4, .LBB40_42376; RV32SFB-NEXT:  # %bb.3: # %entry2377; RV32SFB-NEXT:    srai a3, a5, 172378; RV32SFB-NEXT:  .LBB40_4: # %entry2379; RV32SFB-NEXT:    mv a0, a22380; RV32SFB-NEXT:    mv a1, a32381; RV32SFB-NEXT:    ret2382entry:2383 %0 = shl i64 %A, 312384 %1 = ashr i64 %0, 172385 %2 = select i1 %cond, i64 %B, i64 %12386 ret i64 %22387}2388