brintos

brintos / llvm-project-archived public Read only

0
0
Text · 53.2 KiB · 0c31ff9 Raw
1559 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mtriple=loongarch64 | FileCheck %s --check-prefixes=CHECK3; RUN: llc < %s --mtriple=loongarch64 --loongarch-disable-sextw-removal | \4; RUN:   FileCheck %s --check-prefix=NORMV5 6define void @test1(i32 signext %arg, i32 signext %arg1) nounwind {7; CHECK-LABEL: test1:8; CHECK:       # %bb.0: # %bb9; CHECK-NEXT:    addi.d $sp, $sp, -3210; CHECK-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill11; CHECK-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill12; CHECK-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill13; CHECK-NEXT:    move $fp, $a114; CHECK-NEXT:    sra.w $s0, $a0, $a115; CHECK-NEXT:    .p2align 4, , 1616; CHECK-NEXT:  .LBB0_1: # %bb217; CHECK-NEXT:    # =>This Inner Loop Header: Depth=118; CHECK-NEXT:    move $a0, $s019; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)20; CHECK-NEXT:    jirl $ra, $ra, 021; CHECK-NEXT:    sll.w $s0, $s0, $fp22; CHECK-NEXT:    bnez $a0, .LBB0_123; CHECK-NEXT:  # %bb.2: # %bb724; CHECK-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload25; CHECK-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload26; CHECK-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload27; CHECK-NEXT:    addi.d $sp, $sp, 3228; CHECK-NEXT:    ret29;30; NORMV-LABEL: test1:31; NORMV:       # %bb.0: # %bb32; NORMV-NEXT:    addi.d $sp, $sp, -3233; NORMV-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill34; NORMV-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill35; NORMV-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill36; NORMV-NEXT:    move $fp, $a137; NORMV-NEXT:    sra.w $s0, $a0, $a138; NORMV-NEXT:    .p2align 4, , 1639; NORMV-NEXT:  .LBB0_1: # %bb240; NORMV-NEXT:    # =>This Inner Loop Header: Depth=141; NORMV-NEXT:    addi.w $a0, $s0, 042; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)43; NORMV-NEXT:    jirl $ra, $ra, 044; NORMV-NEXT:    sll.w $s0, $s0, $fp45; NORMV-NEXT:    bnez $a0, .LBB0_146; NORMV-NEXT:  # %bb.2: # %bb747; NORMV-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload48; NORMV-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload49; NORMV-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload50; NORMV-NEXT:    addi.d $sp, $sp, 3251; NORMV-NEXT:    ret52bb:53  %i = ashr i32 %arg, %arg154  br label %bb255 56bb2:                                              ; preds = %bb2, %bb57  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]58  %i4 = tail call signext i32 @bar(i32 signext %i3)59  %i5 = shl i32 %i3, %arg160  %i6 = icmp eq i32 %i4, 061  br i1 %i6, label %bb7, label %bb262 63bb7:                                              ; preds = %bb264  ret void65}66 67declare signext i32 @bar(i32 signext)68 69define signext i32 @test2(ptr %p, i32 signext %b) nounwind {70; CHECK-LABEL: test2:71; CHECK:       # %bb.0:72; CHECK-NEXT:    ld.w $a0, $a0, 073; CHECK-NEXT:    ori $a2, $zero, 174; CHECK-NEXT:    sll.w $a1, $a2, $a175; CHECK-NEXT:    andn $a0, $a0, $a176; CHECK-NEXT:    ret77;78; NORMV-LABEL: test2:79; NORMV:       # %bb.0:80; NORMV-NEXT:    ld.w $a0, $a0, 081; NORMV-NEXT:    ori $a2, $zero, 182; NORMV-NEXT:    sll.w $a1, $a2, $a183; NORMV-NEXT:    andn $a0, $a0, $a184; NORMV-NEXT:    addi.w $a0, $a0, 085; NORMV-NEXT:    ret86  %a = load i32, ptr %p87  %shl = shl i32 1, %b88  %neg = xor i32 %shl, -189  %and1 = and i32 %neg, %a90  ret i32 %and191}92 93define signext i32 @test3(ptr %p, i32 signext %b) nounwind {94; CHECK-LABEL: test3:95; CHECK:       # %bb.0:96; CHECK-NEXT:    ld.w $a0, $a0, 097; CHECK-NEXT:    ori $a2, $zero, 198; CHECK-NEXT:    sll.w $a1, $a2, $a199; CHECK-NEXT:    orn $a0, $a0, $a1100; CHECK-NEXT:    ret101;102; NORMV-LABEL: test3:103; NORMV:       # %bb.0:104; NORMV-NEXT:    ld.w $a0, $a0, 0105; NORMV-NEXT:    ori $a2, $zero, 1106; NORMV-NEXT:    sll.w $a1, $a2, $a1107; NORMV-NEXT:    orn $a0, $a0, $a1108; NORMV-NEXT:    addi.w $a0, $a0, 0109; NORMV-NEXT:    ret110  %a = load i32, ptr %p111  %shl = shl i32 1, %b112  %neg = xor i32 %shl, -1113  %and1 = or i32 %neg, %a114  ret i32 %and1115}116 117define signext i32 @test4(ptr %p, i32 signext %b) nounwind {118; CHECK-LABEL: test4:119; CHECK:       # %bb.0:120; CHECK-NEXT:    ld.w $a0, $a0, 0121; CHECK-NEXT:    ori $a2, $zero, 1122; CHECK-NEXT:    sll.w $a1, $a2, $a1123; CHECK-NEXT:    xor $a0, $a1, $a0124; CHECK-NEXT:    nor $a0, $a0, $zero125; CHECK-NEXT:    addi.w $a0, $a0, 0126; CHECK-NEXT:    ret127;128; NORMV-LABEL: test4:129; NORMV:       # %bb.0:130; NORMV-NEXT:    ld.w $a0, $a0, 0131; NORMV-NEXT:    ori $a2, $zero, 1132; NORMV-NEXT:    sll.w $a1, $a2, $a1133; NORMV-NEXT:    xor $a0, $a1, $a0134; NORMV-NEXT:    nor $a0, $a0, $zero135; NORMV-NEXT:    addi.w $a0, $a0, 0136; NORMV-NEXT:    ret137  %a = load i32, ptr %p138  %shl = shl i32 1, %b139  %neg = xor i32 %shl, -1140  %and1 = xor i32 %neg, %a141  ret i32 %and1142}143 144define void @test5(i32 signext %arg, i32 signext %arg1) nounwind {145; CHECK-LABEL: test5:146; CHECK:       # %bb.0: # %bb147; CHECK-NEXT:    addi.d $sp, $sp, -16148; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill149; CHECK-NEXT:    sra.w $a1, $a0, $a1150; CHECK-NEXT:    .p2align 4, , 16151; CHECK-NEXT:  .LBB4_1: # %bb2152; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1153; CHECK-NEXT:    addi.w $a0, $a1, 0154; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)155; CHECK-NEXT:    jirl $ra, $ra, 0156; CHECK-NEXT:    bstrpick.d $a1, $a0, 31, 0157; CHECK-NEXT:    vldi $vr0, 0158; CHECK-NEXT:    vinsgr2vr.d $vr0, $a1, 0159; CHECK-NEXT:    vpcnt.d $vr0, $vr0160; CHECK-NEXT:    vpickve2gr.d $a1, $vr0, 0161; CHECK-NEXT:    bnez $a0, .LBB4_1162; CHECK-NEXT:  # %bb.2: # %bb7163; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload164; CHECK-NEXT:    addi.d $sp, $sp, 16165; CHECK-NEXT:    ret166;167; NORMV-LABEL: test5:168; NORMV:       # %bb.0: # %bb169; NORMV-NEXT:    addi.d $sp, $sp, -16170; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill171; NORMV-NEXT:    sra.w $a1, $a0, $a1172; NORMV-NEXT:    .p2align 4, , 16173; NORMV-NEXT:  .LBB4_1: # %bb2174; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1175; NORMV-NEXT:    addi.w $a0, $a1, 0176; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)177; NORMV-NEXT:    jirl $ra, $ra, 0178; NORMV-NEXT:    bstrpick.d $a1, $a0, 31, 0179; NORMV-NEXT:    vldi $vr0, 0180; NORMV-NEXT:    vinsgr2vr.d $vr0, $a1, 0181; NORMV-NEXT:    vpcnt.d $vr0, $vr0182; NORMV-NEXT:    vpickve2gr.d $a1, $vr0, 0183; NORMV-NEXT:    bnez $a0, .LBB4_1184; NORMV-NEXT:  # %bb.2: # %bb7185; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload186; NORMV-NEXT:    addi.d $sp, $sp, 16187; NORMV-NEXT:    ret188bb:189  %i = ashr i32 %arg, %arg1190  br label %bb2191 192bb2:                                              ; preds = %bb2, %bb193  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]194  %i4 = tail call signext i32 @bar(i32 signext %i3)195  %i5 = tail call i32 @llvm.ctpop.i32(i32 %i4)196  %i6 = icmp eq i32 %i4, 0197  br i1 %i6, label %bb7, label %bb2198 199bb7:                                              ; preds = %bb2200  ret void201}202 203declare i32 @llvm.ctpop.i32(i32)204 205define void @test6(i32 signext %arg, i32 signext %arg1) nounwind {206; CHECK-LABEL: test6:207; CHECK:       # %bb.0: # %bb208; CHECK-NEXT:    addi.d $sp, $sp, -16209; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill210; CHECK-NEXT:    fst.d $fs0, $sp, 0 # 8-byte Folded Spill211; CHECK-NEXT:    sra.w $a0, $a0, $a1212; CHECK-NEXT:    movgr2fr.w $fs0, $zero213; CHECK-NEXT:    .p2align 4, , 16214; CHECK-NEXT:  .LBB5_1: # %bb2215; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1216; CHECK-NEXT:    pcaddu18i $ra, %call36(baz)217; CHECK-NEXT:    jirl $ra, $ra, 0218; CHECK-NEXT:    ftintrz.w.s $fa1, $fa0219; CHECK-NEXT:    fcmp.cune.s $fcc0, $fa0, $fs0220; CHECK-NEXT:    movfr2gr.s $a0, $fa1221; CHECK-NEXT:    bcnez $fcc0, .LBB5_1222; CHECK-NEXT:  # %bb.2: # %bb7223; CHECK-NEXT:    fld.d $fs0, $sp, 0 # 8-byte Folded Reload224; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload225; CHECK-NEXT:    addi.d $sp, $sp, 16226; CHECK-NEXT:    ret227;228; NORMV-LABEL: test6:229; NORMV:       # %bb.0: # %bb230; NORMV-NEXT:    addi.d $sp, $sp, -16231; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill232; NORMV-NEXT:    fst.d $fs0, $sp, 0 # 8-byte Folded Spill233; NORMV-NEXT:    sra.w $a0, $a0, $a1234; NORMV-NEXT:    movgr2fr.w $fs0, $zero235; NORMV-NEXT:    .p2align 4, , 16236; NORMV-NEXT:  .LBB5_1: # %bb2237; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1238; NORMV-NEXT:    addi.w $a0, $a0, 0239; NORMV-NEXT:    pcaddu18i $ra, %call36(baz)240; NORMV-NEXT:    jirl $ra, $ra, 0241; NORMV-NEXT:    ftintrz.w.s $fa1, $fa0242; NORMV-NEXT:    fcmp.cune.s $fcc0, $fa0, $fs0243; NORMV-NEXT:    movfr2gr.s $a0, $fa1244; NORMV-NEXT:    bcnez $fcc0, .LBB5_1245; NORMV-NEXT:  # %bb.2: # %bb7246; NORMV-NEXT:    fld.d $fs0, $sp, 0 # 8-byte Folded Reload247; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload248; NORMV-NEXT:    addi.d $sp, $sp, 16249; NORMV-NEXT:    ret250bb:251  %i = ashr i32 %arg, %arg1252  br label %bb2253 254bb2:                                              ; preds = %bb2, %bb255  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]256  %i4 = tail call float @baz(i32 signext %i3)257  %i5 = fptosi float %i4 to i32258  %i6 = fcmp oeq float %i4, zeroinitializer259  br i1 %i6, label %bb7, label %bb2260 261bb7:                                              ; preds = %bb2262  ret void263}264declare float @baz(i32 signext %i3)265 266define void @test7(i32 signext %arg, i32 signext %arg1) nounwind {267; CHECK-LABEL: test7:268; CHECK:       # %bb.0: # %bb269; CHECK-NEXT:    addi.d $sp, $sp, -16270; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill271; CHECK-NEXT:    sra.w $a0, $a0, $a1272; CHECK-NEXT:    .p2align 4, , 16273; CHECK-NEXT:  .LBB6_1: # %bb2274; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1275; CHECK-NEXT:    addi.w $a0, $a0, 0276; CHECK-NEXT:    pcaddu18i $ra, %call36(foo)277; CHECK-NEXT:    jirl $ra, $ra, 0278; CHECK-NEXT:    vldi $vr0, 0279; CHECK-NEXT:    vinsgr2vr.d $vr0, $a0, 0280; CHECK-NEXT:    vpcnt.d $vr0, $vr0281; CHECK-NEXT:    vpickve2gr.d $a0, $vr0, 0282; CHECK-NEXT:    bnez $a0, .LBB6_1283; CHECK-NEXT:  # %bb.2: # %bb7284; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload285; CHECK-NEXT:    addi.d $sp, $sp, 16286; CHECK-NEXT:    ret287;288; NORMV-LABEL: test7:289; NORMV:       # %bb.0: # %bb290; NORMV-NEXT:    addi.d $sp, $sp, -16291; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill292; NORMV-NEXT:    sra.w $a0, $a0, $a1293; NORMV-NEXT:    .p2align 4, , 16294; NORMV-NEXT:  .LBB6_1: # %bb2295; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1296; NORMV-NEXT:    addi.w $a0, $a0, 0297; NORMV-NEXT:    pcaddu18i $ra, %call36(foo)298; NORMV-NEXT:    jirl $ra, $ra, 0299; NORMV-NEXT:    vldi $vr0, 0300; NORMV-NEXT:    vinsgr2vr.d $vr0, $a0, 0301; NORMV-NEXT:    vpcnt.d $vr0, $vr0302; NORMV-NEXT:    vpickve2gr.d $a0, $vr0, 0303; NORMV-NEXT:    bnez $a0, .LBB6_1304; NORMV-NEXT:  # %bb.2: # %bb7305; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload306; NORMV-NEXT:    addi.d $sp, $sp, 16307; NORMV-NEXT:    ret308bb:309  %i = ashr i32 %arg, %arg1310  br label %bb2311 312bb2:                                              ; preds = %bb2, %bb313  %i3 = phi i32 [ %i, %bb ], [ %i6, %bb2 ]314  %i4 = tail call signext i64 @foo(i32 signext %i3)315  %i5 = tail call i64 @llvm.ctpop.i64(i64 %i4)316  %i6 = trunc i64 %i5 to i32317  %i7 = icmp eq i32 %i6, 0318  br i1 %i7, label %bb7, label %bb2319 320bb7:                                              ; preds = %bb2321  ret void322}323 324declare i64 @llvm.ctpop.i64(i64)325 326define void @test8(i32 signext %arg, i32 signext %arg1) nounwind {327; CHECK-LABEL: test8:328; CHECK:       # %bb.0: # %bb329; CHECK-NEXT:    addi.d $sp, $sp, -16330; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill331; CHECK-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill332; CHECK-NEXT:    sra.w $a0, $a0, $a1333; CHECK-NEXT:    addi.w $fp, $zero, -256334; CHECK-NEXT:    .p2align 4, , 16335; CHECK-NEXT:  .LBB7_1: # %bb2336; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1337; CHECK-NEXT:    addi.w $a0, $a0, 0338; CHECK-NEXT:    pcaddu18i $ra, %call36(foo)339; CHECK-NEXT:    jirl $ra, $ra, 0340; CHECK-NEXT:    or $a0, $a0, $fp341; CHECK-NEXT:    bnez $a0, .LBB7_1342; CHECK-NEXT:  # %bb.2: # %bb7343; CHECK-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload344; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload345; CHECK-NEXT:    addi.d $sp, $sp, 16346; CHECK-NEXT:    ret347;348; NORMV-LABEL: test8:349; NORMV:       # %bb.0: # %bb350; NORMV-NEXT:    addi.d $sp, $sp, -16351; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill352; NORMV-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill353; NORMV-NEXT:    sra.w $a0, $a0, $a1354; NORMV-NEXT:    addi.w $fp, $zero, -256355; NORMV-NEXT:    .p2align 4, , 16356; NORMV-NEXT:  .LBB7_1: # %bb2357; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1358; NORMV-NEXT:    addi.w $a0, $a0, 0359; NORMV-NEXT:    pcaddu18i $ra, %call36(foo)360; NORMV-NEXT:    jirl $ra, $ra, 0361; NORMV-NEXT:    or $a0, $a0, $fp362; NORMV-NEXT:    bnez $a0, .LBB7_1363; NORMV-NEXT:  # %bb.2: # %bb7364; NORMV-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload365; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload366; NORMV-NEXT:    addi.d $sp, $sp, 16367; NORMV-NEXT:    ret368bb:369  %i = ashr i32 %arg, %arg1370  br label %bb2371 372bb2:                                              ; preds = %bb2, %bb373  %i3 = phi i32 [ %i, %bb ], [ %i6, %bb2 ]374  %i4 = tail call signext i64 @foo(i32 signext %i3)375  %i5 = or i64 %i4, -256376  %i6 = trunc i64 %i5 to i32377  %i7 = icmp eq i32 %i6, 0378  br i1 %i7, label %bb7, label %bb2379 380bb7:                                              ; preds = %bb2381  ret void382}383 384declare i64 @foo(i32 signext)385 386define void @test9(i32 signext %arg, i32 signext %arg1) nounwind {387; CHECK-LABEL: test9:388; CHECK:       # %bb.0: # %bb389; CHECK-NEXT:    addi.d $sp, $sp, -16390; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill391; CHECK-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill392; CHECK-NEXT:    sra.w $a0, $a0, $a1393; CHECK-NEXT:    ori $fp, $zero, 254394; CHECK-NEXT:    .p2align 4, , 16395; CHECK-NEXT:  .LBB8_1: # %bb2396; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1397; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)398; CHECK-NEXT:    jirl $ra, $ra, 0399; CHECK-NEXT:    move $a1, $a0400; CHECK-NEXT:    slti $a0, $a0, 255401; CHECK-NEXT:    blt $fp, $a1, .LBB8_1402; CHECK-NEXT:  # %bb.2: # %bb7403; CHECK-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload404; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload405; CHECK-NEXT:    addi.d $sp, $sp, 16406; CHECK-NEXT:    ret407;408; NORMV-LABEL: test9:409; NORMV:       # %bb.0: # %bb410; NORMV-NEXT:    addi.d $sp, $sp, -16411; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill412; NORMV-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill413; NORMV-NEXT:    sra.w $a1, $a0, $a1414; NORMV-NEXT:    ori $fp, $zero, 254415; NORMV-NEXT:    .p2align 4, , 16416; NORMV-NEXT:  .LBB8_1: # %bb2417; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1418; NORMV-NEXT:    addi.w $a0, $a1, 0419; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)420; NORMV-NEXT:    jirl $ra, $ra, 0421; NORMV-NEXT:    slti $a1, $a0, 255422; NORMV-NEXT:    blt $fp, $a0, .LBB8_1423; NORMV-NEXT:  # %bb.2: # %bb7424; NORMV-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload425; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload426; NORMV-NEXT:    addi.d $sp, $sp, 16427; NORMV-NEXT:    ret428bb:429  %i = ashr i32 %arg, %arg1430  br label %bb2431 432bb2:                                              ; preds = %bb2, %bb433  %i3 = phi i32 [ %i, %bb ], [ %i7, %bb2 ]434  %i4 = tail call signext i32 @bar(i32 signext %i3)435  %i5 = icmp slt i32 %i4, 255436  %i6 = sext i1 %i5 to i32437  %i7 = sub i32 0, %i6438  br i1 %i5, label %bb7, label %bb2439 440bb7:                                              ; preds = %bb2441  ret void442}443 444define void @test10(i32 signext %arg, i32 signext %arg1) nounwind {445; CHECK-LABEL: test10:446; CHECK:       # %bb.0: # %bb447; CHECK-NEXT:    addi.d $sp, $sp, -16448; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill449; CHECK-NEXT:    fst.d $fs0, $sp, 0 # 8-byte Folded Spill450; CHECK-NEXT:    sra.w $a0, $a0, $a1451; CHECK-NEXT:    movgr2fr.w $fs0, $zero452; CHECK-NEXT:    .p2align 4, , 16453; CHECK-NEXT:  .LBB9_1: # %bb2454; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1455; CHECK-NEXT:    pcaddu18i $ra, %call36(baz)456; CHECK-NEXT:    jirl $ra, $ra, 0457; CHECK-NEXT:    fcmp.cune.s $fcc0, $fa0, $fs0458; CHECK-NEXT:    movfr2gr.s $a0, $fa0459; CHECK-NEXT:    bcnez $fcc0, .LBB9_1460; CHECK-NEXT:  # %bb.2: # %bb7461; CHECK-NEXT:    fld.d $fs0, $sp, 0 # 8-byte Folded Reload462; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload463; CHECK-NEXT:    addi.d $sp, $sp, 16464; CHECK-NEXT:    ret465;466; NORMV-LABEL: test10:467; NORMV:       # %bb.0: # %bb468; NORMV-NEXT:    addi.d $sp, $sp, -16469; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill470; NORMV-NEXT:    fst.d $fs0, $sp, 0 # 8-byte Folded Spill471; NORMV-NEXT:    sra.w $a0, $a0, $a1472; NORMV-NEXT:    movgr2fr.w $fs0, $zero473; NORMV-NEXT:    .p2align 4, , 16474; NORMV-NEXT:  .LBB9_1: # %bb2475; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1476; NORMV-NEXT:    addi.w $a0, $a0, 0477; NORMV-NEXT:    pcaddu18i $ra, %call36(baz)478; NORMV-NEXT:    jirl $ra, $ra, 0479; NORMV-NEXT:    fcmp.cune.s $fcc0, $fa0, $fs0480; NORMV-NEXT:    movfr2gr.s $a0, $fa0481; NORMV-NEXT:    bcnez $fcc0, .LBB9_1482; NORMV-NEXT:  # %bb.2: # %bb7483; NORMV-NEXT:    fld.d $fs0, $sp, 0 # 8-byte Folded Reload484; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload485; NORMV-NEXT:    addi.d $sp, $sp, 16486; NORMV-NEXT:    ret487bb:488  %i = ashr i32 %arg, %arg1489  br label %bb2490 491bb2:                                              ; preds = %bb2, %bb492  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]493  %i4 = tail call float @baz(i32 signext %i3)494  %i5 = bitcast float %i4 to i32495  %i6 = fcmp oeq float %i4, zeroinitializer496  br i1 %i6, label %bb7, label %bb2497 498bb7:                                              ; preds = %bb2499  ret void500}501 502define signext i32 @test11(i64 %arg1, i64 %arg2, i64 %arg3)  {503; CHECK-LABEL: test11:504; CHECK:       # %bb.0: # %entry505; CHECK-NEXT:    addi.d $a2, $a2, -1506; CHECK-NEXT:    ori $a3, $zero, 256507; CHECK-NEXT:    .p2align 4, , 16508; CHECK-NEXT:  .LBB10_1: # %bb2509; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1510; CHECK-NEXT:    andi $a0, $a0, 1234511; CHECK-NEXT:    addi.d $a2, $a2, 1512; CHECK-NEXT:    add.w $a0, $a0, $a1513; CHECK-NEXT:    bltu $a2, $a3, .LBB10_1514; CHECK-NEXT:  # %bb.2: # %bb7515; CHECK-NEXT:    ret516;517; NORMV-LABEL: test11:518; NORMV:       # %bb.0: # %entry519; NORMV-NEXT:    addi.d $a2, $a2, -1520; NORMV-NEXT:    ori $a3, $zero, 256521; NORMV-NEXT:    .p2align 4, , 16522; NORMV-NEXT:  .LBB10_1: # %bb2523; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1524; NORMV-NEXT:    andi $a0, $a0, 1234525; NORMV-NEXT:    addi.d $a2, $a2, 1526; NORMV-NEXT:    add.d $a0, $a0, $a1527; NORMV-NEXT:    bltu $a2, $a3, .LBB10_1528; NORMV-NEXT:  # %bb.2: # %bb7529; NORMV-NEXT:    addi.w $a0, $a0, 0530; NORMV-NEXT:    ret531entry:532  br label %bb2533 534bb2:                                              ; preds = %bb2, %entry535  %i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ]536  %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]537  %i3 = add i64 %i2, 1538  %i4 = and i64 %i1, 1234539  %i5 = add i64 %i4, %arg2540  %i6 = icmp ugt i64 %i2, 255541  br i1 %i6, label %bb7, label %bb2542 543bb7:                                              ; preds = %bb2544  %i7 = trunc i64 %i5 to i32545  ret i32 %i7546}547 548define signext i32 @test12(i64 %arg1, i64 %arg2, i64 %arg3)  {549; CHECK-LABEL: test12:550; CHECK:       # %bb.0: # %entry551; CHECK-NEXT:    addi.d $a3, $a2, -1552; CHECK-NEXT:    ori $a4, $zero, 256553; CHECK-NEXT:    .p2align 4, , 16554; CHECK-NEXT:  .LBB11_1: # %bb2555; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1556; CHECK-NEXT:    xor $a0, $a0, $a1557; CHECK-NEXT:    mul.w $a2, $a0, $a1558; CHECK-NEXT:    add.w $a0, $a0, $a2559; CHECK-NEXT:    and $a2, $a2, $a0560; CHECK-NEXT:    addi.d $a3, $a3, 1561; CHECK-NEXT:    add.d $a0, $a2, $a1562; CHECK-NEXT:    bltu $a3, $a4, .LBB11_1563; CHECK-NEXT:  # %bb.2: # %bb7564; CHECK-NEXT:    move $a0, $a2565; CHECK-NEXT:    ret566;567; NORMV-LABEL: test12:568; NORMV:       # %bb.0: # %entry569; NORMV-NEXT:    addi.d $a2, $a2, -1570; NORMV-NEXT:    ori $a3, $zero, 256571; NORMV-NEXT:    .p2align 4, , 16572; NORMV-NEXT:  .LBB11_1: # %bb2573; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1574; NORMV-NEXT:    xor $a0, $a0, $a1575; NORMV-NEXT:    mul.d $a4, $a0, $a1576; NORMV-NEXT:    add.d $a0, $a0, $a4577; NORMV-NEXT:    and $a4, $a4, $a0578; NORMV-NEXT:    addi.d $a2, $a2, 1579; NORMV-NEXT:    add.d $a0, $a4, $a1580; NORMV-NEXT:    bltu $a2, $a3, .LBB11_1581; NORMV-NEXT:  # %bb.2: # %bb7582; NORMV-NEXT:    addi.w $a0, $a4, 0583; NORMV-NEXT:    ret584entry:585  br label %bb2586 587bb2:                                              ; preds = %bb2, %entry588  %i1 = phi i64 [ %arg1, %entry ], [ %i6, %bb2 ]589  %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]590  %i3 = add i64 %i2, 1591  %i4 = xor i64 %i1, %arg2592  %i5 = mul i64 %i4, %arg2593  %i9 = add i64 %i4, %i5594  %i8 = and i64 %i5, %i9595  %i6 = add i64 %i8, %arg2596  %i7 = icmp ugt i64 %i2, 255597  br i1 %i7, label %bb7, label %bb2598 599bb7:                                              ; preds = %bb2600  %r = trunc i64 %i8 to i32601  ret i32 %r602}603 604define signext i32 @test13(i64 %arg1, i64 %arg2, i64 %arg3)  {605; CHECK-LABEL: test13:606; CHECK:       # %bb.0: # %entry607; CHECK-NEXT:    addi.d $a2, $a2, -1608; CHECK-NEXT:    ori $a3, $zero, 256609; CHECK-NEXT:    .p2align 4, , 16610; CHECK-NEXT:  .LBB12_1: # %bb2611; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1612; CHECK-NEXT:    div.d $a0, $a0, $a1613; CHECK-NEXT:    addi.d $a2, $a2, 1614; CHECK-NEXT:    add.d $a0, $a0, $a1615; CHECK-NEXT:    bltu $a2, $a3, .LBB12_1616; CHECK-NEXT:  # %bb.2: # %bb7617; CHECK-NEXT:    addi.w $a0, $a0, 0618; CHECK-NEXT:    ret619;620; NORMV-LABEL: test13:621; NORMV:       # %bb.0: # %entry622; NORMV-NEXT:    addi.d $a2, $a2, -1623; NORMV-NEXT:    ori $a3, $zero, 256624; NORMV-NEXT:    .p2align 4, , 16625; NORMV-NEXT:  .LBB12_1: # %bb2626; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1627; NORMV-NEXT:    div.d $a0, $a0, $a1628; NORMV-NEXT:    addi.d $a2, $a2, 1629; NORMV-NEXT:    add.d $a0, $a0, $a1630; NORMV-NEXT:    bltu $a2, $a3, .LBB12_1631; NORMV-NEXT:  # %bb.2: # %bb7632; NORMV-NEXT:    addi.w $a0, $a0, 0633; NORMV-NEXT:    ret634entry:635  br label %bb2636 637bb2:                                              ; preds = %bb2, %entry638  %i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ]639  %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]640  %i3 = add i64 %i2, 1641  %i4 = sdiv i64 %i1, %arg2642  %i5 = add i64 %i4, %arg2643  %i6 = icmp ugt i64 %i2, 255644  br i1 %i6, label %bb7, label %bb2645 646bb7:                                              ; preds = %bb2647  %i8 = trunc i64 %i5 to i32648  ret i32 %i8649}650 651 652define signext i32 @test14(i32 signext %0, i32 signext %1) {653; CHECK-LABEL: test14:654; CHECK:       # %bb.0:655; CHECK-NEXT:    ori $a2, $zero, 2656; CHECK-NEXT:    blt $a1, $a2, .LBB13_4657; CHECK-NEXT:  # %bb.1: # %.preheader658; CHECK-NEXT:    ori $a3, $zero, 1659; CHECK-NEXT:    addi.w $a2, $zero, -1660; CHECK-NEXT:    ori $a4, $zero, 1000661; CHECK-NEXT:    .p2align 4, , 16662; CHECK-NEXT:  .LBB13_2: # =>This Inner Loop Header: Depth=1663; CHECK-NEXT:    blt $a4, $a0, .LBB13_5664; CHECK-NEXT:  # %bb.3: # in Loop: Header=BB13_2 Depth=1665; CHECK-NEXT:    add.w $a0, $a3, $a0666; CHECK-NEXT:    addi.w $a3, $a3, 1667; CHECK-NEXT:    blt $a3, $a1, .LBB13_2668; CHECK-NEXT:  .LBB13_4:669; CHECK-NEXT:    ret670; CHECK-NEXT:  .LBB13_5:671; CHECK-NEXT:    move $a0, $a2672; CHECK-NEXT:    ret673;674; NORMV-LABEL: test14:675; NORMV:       # %bb.0:676; NORMV-NEXT:    ori $a2, $zero, 2677; NORMV-NEXT:    blt $a1, $a2, .LBB13_4678; NORMV-NEXT:  # %bb.1: # %.preheader679; NORMV-NEXT:    ori $a3, $zero, 1680; NORMV-NEXT:    addi.w $a2, $zero, -1681; NORMV-NEXT:    ori $a4, $zero, 1000682; NORMV-NEXT:    .p2align 4, , 16683; NORMV-NEXT:  .LBB13_2: # =>This Inner Loop Header: Depth=1684; NORMV-NEXT:    addi.w $a5, $a0, 0685; NORMV-NEXT:    blt $a4, $a5, .LBB13_5686; NORMV-NEXT:  # %bb.3: # in Loop: Header=BB13_2 Depth=1687; NORMV-NEXT:    add.d $a0, $a3, $a0688; NORMV-NEXT:    addi.d $a3, $a3, 1689; NORMV-NEXT:    addi.w $a3, $a3, 0690; NORMV-NEXT:    addi.w $a0, $a0, 0691; NORMV-NEXT:    blt $a3, $a1, .LBB13_2692; NORMV-NEXT:  .LBB13_4:693; NORMV-NEXT:    ret694; NORMV-NEXT:  .LBB13_5:695; NORMV-NEXT:    move $a0, $a2696; NORMV-NEXT:    ret697  %3 = icmp sgt i32 %1, 1698  br i1 %3, label %4, label %12699 7004:                                                ; preds = %2, %8701  %5 = phi i32 [ %10, %8 ], [ 1, %2 ]702  %6 = phi i32 [ %9, %8 ], [ %0, %2 ]703  %7 = icmp sgt i32 %6, 1000704  br i1 %7, label %12, label %8705 7068:                                                ; preds = %4707  %9 = add nsw i32 %5, %6708  %10 = add nuw nsw i32 %5, 1709  %11 = icmp slt i32 %10, %1710  br i1 %11, label %4, label %12711 71212:                                               ; preds = %8, %4, %2713  %13 = phi i32 [ %0, %2 ], [ -1, %4 ], [ %9, %8 ]714  ret i32 %13715}716 717define signext i32 @test14b(i32 %0, i32 signext %1) {718; CHECK-LABEL: test14b:719; CHECK:       # %bb.0:720; CHECK-NEXT:    ori $a2, $zero, 2721; CHECK-NEXT:    blt $a1, $a2, .LBB14_4722; CHECK-NEXT:  # %bb.1: # %.preheader723; CHECK-NEXT:    ori $a2, $zero, 1724; CHECK-NEXT:    ori $a3, $zero, 1000725; CHECK-NEXT:    .p2align 4, , 16726; CHECK-NEXT:  .LBB14_2: # =>This Inner Loop Header: Depth=1727; CHECK-NEXT:    addi.w $a4, $a0, 0728; CHECK-NEXT:    blt $a3, $a4, .LBB14_5729; CHECK-NEXT:  # %bb.3: # in Loop: Header=BB14_2 Depth=1730; CHECK-NEXT:    add.d $a0, $a2, $a0731; CHECK-NEXT:    addi.w $a2, $a2, 1732; CHECK-NEXT:    blt $a2, $a1, .LBB14_2733; CHECK-NEXT:  .LBB14_4:734; CHECK-NEXT:    addi.w $a0, $a0, 0735; CHECK-NEXT:    ret736; CHECK-NEXT:  .LBB14_5:737; CHECK-NEXT:    addi.d $a0, $zero, -1738; CHECK-NEXT:    addi.w $a0, $a0, 0739; CHECK-NEXT:    ret740;741; NORMV-LABEL: test14b:742; NORMV:       # %bb.0:743; NORMV-NEXT:    ori $a2, $zero, 2744; NORMV-NEXT:    blt $a1, $a2, .LBB14_4745; NORMV-NEXT:  # %bb.1: # %.preheader746; NORMV-NEXT:    ori $a2, $zero, 1747; NORMV-NEXT:    ori $a3, $zero, 1000748; NORMV-NEXT:    .p2align 4, , 16749; NORMV-NEXT:  .LBB14_2: # =>This Inner Loop Header: Depth=1750; NORMV-NEXT:    addi.w $a4, $a0, 0751; NORMV-NEXT:    blt $a3, $a4, .LBB14_5752; NORMV-NEXT:  # %bb.3: # in Loop: Header=BB14_2 Depth=1753; NORMV-NEXT:    add.d $a0, $a2, $a0754; NORMV-NEXT:    addi.d $a2, $a2, 1755; NORMV-NEXT:    addi.w $a2, $a2, 0756; NORMV-NEXT:    addi.d $a0, $a0, 0757; NORMV-NEXT:    blt $a2, $a1, .LBB14_2758; NORMV-NEXT:  .LBB14_4:759; NORMV-NEXT:    addi.w $a0, $a0, 0760; NORMV-NEXT:    ret761; NORMV-NEXT:  .LBB14_5:762; NORMV-NEXT:    addi.d $a0, $zero, -1763; NORMV-NEXT:    addi.w $a0, $a0, 0764; NORMV-NEXT:    ret765  %3 = icmp sgt i32 %1, 1766  br i1 %3, label %4, label %12767 7684:                                                ; preds = %2, %8769  %5 = phi i32 [ %10, %8 ], [ 1, %2 ]770  %6 = phi i32 [ %9, %8 ], [ %0, %2 ]771  %7 = icmp sgt i32 %6, 1000772  br i1 %7, label %12, label %8773 7748:                                                ; preds = %4775  %9 = add nsw i32 %5, %6776  %10 = add nuw nsw i32 %5, 1777  %11 = icmp slt i32 %10, %1778  br i1 %11, label %4, label %12779 78012:                                               ; preds = %8, %4, %2781  %13 = phi i32 [ %0, %2 ], [ -1, %4 ], [ %9, %8 ]782  ret i32 %13783}784 785define signext i32 @test14c(i32 zeroext %0, i32 signext %1) {786; CHECK-LABEL: test14c:787; CHECK:       # %bb.0:788; CHECK-NEXT:    ori $a2, $zero, 2789; CHECK-NEXT:    blt $a1, $a2, .LBB15_4790; CHECK-NEXT:  # %bb.1: # %.preheader791; CHECK-NEXT:    ori $a2, $zero, 1792; CHECK-NEXT:    ori $a3, $zero, 1000793; CHECK-NEXT:    .p2align 4, , 16794; CHECK-NEXT:  .LBB15_2: # =>This Inner Loop Header: Depth=1795; CHECK-NEXT:    addi.w $a4, $a0, 0796; CHECK-NEXT:    blt $a3, $a4, .LBB15_5797; CHECK-NEXT:  # %bb.3: # in Loop: Header=BB15_2 Depth=1798; CHECK-NEXT:    add.d $a0, $a2, $a0799; CHECK-NEXT:    addi.w $a2, $a2, 1800; CHECK-NEXT:    blt $a2, $a1, .LBB15_2801; CHECK-NEXT:  .LBB15_4:802; CHECK-NEXT:    addi.w $a0, $a0, 0803; CHECK-NEXT:    ret804; CHECK-NEXT:  .LBB15_5:805; CHECK-NEXT:    addi.d $a0, $zero, -1806; CHECK-NEXT:    addi.w $a0, $a0, 0807; CHECK-NEXT:    ret808;809; NORMV-LABEL: test14c:810; NORMV:       # %bb.0:811; NORMV-NEXT:    ori $a2, $zero, 2812; NORMV-NEXT:    blt $a1, $a2, .LBB15_4813; NORMV-NEXT:  # %bb.1: # %.preheader814; NORMV-NEXT:    ori $a2, $zero, 1815; NORMV-NEXT:    ori $a3, $zero, 1000816; NORMV-NEXT:    .p2align 4, , 16817; NORMV-NEXT:  .LBB15_2: # =>This Inner Loop Header: Depth=1818; NORMV-NEXT:    addi.w $a4, $a0, 0819; NORMV-NEXT:    blt $a3, $a4, .LBB15_5820; NORMV-NEXT:  # %bb.3: # in Loop: Header=BB15_2 Depth=1821; NORMV-NEXT:    add.d $a0, $a2, $a0822; NORMV-NEXT:    addi.d $a2, $a2, 1823; NORMV-NEXT:    addi.w $a2, $a2, 0824; NORMV-NEXT:    addi.d $a0, $a0, 0825; NORMV-NEXT:    blt $a2, $a1, .LBB15_2826; NORMV-NEXT:  .LBB15_4:827; NORMV-NEXT:    addi.w $a0, $a0, 0828; NORMV-NEXT:    ret829; NORMV-NEXT:  .LBB15_5:830; NORMV-NEXT:    addi.d $a0, $zero, -1831; NORMV-NEXT:    addi.w $a0, $a0, 0832; NORMV-NEXT:    ret833  %3 = icmp sgt i32 %1, 1834  br i1 %3, label %4, label %12835 8364:                                                ; preds = %2, %8837  %5 = phi i32 [ %10, %8 ], [ 1, %2 ]838  %6 = phi i32 [ %9, %8 ], [ %0, %2 ]839  %7 = icmp sgt i32 %6, 1000840  br i1 %7, label %12, label %8841 8428:                                                ; preds = %4843  %9 = add nsw i32 %5, %6844  %10 = add nuw nsw i32 %5, 1845  %11 = icmp slt i32 %10, %1846  br i1 %11, label %4, label %12847 84812:                                               ; preds = %8, %4, %2849  %13 = phi i32 [ %0, %2 ], [ -1, %4 ], [ %9, %8 ]850  ret i32 %13851}852 853define signext i32 @test14d(i31 zeroext %0, i32 signext %1) {854; CHECK-LABEL: test14d:855; CHECK:       # %bb.0:856; CHECK-NEXT:    ori $a2, $zero, 2857; CHECK-NEXT:    blt $a1, $a2, .LBB16_4858; CHECK-NEXT:  # %bb.1: # %.preheader859; CHECK-NEXT:    ori $a3, $zero, 1860; CHECK-NEXT:    addi.w $a2, $zero, -1861; CHECK-NEXT:    ori $a4, $zero, 1000862; CHECK-NEXT:    .p2align 4, , 16863; CHECK-NEXT:  .LBB16_2: # =>This Inner Loop Header: Depth=1864; CHECK-NEXT:    blt $a4, $a0, .LBB16_5865; CHECK-NEXT:  # %bb.3: # in Loop: Header=BB16_2 Depth=1866; CHECK-NEXT:    add.w $a0, $a3, $a0867; CHECK-NEXT:    addi.w $a3, $a3, 1868; CHECK-NEXT:    blt $a3, $a1, .LBB16_2869; CHECK-NEXT:  .LBB16_4:870; CHECK-NEXT:    ret871; CHECK-NEXT:  .LBB16_5:872; CHECK-NEXT:    move $a0, $a2873; CHECK-NEXT:    ret874;875; NORMV-LABEL: test14d:876; NORMV:       # %bb.0:877; NORMV-NEXT:    ori $a2, $zero, 2878; NORMV-NEXT:    blt $a1, $a2, .LBB16_4879; NORMV-NEXT:  # %bb.1: # %.preheader880; NORMV-NEXT:    ori $a3, $zero, 1881; NORMV-NEXT:    addi.w $a2, $zero, -1882; NORMV-NEXT:    ori $a4, $zero, 1000883; NORMV-NEXT:    .p2align 4, , 16884; NORMV-NEXT:  .LBB16_2: # =>This Inner Loop Header: Depth=1885; NORMV-NEXT:    addi.w $a5, $a0, 0886; NORMV-NEXT:    blt $a4, $a5, .LBB16_5887; NORMV-NEXT:  # %bb.3: # in Loop: Header=BB16_2 Depth=1888; NORMV-NEXT:    add.d $a0, $a3, $a0889; NORMV-NEXT:    addi.d $a3, $a3, 1890; NORMV-NEXT:    addi.w $a3, $a3, 0891; NORMV-NEXT:    addi.w $a0, $a0, 0892; NORMV-NEXT:    blt $a3, $a1, .LBB16_2893; NORMV-NEXT:  .LBB16_4:894; NORMV-NEXT:    ret895; NORMV-NEXT:  .LBB16_5:896; NORMV-NEXT:    move $a0, $a2897; NORMV-NEXT:    ret898  %zext = zext i31 %0 to i32899  %3 = icmp sgt i32 %1, 1900  br i1 %3, label %4, label %12901 9024:                                                ; preds = %2, %8903  %5 = phi i32 [ %10, %8 ], [ 1, %2 ]904  %6 = phi i32 [ %9, %8 ], [ %zext, %2 ]905  %7 = icmp sgt i32 %6, 1000906  br i1 %7, label %12, label %8907 9088:                                                ; preds = %4909  %9 = add nsw i32 %5, %6910  %10 = add nuw nsw i32 %5, 1911  %11 = icmp slt i32 %10, %1912  br i1 %11, label %4, label %12913 91412:                                               ; preds = %8, %4, %2915  %13 = phi i32 [ %zext, %2 ], [ -1, %4 ], [ %9, %8 ]916  ret i32 %13917}918 919define signext i32 @test15(i64 %arg1, i64 %arg2, i64 %arg3, ptr %arg4)  {920; CHECK-LABEL: test15:921; CHECK:       # %bb.0: # %entry922; CHECK-NEXT:    addi.d $a2, $a2, -1923; CHECK-NEXT:    ori $a4, $zero, 256924; CHECK-NEXT:    .p2align 4, , 16925; CHECK-NEXT:  .LBB17_1: # %bb2926; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1927; CHECK-NEXT:    andi $a0, $a0, 1234928; CHECK-NEXT:    add.w $a0, $a0, $a1929; CHECK-NEXT:    addi.d $a2, $a2, 1930; CHECK-NEXT:    st.w $a0, $a3, 0931; CHECK-NEXT:    bltu $a2, $a4, .LBB17_1932; CHECK-NEXT:  # %bb.2: # %bb7933; CHECK-NEXT:    ret934;935; NORMV-LABEL: test15:936; NORMV:       # %bb.0: # %entry937; NORMV-NEXT:    addi.d $a2, $a2, -1938; NORMV-NEXT:    ori $a4, $zero, 256939; NORMV-NEXT:    .p2align 4, , 16940; NORMV-NEXT:  .LBB17_1: # %bb2941; NORMV-NEXT:    # =>This Inner Loop Header: Depth=1942; NORMV-NEXT:    andi $a0, $a0, 1234943; NORMV-NEXT:    add.d $a0, $a0, $a1944; NORMV-NEXT:    addi.d $a2, $a2, 1945; NORMV-NEXT:    st.w $a0, $a3, 0946; NORMV-NEXT:    bltu $a2, $a4, .LBB17_1947; NORMV-NEXT:  # %bb.2: # %bb7948; NORMV-NEXT:    addi.w $a0, $a0, 0949; NORMV-NEXT:    ret950entry:951  br label %bb2952 953bb2:                                              ; preds = %bb2, %entry954  %i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ]955  %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]956  %i3 = add i64 %i2, 1957  %i4 = and i64 %i1, 1234958  %i5 = add i64 %i4, %arg2959  %i8 = trunc i64 %i5 to i32960  store i32 %i8, ptr %arg4961  %i6 = icmp ugt i64 %i2, 255962  br i1 %i6, label %bb7, label %bb2963 964bb7:                                              ; preds = %bb2965  %i7 = trunc i64 %i5 to i32966  ret i32 %i7967}968 969define signext i32 @bug(i32 signext %x) {970; CHECK-LABEL: bug:971; CHECK:       # %bb.0: # %entry972; CHECK-NEXT:    beqz $a0, .LBB18_2973; CHECK-NEXT:  # %bb.1: # %if.end974; CHECK-NEXT:    bstrpick.d $a1, $a0, 31, 16975; CHECK-NEXT:    sltui $a1, $a1, 1976; CHECK-NEXT:    slli.d $a2, $a0, 16977; CHECK-NEXT:    masknez $a0, $a0, $a1978; CHECK-NEXT:    maskeqz $a2, $a2, $a1979; CHECK-NEXT:    or $a0, $a2, $a0980; CHECK-NEXT:    ori $a2, $zero, 32981; CHECK-NEXT:    masknez $a2, $a2, $a1982; CHECK-NEXT:    ori $a3, $zero, 16983; CHECK-NEXT:    maskeqz $a1, $a3, $a1984; CHECK-NEXT:    or $a1, $a1, $a2985; CHECK-NEXT:    bstrpick.d $a2, $a0, 31, 24986; CHECK-NEXT:    sltui $a2, $a2, 1987; CHECK-NEXT:    slli.d $a3, $a0, 8988; CHECK-NEXT:    addi.d $a4, $a1, -8989; CHECK-NEXT:    masknez $a0, $a0, $a2990; CHECK-NEXT:    maskeqz $a3, $a3, $a2991; CHECK-NEXT:    or $a0, $a3, $a0992; CHECK-NEXT:    masknez $a1, $a1, $a2993; CHECK-NEXT:    maskeqz $a2, $a4, $a2994; CHECK-NEXT:    or $a1, $a2, $a1995; CHECK-NEXT:    bstrpick.d $a2, $a0, 31, 28996; CHECK-NEXT:    sltui $a2, $a2, 1997; CHECK-NEXT:    slli.d $a3, $a0, 4998; CHECK-NEXT:    addi.d $a4, $a1, -4999; CHECK-NEXT:    masknez $a0, $a0, $a21000; CHECK-NEXT:    maskeqz $a3, $a3, $a21001; CHECK-NEXT:    or $a0, $a3, $a01002; CHECK-NEXT:    masknez $a1, $a1, $a21003; CHECK-NEXT:    maskeqz $a2, $a4, $a21004; CHECK-NEXT:    or $a1, $a2, $a11005; CHECK-NEXT:    bstrpick.d $a2, $a0, 31, 301006; CHECK-NEXT:    sltui $a2, $a2, 11007; CHECK-NEXT:    slli.d $a3, $a0, 21008; CHECK-NEXT:    addi.d $a4, $a1, -21009; CHECK-NEXT:    masknez $a0, $a0, $a21010; CHECK-NEXT:    maskeqz $a3, $a3, $a21011; CHECK-NEXT:    or $a0, $a3, $a01012; CHECK-NEXT:    addi.w $a0, $a0, 01013; CHECK-NEXT:    masknez $a1, $a1, $a21014; CHECK-NEXT:    maskeqz $a2, $a4, $a21015; CHECK-NEXT:    or $a1, $a2, $a11016; CHECK-NEXT:    nor $a0, $a0, $zero1017; CHECK-NEXT:    srli.d $a0, $a0, 311018; CHECK-NEXT:    add.w $a0, $a1, $a01019; CHECK-NEXT:    ret1020; CHECK-NEXT:  .LBB18_2:1021; CHECK-NEXT:    move $a0, $zero1022; CHECK-NEXT:    ret1023;1024; NORMV-LABEL: bug:1025; NORMV:       # %bb.0: # %entry1026; NORMV-NEXT:    beqz $a0, .LBB18_21027; NORMV-NEXT:  # %bb.1: # %if.end1028; NORMV-NEXT:    bstrpick.d $a1, $a0, 31, 161029; NORMV-NEXT:    sltui $a1, $a1, 11030; NORMV-NEXT:    slli.d $a2, $a0, 161031; NORMV-NEXT:    masknez $a0, $a0, $a11032; NORMV-NEXT:    maskeqz $a2, $a2, $a11033; NORMV-NEXT:    or $a0, $a2, $a01034; NORMV-NEXT:    ori $a2, $zero, 321035; NORMV-NEXT:    masknez $a2, $a2, $a11036; NORMV-NEXT:    ori $a3, $zero, 161037; NORMV-NEXT:    maskeqz $a1, $a3, $a11038; NORMV-NEXT:    or $a1, $a1, $a21039; NORMV-NEXT:    bstrpick.d $a2, $a0, 31, 241040; NORMV-NEXT:    sltui $a2, $a2, 11041; NORMV-NEXT:    slli.d $a3, $a0, 81042; NORMV-NEXT:    addi.d $a4, $a1, -81043; NORMV-NEXT:    masknez $a0, $a0, $a21044; NORMV-NEXT:    maskeqz $a3, $a3, $a21045; NORMV-NEXT:    or $a0, $a3, $a01046; NORMV-NEXT:    masknez $a1, $a1, $a21047; NORMV-NEXT:    maskeqz $a2, $a4, $a21048; NORMV-NEXT:    or $a1, $a2, $a11049; NORMV-NEXT:    bstrpick.d $a2, $a0, 31, 281050; NORMV-NEXT:    sltui $a2, $a2, 11051; NORMV-NEXT:    slli.d $a3, $a0, 41052; NORMV-NEXT:    addi.d $a4, $a1, -41053; NORMV-NEXT:    masknez $a0, $a0, $a21054; NORMV-NEXT:    maskeqz $a3, $a3, $a21055; NORMV-NEXT:    or $a0, $a3, $a01056; NORMV-NEXT:    masknez $a1, $a1, $a21057; NORMV-NEXT:    maskeqz $a2, $a4, $a21058; NORMV-NEXT:    or $a1, $a2, $a11059; NORMV-NEXT:    bstrpick.d $a2, $a0, 31, 301060; NORMV-NEXT:    sltui $a2, $a2, 11061; NORMV-NEXT:    slli.d $a3, $a0, 21062; NORMV-NEXT:    addi.d $a4, $a1, -21063; NORMV-NEXT:    masknez $a0, $a0, $a21064; NORMV-NEXT:    maskeqz $a3, $a3, $a21065; NORMV-NEXT:    or $a0, $a3, $a01066; NORMV-NEXT:    addi.w $a0, $a0, 01067; NORMV-NEXT:    masknez $a1, $a1, $a21068; NORMV-NEXT:    maskeqz $a2, $a4, $a21069; NORMV-NEXT:    or $a1, $a2, $a11070; NORMV-NEXT:    nor $a0, $a0, $zero1071; NORMV-NEXT:    srli.d $a0, $a0, 311072; NORMV-NEXT:    add.d $a0, $a1, $a01073; NORMV-NEXT:    addi.w $a0, $a0, 01074; NORMV-NEXT:    ret1075; NORMV-NEXT:  .LBB18_2:1076; NORMV-NEXT:    move $a0, $zero1077; NORMV-NEXT:    ret1078entry:1079  %tobool.not = icmp eq i32 %x, 01080  br i1 %tobool.not, label %cleanup, label %if.end1081 1082if.end:                                           ; preds = %entry1083  %tobool1.not = icmp ult i32 %x, 655361084  %shl = shl i32 %x, 161085  %spec.select = select i1 %tobool1.not, i32 %shl, i32 %x1086  %spec.select43 = select i1 %tobool1.not, i32 16, i32 321087  %tobool5.not = icmp ult i32 %spec.select, 167772161088  %shl7 = shl i32 %spec.select, 81089  %sub8 = add nsw i32 %spec.select43, -81090  %x.addr.1 = select i1 %tobool5.not, i32 %shl7, i32 %spec.select1091  %r.1 = select i1 %tobool5.not, i32 %sub8, i32 %spec.select431092  %tobool11.not = icmp ult i32 %x.addr.1, 2684354561093  %shl13 = shl i32 %x.addr.1, 41094  %sub14 = add nsw i32 %r.1, -41095  %x.addr.2 = select i1 %tobool11.not, i32 %shl13, i32 %x.addr.11096  %r.2 = select i1 %tobool11.not, i32 %sub14, i32 %r.11097  %tobool17.not = icmp ult i32 %x.addr.2, 10737418241098  %shl19 = shl i32 %x.addr.2, 21099  %sub20 = add nsw i32 %r.2, -21100  %x.addr.3 = select i1 %tobool17.not, i32 %shl19, i32 %x.addr.21101  %r.3 = select i1 %tobool17.not, i32 %sub20, i32 %r.21102  %x.addr.3.lobit = ashr i32 %x.addr.3, 311103  %x.addr.3.lobit.not = xor i32 %x.addr.3.lobit, -11104  %r.4 = add nsw i32 %r.3, %x.addr.3.lobit.not1105  br label %cleanup1106 1107cleanup:                                          ; preds = %entry, %if.end1108  %retval.0 = phi i32 [ %r.4, %if.end ], [ 0, %entry ]1109  ret i32 %retval.01110}1111 1112define void @test16(i32 signext %arg, i32 signext %arg1) nounwind {1113; CHECK-LABEL: test16:1114; CHECK:       # %bb.0: # %bb1115; CHECK-NEXT:    addi.d $sp, $sp, -321116; CHECK-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill1117; CHECK-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill1118; CHECK-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill1119; CHECK-NEXT:    move $fp, $a11120; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)1121; CHECK-NEXT:    jirl $ra, $ra, 01122; CHECK-NEXT:    move $s0, $a01123; CHECK-NEXT:    .p2align 4, , 161124; CHECK-NEXT:  .LBB19_1: # %bb21125; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11126; CHECK-NEXT:    move $a0, $s01127; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)1128; CHECK-NEXT:    jirl $ra, $ra, 01129; CHECK-NEXT:    sll.w $s0, $s0, $fp1130; CHECK-NEXT:    bnez $a0, .LBB19_11131; CHECK-NEXT:  # %bb.2: # %bb71132; CHECK-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload1133; CHECK-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload1134; CHECK-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload1135; CHECK-NEXT:    addi.d $sp, $sp, 321136; CHECK-NEXT:    ret1137;1138; NORMV-LABEL: test16:1139; NORMV:       # %bb.0: # %bb1140; NORMV-NEXT:    addi.d $sp, $sp, -321141; NORMV-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill1142; NORMV-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill1143; NORMV-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill1144; NORMV-NEXT:    move $fp, $a11145; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)1146; NORMV-NEXT:    jirl $ra, $ra, 01147; NORMV-NEXT:    move $s0, $a01148; NORMV-NEXT:    .p2align 4, , 161149; NORMV-NEXT:  .LBB19_1: # %bb21150; NORMV-NEXT:    # =>This Inner Loop Header: Depth=11151; NORMV-NEXT:    addi.w $a0, $s0, 01152; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)1153; NORMV-NEXT:    jirl $ra, $ra, 01154; NORMV-NEXT:    sll.w $s0, $s0, $fp1155; NORMV-NEXT:    bnez $a0, .LBB19_11156; NORMV-NEXT:  # %bb.2: # %bb71157; NORMV-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload1158; NORMV-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload1159; NORMV-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload1160; NORMV-NEXT:    addi.d $sp, $sp, 321161; NORMV-NEXT:    ret1162bb:1163  %i = call signext i32 @bar(i32 signext %arg)1164  br label %bb21165 1166bb2:                                              ; preds = %bb2, %bb1167  %i3 = phi i32 [ %i, %bb ], [ %i5, %bb2 ]1168  %i4 = tail call signext i32 @bar(i32 signext %i3)1169  %i5 = shl i32 %i3, %arg11170  %i6 = icmp eq i32 %i4, 01171  br i1 %i6, label %bb7, label %bb21172 1173bb7:                                              ; preds = %bb21174  ret void1175}1176 1177define void @test17(i32 signext %arg, i32 signext %arg1) nounwind {1178; CHECK-LABEL: test17:1179; CHECK:       # %bb.0: # %bb1180; CHECK-NEXT:    addi.d $sp, $sp, -321181; CHECK-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill1182; CHECK-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill1183; CHECK-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill1184; CHECK-NEXT:    move $fp, $a11185; CHECK-NEXT:    pcaddu18i $ra, %call36(bat)1186; CHECK-NEXT:    jirl $ra, $ra, 01187; CHECK-NEXT:    move $s0, $a01188; CHECK-NEXT:    .p2align 4, , 161189; CHECK-NEXT:  .LBB20_1: # %bb21190; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11191; CHECK-NEXT:    move $a0, $s01192; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)1193; CHECK-NEXT:    jirl $ra, $ra, 01194; CHECK-NEXT:    sll.w $s0, $s0, $fp1195; CHECK-NEXT:    bnez $a0, .LBB20_11196; CHECK-NEXT:  # %bb.2: # %bb71197; CHECK-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload1198; CHECK-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload1199; CHECK-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload1200; CHECK-NEXT:    addi.d $sp, $sp, 321201; CHECK-NEXT:    ret1202;1203; NORMV-LABEL: test17:1204; NORMV:       # %bb.0: # %bb1205; NORMV-NEXT:    addi.d $sp, $sp, -321206; NORMV-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill1207; NORMV-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill1208; NORMV-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill1209; NORMV-NEXT:    move $fp, $a11210; NORMV-NEXT:    pcaddu18i $ra, %call36(bat)1211; NORMV-NEXT:    jirl $ra, $ra, 01212; NORMV-NEXT:    move $s0, $a01213; NORMV-NEXT:    .p2align 4, , 161214; NORMV-NEXT:  .LBB20_1: # %bb21215; NORMV-NEXT:    # =>This Inner Loop Header: Depth=11216; NORMV-NEXT:    addi.w $a0, $s0, 01217; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)1218; NORMV-NEXT:    jirl $ra, $ra, 01219; NORMV-NEXT:    sll.w $s0, $s0, $fp1220; NORMV-NEXT:    bnez $a0, .LBB20_11221; NORMV-NEXT:  # %bb.2: # %bb71222; NORMV-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload1223; NORMV-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload1224; NORMV-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload1225; NORMV-NEXT:    addi.d $sp, $sp, 321226; NORMV-NEXT:    ret1227bb:1228  %i = call zeroext i16 @bat(i32 signext %arg)1229  %zext = zext i16 %i to i321230  br label %bb21231 1232bb2:                                              ; preds = %bb2, %bb1233  %i3 = phi i32 [ %zext, %bb ], [ %i5, %bb2 ]1234  %i4 = tail call signext i32 @bar(i32 signext %i3)1235  %i5 = shl i32 %i3, %arg11236  %i6 = icmp eq i32 %i4, 01237  br i1 %i6, label %bb7, label %bb21238 1239bb7:                                              ; preds = %bb21240  ret void1241}1242declare zeroext i16 @bat(i32 signext)1243 1244define signext i32 @sextw_sh2add(i1 zeroext %0, ptr %1, i32 signext %2, i32 signext %3, i32 signext %4) {1245; CHECK-LABEL: sextw_sh2add:1246; CHECK:       # %bb.0:1247; CHECK-NEXT:    alsl.w $a2, $a2, $a3, 21248; CHECK-NEXT:    beqz $a0, .LBB21_21249; CHECK-NEXT:  # %bb.1:1250; CHECK-NEXT:    st.w $a2, $a1, 01251; CHECK-NEXT:  .LBB21_2:1252; CHECK-NEXT:    add.w $a0, $a2, $a41253; CHECK-NEXT:    ret1254;1255; NORMV-LABEL: sextw_sh2add:1256; NORMV:       # %bb.0:1257; NORMV-NEXT:    alsl.w $a2, $a2, $a3, 21258; NORMV-NEXT:    beqz $a0, .LBB21_21259; NORMV-NEXT:  # %bb.1:1260; NORMV-NEXT:    st.w $a2, $a1, 01261; NORMV-NEXT:  .LBB21_2:1262; NORMV-NEXT:    add.d $a0, $a2, $a41263; NORMV-NEXT:    addi.w $a0, $a0, 01264; NORMV-NEXT:    ret1265  %6 = shl i32 %2, 21266  %7 = add i32 %6, %31267  br i1 %0, label %8, label %91268 12698:                                                ; preds = %51270  store i32 %7, ptr %1, align 41271  br label %91272 12739:                                                ; preds = %5, %81274  %10 = add i32 %7, %41275  ret i32 %101276}1277 1278define signext i32 @test19(i64 %arg, i1 zeroext %c1, i1 zeroext %c2, ptr %p) nounwind {1279; CHECK-LABEL: test19:1280; CHECK:       # %bb.0: # %bb1281; CHECK-NEXT:    addi.d $sp, $sp, -161282; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill1283; CHECK-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill1284; CHECK-NEXT:    ori $a0, $zero, 351285; CHECK-NEXT:    lu32i.d $a0, 11286; CHECK-NEXT:    maskeqz $fp, $a0, $a11287; CHECK-NEXT:    st.d $fp, $a3, 01288; CHECK-NEXT:    beqz $a2, .LBB22_21289; CHECK-NEXT:  # %bb.1: # %bb21290; CHECK-NEXT:    move $a0, $zero1291; CHECK-NEXT:    pcaddu18i $ra, %call36(bar)1292; CHECK-NEXT:    jirl $ra, $ra, 01293; CHECK-NEXT:    move $fp, $a01294; CHECK-NEXT:  .LBB22_2: # %bb71295; CHECK-NEXT:    pcaddu18i $ra, %call36(side_effect)1296; CHECK-NEXT:    jirl $ra, $ra, 01297; CHECK-NEXT:    addi.w $a0, $fp, 01298; CHECK-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload1299; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload1300; CHECK-NEXT:    addi.d $sp, $sp, 161301; CHECK-NEXT:    ret1302;1303; NORMV-LABEL: test19:1304; NORMV:       # %bb.0: # %bb1305; NORMV-NEXT:    addi.d $sp, $sp, -161306; NORMV-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill1307; NORMV-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill1308; NORMV-NEXT:    ori $a0, $zero, 351309; NORMV-NEXT:    lu32i.d $a0, 11310; NORMV-NEXT:    maskeqz $fp, $a0, $a11311; NORMV-NEXT:    st.d $fp, $a3, 01312; NORMV-NEXT:    beqz $a2, .LBB22_21313; NORMV-NEXT:  # %bb.1: # %bb21314; NORMV-NEXT:    move $a0, $zero1315; NORMV-NEXT:    pcaddu18i $ra, %call36(bar)1316; NORMV-NEXT:    jirl $ra, $ra, 01317; NORMV-NEXT:    move $fp, $a01318; NORMV-NEXT:  .LBB22_2: # %bb71319; NORMV-NEXT:    pcaddu18i $ra, %call36(side_effect)1320; NORMV-NEXT:    jirl $ra, $ra, 01321; NORMV-NEXT:    addi.w $a0, $fp, 01322; NORMV-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload1323; NORMV-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload1324; NORMV-NEXT:    addi.d $sp, $sp, 161325; NORMV-NEXT:    ret1326bb:1327  %sel = select i1 %c1, i64 4294967331, i64 01328  store i64 %sel, ptr %p, align 81329  br i1 %c2, label %bb2, label %bb71330 1331bb2:                                              ; preds = %bb2, %bb1332  %i4 = call signext i32 @bar(i32 0)1333  %i4.sext = sext i32 %i4 to i641334  br label %bb71335 1336bb7:                                              ; preds = %bb21337  %phi = phi i64 [ %sel, %bb ], [ %i4.sext, %bb2 ]1338  %trunc = trunc i64 %phi to i321339  call void @side_effect()1340  ret i32 %trunc1341}1342 1343declare void @side_effect(i64)1344 1345declare i32 @llvm.loongarch.lsx.vpickve2gr.w(<4 x i32>, i32)1346 1347define signext i32 @test20(<4 x i32> %v) {1348; CHECK-LABEL: test20:1349; CHECK:       # %bb.0: # %entry1350; CHECK-NEXT:    vpickve2gr.w $a0, $vr0, 31351; CHECK-NEXT:    ret1352;1353; NORMV-LABEL: test20:1354; NORMV:       # %bb.0: # %entry1355; NORMV-NEXT:    vpickve2gr.w $a0, $vr0, 31356; NORMV-NEXT:    addi.w $a0, $a0, 01357; NORMV-NEXT:    ret1358entry:1359  %a = call i32 @llvm.loongarch.lsx.vpickve2gr.w(<4 x i32> %v, i32 3)1360  ret i32 %a1361}1362 1363define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext %I, i64 %0, ptr %a.1, i64 %1, i1 %c, i32 %2) {1364; CHECK-LABEL: test21:1365; CHECK:       # %bb.0: # %entry1366; CHECK-NEXT:    addi.d $sp, $sp, -801367; CHECK-NEXT:    .cfi_def_cfa_offset 801368; CHECK-NEXT:    st.d $ra, $sp, 72 # 8-byte Folded Spill1369; CHECK-NEXT:    st.d $fp, $sp, 64 # 8-byte Folded Spill1370; CHECK-NEXT:    st.d $s0, $sp, 56 # 8-byte Folded Spill1371; CHECK-NEXT:    st.d $s1, $sp, 48 # 8-byte Folded Spill1372; CHECK-NEXT:    st.d $s2, $sp, 40 # 8-byte Folded Spill1373; CHECK-NEXT:    st.d $s3, $sp, 32 # 8-byte Folded Spill1374; CHECK-NEXT:    st.d $s4, $sp, 24 # 8-byte Folded Spill1375; CHECK-NEXT:    st.d $s5, $sp, 16 # 8-byte Folded Spill1376; CHECK-NEXT:    st.d $s6, $sp, 8 # 8-byte Folded Spill1377; CHECK-NEXT:    .cfi_offset 1, -81378; CHECK-NEXT:    .cfi_offset 22, -161379; CHECK-NEXT:    .cfi_offset 23, -241380; CHECK-NEXT:    .cfi_offset 24, -321381; CHECK-NEXT:    .cfi_offset 25, -401382; CHECK-NEXT:    .cfi_offset 26, -481383; CHECK-NEXT:    .cfi_offset 27, -561384; CHECK-NEXT:    .cfi_offset 28, -641385; CHECK-NEXT:    .cfi_offset 29, -721386; CHECK-NEXT:    ld.w $s6, $sp, 801387; CHECK-NEXT:    move $s2, $a71388; CHECK-NEXT:    move $s4, $a51389; CHECK-NEXT:    move $s0, $a41390; CHECK-NEXT:    move $fp, $a31391; CHECK-NEXT:    move $s5, $a21392; CHECK-NEXT:    move $s3, $a11393; CHECK-NEXT:    move $s1, $a01394; CHECK-NEXT:    move $a0, $zero1395; CHECK-NEXT:    jirl $ra, $zero, 01396; CHECK-NEXT:    beqz $s4, .LBB24_21397; CHECK-NEXT:  # %bb.1: # %if.then261398; CHECK-NEXT:    addi.w $s6, $s6, 11399; CHECK-NEXT:    beqz $s4, .LBB24_31400; CHECK-NEXT:    b .LBB24_61401; CHECK-NEXT:  .LBB24_2:1402; CHECK-NEXT:    move $s3, $s51403; CHECK-NEXT:    bnez $s4, .LBB24_61404; CHECK-NEXT:  .LBB24_3: # %for.cond32.preheader.preheader1405; CHECK-NEXT:    ld.d $a0, $sp, 961406; CHECK-NEXT:    ld.d $a1, $sp, 881407; CHECK-NEXT:    sltui $a2, $s6, 11408; CHECK-NEXT:    masknez $a0, $a0, $a21409; CHECK-NEXT:    vreplgr2vr.w $vr0, $s61410; CHECK-NEXT:    andi $a1, $a1, 11411; CHECK-NEXT:    .p2align 4, , 161412; CHECK-NEXT:  .LBB24_4: # %for.cond32.preheader1413; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11414; CHECK-NEXT:    st.w $a0, $zero, 01415; CHECK-NEXT:    vst $vr0, $s2, 01416; CHECK-NEXT:    bnez $a1, .LBB24_41417; CHECK-NEXT:  # %bb.5: # %for.cond.cleanup1418; CHECK-NEXT:    move $a0, $zero1419; CHECK-NEXT:    move $a1, $s31420; CHECK-NEXT:    move $a2, $zero1421; CHECK-NEXT:    move $a3, $zero1422; CHECK-NEXT:    move $a4, $zero1423; CHECK-NEXT:    move $a5, $zero1424; CHECK-NEXT:    jirl $ra, $zero, 01425; CHECK-NEXT:    move $a0, $s11426; CHECK-NEXT:    move $a1, $s01427; CHECK-NEXT:    move $a2, $zero1428; CHECK-NEXT:    move $a3, $fp1429; CHECK-NEXT:    jirl $ra, $zero, 01430; CHECK-NEXT:  .LBB24_6: # %for.cond32.preheader.us.preheader1431; CHECK-NEXT:    move $a0, $zero1432; CHECK-NEXT:    ld.d $s6, $sp, 8 # 8-byte Folded Reload1433; CHECK-NEXT:    ld.d $s5, $sp, 16 # 8-byte Folded Reload1434; CHECK-NEXT:    ld.d $s4, $sp, 24 # 8-byte Folded Reload1435; CHECK-NEXT:    ld.d $s3, $sp, 32 # 8-byte Folded Reload1436; CHECK-NEXT:    ld.d $s2, $sp, 40 # 8-byte Folded Reload1437; CHECK-NEXT:    ld.d $s1, $sp, 48 # 8-byte Folded Reload1438; CHECK-NEXT:    ld.d $s0, $sp, 56 # 8-byte Folded Reload1439; CHECK-NEXT:    ld.d $fp, $sp, 64 # 8-byte Folded Reload1440; CHECK-NEXT:    ld.d $ra, $sp, 72 # 8-byte Folded Reload1441; CHECK-NEXT:    addi.d $sp, $sp, 801442; CHECK-NEXT:    ret1443;1444; NORMV-LABEL: test21:1445; NORMV:       # %bb.0: # %entry1446; NORMV-NEXT:    addi.d $sp, $sp, -801447; NORMV-NEXT:    .cfi_def_cfa_offset 801448; NORMV-NEXT:    st.d $ra, $sp, 72 # 8-byte Folded Spill1449; NORMV-NEXT:    st.d $fp, $sp, 64 # 8-byte Folded Spill1450; NORMV-NEXT:    st.d $s0, $sp, 56 # 8-byte Folded Spill1451; NORMV-NEXT:    st.d $s1, $sp, 48 # 8-byte Folded Spill1452; NORMV-NEXT:    st.d $s2, $sp, 40 # 8-byte Folded Spill1453; NORMV-NEXT:    st.d $s3, $sp, 32 # 8-byte Folded Spill1454; NORMV-NEXT:    st.d $s4, $sp, 24 # 8-byte Folded Spill1455; NORMV-NEXT:    st.d $s5, $sp, 16 # 8-byte Folded Spill1456; NORMV-NEXT:    st.d $s6, $sp, 8 # 8-byte Folded Spill1457; NORMV-NEXT:    .cfi_offset 1, -81458; NORMV-NEXT:    .cfi_offset 22, -161459; NORMV-NEXT:    .cfi_offset 23, -241460; NORMV-NEXT:    .cfi_offset 24, -321461; NORMV-NEXT:    .cfi_offset 25, -401462; NORMV-NEXT:    .cfi_offset 26, -481463; NORMV-NEXT:    .cfi_offset 27, -561464; NORMV-NEXT:    .cfi_offset 28, -641465; NORMV-NEXT:    .cfi_offset 29, -721466; NORMV-NEXT:    ld.d $s6, $sp, 801467; NORMV-NEXT:    move $s2, $a71468; NORMV-NEXT:    move $s4, $a51469; NORMV-NEXT:    move $s0, $a41470; NORMV-NEXT:    move $fp, $a31471; NORMV-NEXT:    move $s5, $a21472; NORMV-NEXT:    move $s3, $a11473; NORMV-NEXT:    move $s1, $a01474; NORMV-NEXT:    move $a0, $zero1475; NORMV-NEXT:    jirl $ra, $zero, 01476; NORMV-NEXT:    beqz $s4, .LBB24_21477; NORMV-NEXT:  # %bb.1: # %if.then261478; NORMV-NEXT:    addi.d $a0, $s6, 11479; NORMV-NEXT:    addi.d $s6, $a0, 01480; NORMV-NEXT:    beqz $s4, .LBB24_31481; NORMV-NEXT:    b .LBB24_61482; NORMV-NEXT:  .LBB24_2:1483; NORMV-NEXT:    move $s3, $s51484; NORMV-NEXT:    bnez $s4, .LBB24_61485; NORMV-NEXT:  .LBB24_3: # %for.cond32.preheader.preheader1486; NORMV-NEXT:    ld.d $a0, $sp, 961487; NORMV-NEXT:    ld.d $a1, $sp, 881488; NORMV-NEXT:    addi.w $a2, $s6, 01489; NORMV-NEXT:    sltui $a2, $a2, 11490; NORMV-NEXT:    masknez $a0, $a0, $a21491; NORMV-NEXT:    vreplgr2vr.w $vr0, $s61492; NORMV-NEXT:    andi $a1, $a1, 11493; NORMV-NEXT:    .p2align 4, , 161494; NORMV-NEXT:  .LBB24_4: # %for.cond32.preheader1495; NORMV-NEXT:    # =>This Inner Loop Header: Depth=11496; NORMV-NEXT:    st.w $a0, $zero, 01497; NORMV-NEXT:    vst $vr0, $s2, 01498; NORMV-NEXT:    bnez $a1, .LBB24_41499; NORMV-NEXT:  # %bb.5: # %for.cond.cleanup1500; NORMV-NEXT:    move $a0, $zero1501; NORMV-NEXT:    move $a1, $s31502; NORMV-NEXT:    move $a2, $zero1503; NORMV-NEXT:    move $a3, $zero1504; NORMV-NEXT:    move $a4, $zero1505; NORMV-NEXT:    move $a5, $zero1506; NORMV-NEXT:    jirl $ra, $zero, 01507; NORMV-NEXT:    move $a0, $s11508; NORMV-NEXT:    move $a1, $s01509; NORMV-NEXT:    move $a2, $zero1510; NORMV-NEXT:    move $a3, $fp1511; NORMV-NEXT:    jirl $ra, $zero, 01512; NORMV-NEXT:  .LBB24_6: # %for.cond32.preheader.us.preheader1513; NORMV-NEXT:    move $a0, $zero1514; NORMV-NEXT:    ld.d $s6, $sp, 8 # 8-byte Folded Reload1515; NORMV-NEXT:    ld.d $s5, $sp, 16 # 8-byte Folded Reload1516; NORMV-NEXT:    ld.d $s4, $sp, 24 # 8-byte Folded Reload1517; NORMV-NEXT:    ld.d $s3, $sp, 32 # 8-byte Folded Reload1518; NORMV-NEXT:    ld.d $s2, $sp, 40 # 8-byte Folded Reload1519; NORMV-NEXT:    ld.d $s1, $sp, 48 # 8-byte Folded Reload1520; NORMV-NEXT:    ld.d $s0, $sp, 56 # 8-byte Folded Reload1521; NORMV-NEXT:    ld.d $fp, $sp, 64 # 8-byte Folded Reload1522; NORMV-NEXT:    ld.d $ra, $sp, 72 # 8-byte Folded Reload1523; NORMV-NEXT:    addi.d $sp, $sp, 801524; NORMV-NEXT:    ret1525entry:1526  %call4.i.i.i.i = tail call i32 null(ptr null)1527  %conv = trunc i64 %1 to i321528  br i1 %I, label %if.then26, label %if.end301529 1530if.then26:                                        ; preds = %entry1531  %sub27 = add i32 %conv, 11532  br label %if.end301533 1534if.end30:                                         ; preds = %if.then26, %entry1535  %Op1.addr.0 = phi ptr [ %Op0, %if.then26 ], [ %Op1, %entry ]1536  %ShiftVal.1 = phi i32 [ %sub27, %if.then26 ], [ %conv, %entry ]1537  br i1 %I, label %for.cond32.preheader.us.preheader, label %for.cond32.preheader.preheader1538 1539for.cond32.preheader.preheader:                   ; preds = %if.end301540  %cmp37 = icmp ult i32 %ShiftVal.1, 11541  %spec.select = select i1 %cmp37, i32 0, i32 %21542  br label %for.cond32.preheader1543 1544for.cond32.preheader.us.preheader:                ; preds = %if.end301545  ret ptr null1546 1547for.cond32.preheader:                             ; preds = %for.cond32.preheader, %for.cond32.preheader.preheader1548  store i32 %spec.select, ptr null, align 41549  %3 = insertelement <4 x i32> zeroinitializer, i32 %ShiftVal.1, i64 01550  %4 = shufflevector <4 x i32> %3, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer1551  store <4 x i32> %4, ptr %a.1, align 41552  br i1 %c, label %for.cond32.preheader, label %for.cond.cleanup1553 1554for.cond.cleanup:                                 ; preds = %for.cond32.preheader1555  %call48 = call ptr null(ptr null, ptr %Op1.addr.0, ptr null, [2 x i64] zeroinitializer, ptr null)1556  %call49 = call fastcc ptr null(ptr %B, ptr %M, ptr null, ptr %P)1557  ret ptr null1558}1559