brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.8 KiB · 16b7403 Raw
806 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv6m-none-eabi | FileCheck %s --check-prefix=CHECKV6M3; RUN: llc < %s -mtriple=thumbv7m-none-eabi | FileCheck %s --check-prefix=CHECKV7M4; RUN: llc < %s -mtriple=thumbv7a-none-eabi | FileCheck %s --check-prefix=CHECKV7A5 6define i32 @icmp64_sge_0(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {7; CHECKV6M-LABEL: icmp64_sge_0:8; CHECKV6M:       @ %bb.0:9; CHECKV6M-NEXT:    ldr r0, [sp, #8]10; CHECKV6M-NEXT:    lsls r0, r0, #3111; CHECKV6M-NEXT:    ldr r2, [sp, #4]12; CHECKV6M-NEXT:    ldr r0, [sp]13; CHECKV6M-NEXT:    beq .LBB0_414; CHECKV6M-NEXT:  @ %bb.1: @ %then15; CHECKV6M-NEXT:    cmp r3, #016; CHECKV6M-NEXT:    mov r3, r017; CHECKV6M-NEXT:    blt .LBB0_718; CHECKV6M-NEXT:  @ %bb.2: @ %then19; CHECKV6M-NEXT:    cmp r1, #020; CHECKV6M-NEXT:    blt .LBB0_821; CHECKV6M-NEXT:  .LBB0_3: @ %then22; CHECKV6M-NEXT:    adds r0, r0, r323; CHECKV6M-NEXT:    bx lr24; CHECKV6M-NEXT:  .LBB0_4: @ %else25; CHECKV6M-NEXT:    cmp r1, #026; CHECKV6M-NEXT:    bge .LBB0_627; CHECKV6M-NEXT:  @ %bb.5: @ %else28; CHECKV6M-NEXT:    mov r0, r229; CHECKV6M-NEXT:  .LBB0_6: @ %else30; CHECKV6M-NEXT:    bx lr31; CHECKV6M-NEXT:  .LBB0_7: @ %then32; CHECKV6M-NEXT:    mov r3, r233; CHECKV6M-NEXT:    cmp r1, #034; CHECKV6M-NEXT:    bge .LBB0_335; CHECKV6M-NEXT:  .LBB0_8: @ %then36; CHECKV6M-NEXT:    mov r0, r237; CHECKV6M-NEXT:    adds r0, r0, r338; CHECKV6M-NEXT:    bx lr39;40; CHECKV7M-LABEL: icmp64_sge_0:41; CHECKV7M:       @ %bb.0:42; CHECKV7M-NEXT:    ldr r0, [sp, #8]43; CHECKV7M-NEXT:    lsls r0, r0, #3144; CHECKV7M-NEXT:    ldrd r2, r0, [sp]45; CHECKV7M-NEXT:    beq .LBB0_246; CHECKV7M-NEXT:  @ %bb.1: @ %then47; CHECKV7M-NEXT:    cmp.w r3, #-148; CHECKV7M-NEXT:    mov r3, r049; CHECKV7M-NEXT:    it gt50; CHECKV7M-NEXT:    movgt r3, r251; CHECKV7M-NEXT:    cmp.w r1, #-152; CHECKV7M-NEXT:    it gt53; CHECKV7M-NEXT:    movgt r0, r254; CHECKV7M-NEXT:    add r0, r355; CHECKV7M-NEXT:    bx lr56; CHECKV7M-NEXT:  .LBB0_2: @ %else57; CHECKV7M-NEXT:    cmp.w r1, #-158; CHECKV7M-NEXT:    it gt59; CHECKV7M-NEXT:    movgt r0, r260; CHECKV7M-NEXT:    bx lr61;62; CHECKV7A-LABEL: icmp64_sge_0:63; CHECKV7A:       @ %bb.0:64; CHECKV7A-NEXT:    ldr r2, [sp, #8]65; CHECKV7A-NEXT:    ldrd r12, r0, [sp]66; CHECKV7A-NEXT:    lsls r2, r2, #3167; CHECKV7A-NEXT:    beq .LBB0_268; CHECKV7A-NEXT:  @ %bb.1: @ %then69; CHECKV7A-NEXT:    cmp.w r3, #-170; CHECKV7A-NEXT:    mov r2, r071; CHECKV7A-NEXT:    it gt72; CHECKV7A-NEXT:    movgt r2, r1273; CHECKV7A-NEXT:    cmp.w r1, #-174; CHECKV7A-NEXT:    it gt75; CHECKV7A-NEXT:    movgt r0, r1276; CHECKV7A-NEXT:    add r0, r277; CHECKV7A-NEXT:    bx lr78; CHECKV7A-NEXT:  .LBB0_2: @ %else79; CHECKV7A-NEXT:    cmp.w r1, #-180; CHECKV7A-NEXT:    it gt81; CHECKV7A-NEXT:    movgt r0, r1282; CHECKV7A-NEXT:    bx lr83  br i1 %c, label %then, label %else84then:85  %c1 = icmp sge i64 %x, 086  %c2 = icmp sge i64 %y, 087  %s1 = select i1 %c1, i32 %a, i32 %b88  %s2 = select i1 %c2, i32 %a, i32 %b89  %r = add i32 %s1, %s290  ret i32 %r91else:92  %c3 = icmp sge i64 %x, 093  %s3 = select i1 %c3, i32 %a, i32 %b94  ret i32 %s395}96 97define i32 @icmp64_sgt_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {98; CHECKV6M-LABEL: icmp64_sgt_m1:99; CHECKV6M:       @ %bb.0:100; CHECKV6M-NEXT:    ldr r0, [sp, #8]101; CHECKV6M-NEXT:    lsls r0, r0, #31102; CHECKV6M-NEXT:    ldr r2, [sp, #4]103; CHECKV6M-NEXT:    ldr r0, [sp]104; CHECKV6M-NEXT:    beq .LBB1_4105; CHECKV6M-NEXT:  @ %bb.1: @ %then106; CHECKV6M-NEXT:    cmp r3, #0107; CHECKV6M-NEXT:    mov r3, r0108; CHECKV6M-NEXT:    blt .LBB1_7109; CHECKV6M-NEXT:  @ %bb.2: @ %then110; CHECKV6M-NEXT:    cmp r1, #0111; CHECKV6M-NEXT:    blt .LBB1_8112; CHECKV6M-NEXT:  .LBB1_3: @ %then113; CHECKV6M-NEXT:    adds r0, r0, r3114; CHECKV6M-NEXT:    bx lr115; CHECKV6M-NEXT:  .LBB1_4: @ %else116; CHECKV6M-NEXT:    cmp r3, #0117; CHECKV6M-NEXT:    bge .LBB1_6118; CHECKV6M-NEXT:  @ %bb.5: @ %else119; CHECKV6M-NEXT:    mov r0, r2120; CHECKV6M-NEXT:  .LBB1_6: @ %else121; CHECKV6M-NEXT:    bx lr122; CHECKV6M-NEXT:  .LBB1_7: @ %then123; CHECKV6M-NEXT:    mov r3, r2124; CHECKV6M-NEXT:    cmp r1, #0125; CHECKV6M-NEXT:    bge .LBB1_3126; CHECKV6M-NEXT:  .LBB1_8: @ %then127; CHECKV6M-NEXT:    mov r0, r2128; CHECKV6M-NEXT:    adds r0, r0, r3129; CHECKV6M-NEXT:    bx lr130;131; CHECKV7M-LABEL: icmp64_sgt_m1:132; CHECKV7M:       @ %bb.0:133; CHECKV7M-NEXT:    ldr r0, [sp, #8]134; CHECKV7M-NEXT:    lsls r0, r0, #31135; CHECKV7M-NEXT:    ldrd r2, r0, [sp]136; CHECKV7M-NEXT:    beq .LBB1_2137; CHECKV7M-NEXT:  @ %bb.1: @ %then138; CHECKV7M-NEXT:    cmp.w r3, #-1139; CHECKV7M-NEXT:    mov r3, r0140; CHECKV7M-NEXT:    it gt141; CHECKV7M-NEXT:    movgt r3, r2142; CHECKV7M-NEXT:    cmp.w r1, #-1143; CHECKV7M-NEXT:    it gt144; CHECKV7M-NEXT:    movgt r0, r2145; CHECKV7M-NEXT:    add r0, r3146; CHECKV7M-NEXT:    bx lr147; CHECKV7M-NEXT:  .LBB1_2: @ %else148; CHECKV7M-NEXT:    cmp.w r3, #-1149; CHECKV7M-NEXT:    it gt150; CHECKV7M-NEXT:    movgt r0, r2151; CHECKV7M-NEXT:    bx lr152;153; CHECKV7A-LABEL: icmp64_sgt_m1:154; CHECKV7A:       @ %bb.0:155; CHECKV7A-NEXT:    ldr r2, [sp, #8]156; CHECKV7A-NEXT:    ldrd r12, r0, [sp]157; CHECKV7A-NEXT:    lsls r2, r2, #31158; CHECKV7A-NEXT:    beq .LBB1_2159; CHECKV7A-NEXT:  @ %bb.1: @ %then160; CHECKV7A-NEXT:    cmp.w r3, #-1161; CHECKV7A-NEXT:    mov r2, r0162; CHECKV7A-NEXT:    it gt163; CHECKV7A-NEXT:    movgt r2, r12164; CHECKV7A-NEXT:    cmp.w r1, #-1165; CHECKV7A-NEXT:    it gt166; CHECKV7A-NEXT:    movgt r0, r12167; CHECKV7A-NEXT:    add r0, r2168; CHECKV7A-NEXT:    bx lr169; CHECKV7A-NEXT:  .LBB1_2: @ %else170; CHECKV7A-NEXT:    cmp.w r3, #-1171; CHECKV7A-NEXT:    it gt172; CHECKV7A-NEXT:    movgt r0, r12173; CHECKV7A-NEXT:    bx lr174  br i1 %c, label %then, label %else175then:176  %c1 = icmp sgt i64 %x, -1177  %c2 = icmp sgt i64 %y, -1178  %s1 = select i1 %c1, i32 %a, i32 %b179  %s2 = select i1 %c2, i32 %a, i32 %b180  %r = add i32 %s1, %s2181  ret i32 %r182else:183  %c3 = icmp sgt i64 %y, -1184  %s3 = select i1 %c3, i32 %a, i32 %b185  ret i32 %s3186}187 188define i32 @icmp32_sge_0(i32 %x, i32 %y, i32 %a, i32 %b, i1 %c) {189; CHECKV6M-LABEL: icmp32_sge_0:190; CHECKV6M:       @ %bb.0:191; CHECKV6M-NEXT:    .save {r4, lr}192; CHECKV6M-NEXT:    push {r4, lr}193; CHECKV6M-NEXT:    ldr r4, [sp, #8]194; CHECKV6M-NEXT:    lsls r4, r4, #31195; CHECKV6M-NEXT:    beq .LBB2_4196; CHECKV6M-NEXT:  @ %bb.1: @ %then197; CHECKV6M-NEXT:    cmp r1, #0198; CHECKV6M-NEXT:    mov r1, r2199; CHECKV6M-NEXT:    blt .LBB2_7200; CHECKV6M-NEXT:  @ %bb.2: @ %then201; CHECKV6M-NEXT:    cmp r0, #0202; CHECKV6M-NEXT:    blt .LBB2_8203; CHECKV6M-NEXT:  .LBB2_3: @ %then204; CHECKV6M-NEXT:    adds r0, r2, r1205; CHECKV6M-NEXT:    pop {r4, pc}206; CHECKV6M-NEXT:  .LBB2_4: @ %else207; CHECKV6M-NEXT:    cmp r0, #0208; CHECKV6M-NEXT:    bge .LBB2_6209; CHECKV6M-NEXT:  @ %bb.5: @ %else210; CHECKV6M-NEXT:    mov r2, r3211; CHECKV6M-NEXT:  .LBB2_6: @ %else212; CHECKV6M-NEXT:    mov r0, r2213; CHECKV6M-NEXT:    pop {r4, pc}214; CHECKV6M-NEXT:  .LBB2_7: @ %then215; CHECKV6M-NEXT:    mov r1, r3216; CHECKV6M-NEXT:    cmp r0, #0217; CHECKV6M-NEXT:    bge .LBB2_3218; CHECKV6M-NEXT:  .LBB2_8: @ %then219; CHECKV6M-NEXT:    mov r2, r3220; CHECKV6M-NEXT:    adds r0, r2, r1221; CHECKV6M-NEXT:    pop {r4, pc}222;223; CHECKV7M-LABEL: icmp32_sge_0:224; CHECKV7M:       @ %bb.0:225; CHECKV7M-NEXT:    mov r12, r3226; CHECKV7M-NEXT:    ldr r3, [sp]227; CHECKV7M-NEXT:    lsls r3, r3, #31228; CHECKV7M-NEXT:    beq .LBB2_2229; CHECKV7M-NEXT:  @ %bb.1: @ %then230; CHECKV7M-NEXT:    cmp.w r1, #-1231; CHECKV7M-NEXT:    mov r1, r12232; CHECKV7M-NEXT:    it gt233; CHECKV7M-NEXT:    movgt r1, r2234; CHECKV7M-NEXT:    cmp.w r0, #-1235; CHECKV7M-NEXT:    it gt236; CHECKV7M-NEXT:    movgt r12, r2237; CHECKV7M-NEXT:    add.w r0, r12, r1238; CHECKV7M-NEXT:    bx lr239; CHECKV7M-NEXT:  .LBB2_2: @ %else240; CHECKV7M-NEXT:    cmp.w r0, #-1241; CHECKV7M-NEXT:    it gt242; CHECKV7M-NEXT:    movgt r12, r2243; CHECKV7M-NEXT:    mov r0, r12244; CHECKV7M-NEXT:    bx lr245;246; CHECKV7A-LABEL: icmp32_sge_0:247; CHECKV7A:       @ %bb.0:248; CHECKV7A-NEXT:    mov r12, r3249; CHECKV7A-NEXT:    ldr r3, [sp]250; CHECKV7A-NEXT:    lsls r3, r3, #31251; CHECKV7A-NEXT:    beq .LBB2_2252; CHECKV7A-NEXT:  @ %bb.1: @ %then253; CHECKV7A-NEXT:    cmp.w r1, #-1254; CHECKV7A-NEXT:    mov r1, r12255; CHECKV7A-NEXT:    it gt256; CHECKV7A-NEXT:    movgt r1, r2257; CHECKV7A-NEXT:    cmp.w r0, #-1258; CHECKV7A-NEXT:    it gt259; CHECKV7A-NEXT:    movgt r12, r2260; CHECKV7A-NEXT:    add.w r0, r12, r1261; CHECKV7A-NEXT:    bx lr262; CHECKV7A-NEXT:  .LBB2_2: @ %else263; CHECKV7A-NEXT:    cmp.w r0, #-1264; CHECKV7A-NEXT:    it gt265; CHECKV7A-NEXT:    movgt r12, r2266; CHECKV7A-NEXT:    mov r0, r12267; CHECKV7A-NEXT:    bx lr268  br i1 %c, label %then, label %else269then:270  %c1 = icmp sge i32 %x, 0271  %c2 = icmp sge i32 %y, 0272  %s1 = select i1 %c1, i32 %a, i32 %b273  %s2 = select i1 %c2, i32 %a, i32 %b274  %r = add i32 %s1, %s2275  ret i32 %r276else:277  %c3 = icmp sge i32 %x, 0278  %s3 = select i1 %c3, i32 %a, i32 %b279  ret i32 %s3280}281 282define i32 @icmp32_sgt_m1(i32 %x, i32 %y, i32 %a, i32 %b, i1 %c) {283; CHECKV6M-LABEL: icmp32_sgt_m1:284; CHECKV6M:       @ %bb.0:285; CHECKV6M-NEXT:    .save {r4, lr}286; CHECKV6M-NEXT:    push {r4, lr}287; CHECKV6M-NEXT:    ldr r4, [sp, #8]288; CHECKV6M-NEXT:    lsls r4, r4, #31289; CHECKV6M-NEXT:    beq .LBB3_4290; CHECKV6M-NEXT:  @ %bb.1: @ %then291; CHECKV6M-NEXT:    cmp r1, #0292; CHECKV6M-NEXT:    mov r1, r2293; CHECKV6M-NEXT:    blt .LBB3_7294; CHECKV6M-NEXT:  @ %bb.2: @ %then295; CHECKV6M-NEXT:    cmp r0, #0296; CHECKV6M-NEXT:    blt .LBB3_8297; CHECKV6M-NEXT:  .LBB3_3: @ %then298; CHECKV6M-NEXT:    adds r0, r2, r1299; CHECKV6M-NEXT:    pop {r4, pc}300; CHECKV6M-NEXT:  .LBB3_4: @ %else301; CHECKV6M-NEXT:    cmp r1, #0302; CHECKV6M-NEXT:    bge .LBB3_6303; CHECKV6M-NEXT:  @ %bb.5: @ %else304; CHECKV6M-NEXT:    mov r2, r3305; CHECKV6M-NEXT:  .LBB3_6: @ %else306; CHECKV6M-NEXT:    mov r0, r2307; CHECKV6M-NEXT:    pop {r4, pc}308; CHECKV6M-NEXT:  .LBB3_7: @ %then309; CHECKV6M-NEXT:    mov r1, r3310; CHECKV6M-NEXT:    cmp r0, #0311; CHECKV6M-NEXT:    bge .LBB3_3312; CHECKV6M-NEXT:  .LBB3_8: @ %then313; CHECKV6M-NEXT:    mov r2, r3314; CHECKV6M-NEXT:    adds r0, r2, r1315; CHECKV6M-NEXT:    pop {r4, pc}316;317; CHECKV7M-LABEL: icmp32_sgt_m1:318; CHECKV7M:       @ %bb.0:319; CHECKV7M-NEXT:    mov r12, r3320; CHECKV7M-NEXT:    ldr r3, [sp]321; CHECKV7M-NEXT:    lsls r3, r3, #31322; CHECKV7M-NEXT:    beq .LBB3_2323; CHECKV7M-NEXT:  @ %bb.1: @ %then324; CHECKV7M-NEXT:    cmp.w r1, #-1325; CHECKV7M-NEXT:    mov r1, r12326; CHECKV7M-NEXT:    it gt327; CHECKV7M-NEXT:    movgt r1, r2328; CHECKV7M-NEXT:    cmp.w r0, #-1329; CHECKV7M-NEXT:    it gt330; CHECKV7M-NEXT:    movgt r12, r2331; CHECKV7M-NEXT:    add.w r0, r12, r1332; CHECKV7M-NEXT:    bx lr333; CHECKV7M-NEXT:  .LBB3_2: @ %else334; CHECKV7M-NEXT:    cmp.w r1, #-1335; CHECKV7M-NEXT:    it gt336; CHECKV7M-NEXT:    movgt r12, r2337; CHECKV7M-NEXT:    mov r0, r12338; CHECKV7M-NEXT:    bx lr339;340; CHECKV7A-LABEL: icmp32_sgt_m1:341; CHECKV7A:       @ %bb.0:342; CHECKV7A-NEXT:    mov r12, r3343; CHECKV7A-NEXT:    ldr r3, [sp]344; CHECKV7A-NEXT:    lsls r3, r3, #31345; CHECKV7A-NEXT:    beq .LBB3_2346; CHECKV7A-NEXT:  @ %bb.1: @ %then347; CHECKV7A-NEXT:    cmp.w r1, #-1348; CHECKV7A-NEXT:    mov r1, r12349; CHECKV7A-NEXT:    it gt350; CHECKV7A-NEXT:    movgt r1, r2351; CHECKV7A-NEXT:    cmp.w r0, #-1352; CHECKV7A-NEXT:    it gt353; CHECKV7A-NEXT:    movgt r12, r2354; CHECKV7A-NEXT:    add.w r0, r12, r1355; CHECKV7A-NEXT:    bx lr356; CHECKV7A-NEXT:  .LBB3_2: @ %else357; CHECKV7A-NEXT:    cmp.w r1, #-1358; CHECKV7A-NEXT:    it gt359; CHECKV7A-NEXT:    movgt r12, r2360; CHECKV7A-NEXT:    mov r0, r12361; CHECKV7A-NEXT:    bx lr362  br i1 %c, label %then, label %else363then:364  %c1 = icmp sgt i32 %x, -1365  %c2 = icmp sgt i32 %y, -1366  %s1 = select i1 %c1, i32 %a, i32 %b367  %s2 = select i1 %c2, i32 %a, i32 %b368  %r = add i32 %s1, %s2369  ret i32 %r370else:371  %c3 = icmp sgt i32 %y, -1372  %s3 = select i1 %c3, i32 %a, i32 %b373  ret i32 %s3374}375 376define i32 @icmp64_sle_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {377; CHECKV6M-LABEL: icmp64_sle_m1:378; CHECKV6M:       @ %bb.0:379; CHECKV6M-NEXT:    ldr r0, [sp, #8]380; CHECKV6M-NEXT:    lsls r0, r0, #31381; CHECKV6M-NEXT:    ldr r2, [sp, #4]382; CHECKV6M-NEXT:    ldr r0, [sp]383; CHECKV6M-NEXT:    beq .LBB4_4384; CHECKV6M-NEXT:  @ %bb.1: @ %then385; CHECKV6M-NEXT:    cmp r3, #0386; CHECKV6M-NEXT:    mov r3, r0387; CHECKV6M-NEXT:    bpl .LBB4_7388; CHECKV6M-NEXT:  @ %bb.2: @ %then389; CHECKV6M-NEXT:    cmp r1, #0390; CHECKV6M-NEXT:    bpl .LBB4_8391; CHECKV6M-NEXT:  .LBB4_3: @ %then392; CHECKV6M-NEXT:    adds r0, r0, r3393; CHECKV6M-NEXT:    bx lr394; CHECKV6M-NEXT:  .LBB4_4: @ %else395; CHECKV6M-NEXT:    cmp r3, #0396; CHECKV6M-NEXT:    bmi .LBB4_6397; CHECKV6M-NEXT:  @ %bb.5: @ %else398; CHECKV6M-NEXT:    mov r0, r2399; CHECKV6M-NEXT:  .LBB4_6: @ %else400; CHECKV6M-NEXT:    bx lr401; CHECKV6M-NEXT:  .LBB4_7: @ %then402; CHECKV6M-NEXT:    mov r3, r2403; CHECKV6M-NEXT:    cmp r1, #0404; CHECKV6M-NEXT:    bmi .LBB4_3405; CHECKV6M-NEXT:  .LBB4_8: @ %then406; CHECKV6M-NEXT:    mov r0, r2407; CHECKV6M-NEXT:    adds r0, r0, r3408; CHECKV6M-NEXT:    bx lr409;410; CHECKV7M-LABEL: icmp64_sle_m1:411; CHECKV7M:       @ %bb.0:412; CHECKV7M-NEXT:    ldr r0, [sp, #8]413; CHECKV7M-NEXT:    lsls r0, r0, #31414; CHECKV7M-NEXT:    ldrd r2, r0, [sp]415; CHECKV7M-NEXT:    beq .LBB4_2416; CHECKV7M-NEXT:  @ %bb.1: @ %then417; CHECKV7M-NEXT:    cmp r3, #0418; CHECKV7M-NEXT:    mov r3, r0419; CHECKV7M-NEXT:    it mi420; CHECKV7M-NEXT:    movmi r3, r2421; CHECKV7M-NEXT:    cmp r1, #0422; CHECKV7M-NEXT:    it mi423; CHECKV7M-NEXT:    movmi r0, r2424; CHECKV7M-NEXT:    add r0, r3425; CHECKV7M-NEXT:    bx lr426; CHECKV7M-NEXT:  .LBB4_2: @ %else427; CHECKV7M-NEXT:    cmp r3, #0428; CHECKV7M-NEXT:    it mi429; CHECKV7M-NEXT:    movmi r0, r2430; CHECKV7M-NEXT:    bx lr431;432; CHECKV7A-LABEL: icmp64_sle_m1:433; CHECKV7A:       @ %bb.0:434; CHECKV7A-NEXT:    ldr r2, [sp, #8]435; CHECKV7A-NEXT:    ldrd r12, r0, [sp]436; CHECKV7A-NEXT:    lsls r2, r2, #31437; CHECKV7A-NEXT:    beq .LBB4_2438; CHECKV7A-NEXT:  @ %bb.1: @ %then439; CHECKV7A-NEXT:    cmp r3, #0440; CHECKV7A-NEXT:    mov r2, r0441; CHECKV7A-NEXT:    it mi442; CHECKV7A-NEXT:    movmi r2, r12443; CHECKV7A-NEXT:    cmp r1, #0444; CHECKV7A-NEXT:    it mi445; CHECKV7A-NEXT:    movmi r0, r12446; CHECKV7A-NEXT:    add r0, r2447; CHECKV7A-NEXT:    bx lr448; CHECKV7A-NEXT:  .LBB4_2: @ %else449; CHECKV7A-NEXT:    cmp r3, #0450; CHECKV7A-NEXT:    it mi451; CHECKV7A-NEXT:    movmi r0, r12452; CHECKV7A-NEXT:    bx lr453  br i1 %c, label %then, label %else454then:455  %c1 = icmp sle i64 %x, -1456  %c2 = icmp sle i64 %y, -1457  %s1 = select i1 %c1, i32 %a, i32 %b458  %s2 = select i1 %c2, i32 %a, i32 %b459  %r = add i32 %s1, %s2460  ret i32 %r461else:462  %c3 = icmp sle i64 %y, -1463  %s3 = select i1 %c3, i32 %a, i32 %b464  ret i32 %s3465}466 467define i32 @icmp64_ule_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {468; CHECKV6M-LABEL: icmp64_ule_m1:469; CHECKV6M:       @ %bb.0:470; CHECKV6M-NEXT:    .save {r4, r5, r6, r7, lr}471; CHECKV6M-NEXT:    push {r4, r5, r6, r7, lr}472; CHECKV6M-NEXT:    mov r4, r0473; CHECKV6M-NEXT:    ldr r0, [sp, #28]474; CHECKV6M-NEXT:    lsls r0, r0, #31475; CHECKV6M-NEXT:    ldr r6, .LCPI5_0476; CHECKV6M-NEXT:    ldr r5, [sp, #24]477; CHECKV6M-NEXT:    ldr r0, [sp, #20]478; CHECKV6M-NEXT:    beq .LBB5_6479; CHECKV6M-NEXT:  @ %bb.1: @ %then480; CHECKV6M-NEXT:    movs r7, #0481; CHECKV6M-NEXT:    subs r2, r2, r6482; CHECKV6M-NEXT:    sbcs r3, r7483; CHECKV6M-NEXT:    mov r2, r0484; CHECKV6M-NEXT:    blo .LBB5_3485; CHECKV6M-NEXT:  @ %bb.2: @ %then486; CHECKV6M-NEXT:    mov r2, r5487; CHECKV6M-NEXT:  .LBB5_3: @ %then488; CHECKV6M-NEXT:    subs r3, r4, r6489; CHECKV6M-NEXT:    sbcs r1, r7490; CHECKV6M-NEXT:    blo .LBB5_5491; CHECKV6M-NEXT:  @ %bb.4: @ %then492; CHECKV6M-NEXT:    mov r0, r5493; CHECKV6M-NEXT:  .LBB5_5: @ %then494; CHECKV6M-NEXT:    adds r0, r0, r2495; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}496; CHECKV6M-NEXT:  .LBB5_6: @ %else497; CHECKV6M-NEXT:    movs r1, #0498; CHECKV6M-NEXT:    subs r2, r2, r6499; CHECKV6M-NEXT:    sbcs r3, r1500; CHECKV6M-NEXT:    blo .LBB5_8501; CHECKV6M-NEXT:  @ %bb.7: @ %else502; CHECKV6M-NEXT:    mov r0, r5503; CHECKV6M-NEXT:  .LBB5_8: @ %else504; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}505; CHECKV6M-NEXT:    .p2align 2506; CHECKV6M-NEXT:  @ %bb.9:507; CHECKV6M-NEXT:  .LCPI5_0:508; CHECKV6M-NEXT:    .long 131073 @ 0x20001509;510; CHECKV7M-LABEL: icmp64_ule_m1:511; CHECKV7M:       @ %bb.0:512; CHECKV7M-NEXT:    .save {r4, lr}513; CHECKV7M-NEXT:    push {r4, lr}514; CHECKV7M-NEXT:    mov r12, r0515; CHECKV7M-NEXT:    ldr r0, [sp, #16]516; CHECKV7M-NEXT:    movs r4, #1517; CHECKV7M-NEXT:    movt r4, #2518; CHECKV7M-NEXT:    lsls r0, r0, #31519; CHECKV7M-NEXT:    ldrd lr, r0, [sp, #8]520; CHECKV7M-NEXT:    beq .LBB5_2521; CHECKV7M-NEXT:  @ %bb.1: @ %then522; CHECKV7M-NEXT:    subs r2, r2, r4523; CHECKV7M-NEXT:    sbcs r2, r3, #0524; CHECKV7M-NEXT:    mov r2, r0525; CHECKV7M-NEXT:    it lo526; CHECKV7M-NEXT:    movlo r2, lr527; CHECKV7M-NEXT:    subs.w r3, r12, r4528; CHECKV7M-NEXT:    sbcs r1, r1, #0529; CHECKV7M-NEXT:    it lo530; CHECKV7M-NEXT:    movlo r0, lr531; CHECKV7M-NEXT:    add r0, r2532; CHECKV7M-NEXT:    pop {r4, pc}533; CHECKV7M-NEXT:  .LBB5_2: @ %else534; CHECKV7M-NEXT:    subs r1, r2, r4535; CHECKV7M-NEXT:    sbcs r1, r3, #0536; CHECKV7M-NEXT:    it lo537; CHECKV7M-NEXT:    movlo r0, lr538; CHECKV7M-NEXT:    pop {r4, pc}539;540; CHECKV7A-LABEL: icmp64_ule_m1:541; CHECKV7A:       @ %bb.0:542; CHECKV7A-NEXT:    .save {r4, lr}543; CHECKV7A-NEXT:    push {r4, lr}544; CHECKV7A-NEXT:    ldr r4, [sp, #16]545; CHECKV7A-NEXT:    mov r12, r0546; CHECKV7A-NEXT:    ldrd lr, r0, [sp, #8]547; CHECKV7A-NEXT:    lsls r4, r4, #31548; CHECKV7A-NEXT:    movw r4, #1549; CHECKV7A-NEXT:    movt r4, #2550; CHECKV7A-NEXT:    beq .LBB5_2551; CHECKV7A-NEXT:  @ %bb.1: @ %then552; CHECKV7A-NEXT:    subs r2, r2, r4553; CHECKV7A-NEXT:    sbcs r2, r3, #0554; CHECKV7A-NEXT:    mov r2, r0555; CHECKV7A-NEXT:    it lo556; CHECKV7A-NEXT:    movlo r2, lr557; CHECKV7A-NEXT:    subs.w r3, r12, r4558; CHECKV7A-NEXT:    sbcs r1, r1, #0559; CHECKV7A-NEXT:    it lo560; CHECKV7A-NEXT:    movlo r0, lr561; CHECKV7A-NEXT:    add r0, r2562; CHECKV7A-NEXT:    pop {r4, pc}563; CHECKV7A-NEXT:  .LBB5_2: @ %else564; CHECKV7A-NEXT:    subs r1, r2, r4565; CHECKV7A-NEXT:    sbcs r1, r3, #0566; CHECKV7A-NEXT:    it lo567; CHECKV7A-NEXT:    movlo r0, lr568; CHECKV7A-NEXT:    pop {r4, pc}569  br i1 %c, label %then, label %else570then:571  %c1 = icmp ult i64 %x, 131073572  %c2 = icmp ult i64 %y, 131073573  %s1 = select i1 %c1, i32 %a, i32 %b574  %s2 = select i1 %c2, i32 %a, i32 %b575  %r = add i32 %s1, %s2576  ret i32 %r577else:578  %c3 = icmp ult i64 %y, 131073579  %s3 = select i1 %c3, i32 %a, i32 %b580  ret i32 %s3581}582 583define i32 @icmp64_uge_m2(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {584; CHECKV6M-LABEL: icmp64_uge_m2:585; CHECKV6M:       @ %bb.0:586; CHECKV6M-NEXT:    .save {r4, r5, r6, r7, lr}587; CHECKV6M-NEXT:    push {r4, r5, r6, r7, lr}588; CHECKV6M-NEXT:    mov r4, r0589; CHECKV6M-NEXT:    movs r0, #1590; CHECKV6M-NEXT:    lsls r6, r0, #17591; CHECKV6M-NEXT:    ldr r0, [sp, #28]592; CHECKV6M-NEXT:    lsls r0, r0, #31593; CHECKV6M-NEXT:    ldr r5, [sp, #24]594; CHECKV6M-NEXT:    ldr r0, [sp, #20]595; CHECKV6M-NEXT:    beq .LBB6_6596; CHECKV6M-NEXT:  @ %bb.1: @ %then597; CHECKV6M-NEXT:    movs r7, #0598; CHECKV6M-NEXT:    subs r2, r2, r6599; CHECKV6M-NEXT:    sbcs r3, r7600; CHECKV6M-NEXT:    mov r2, r0601; CHECKV6M-NEXT:    bhs .LBB6_3602; CHECKV6M-NEXT:  @ %bb.2: @ %then603; CHECKV6M-NEXT:    mov r2, r5604; CHECKV6M-NEXT:  .LBB6_3: @ %then605; CHECKV6M-NEXT:    subs r3, r4, r6606; CHECKV6M-NEXT:    sbcs r1, r7607; CHECKV6M-NEXT:    bhs .LBB6_5608; CHECKV6M-NEXT:  @ %bb.4: @ %then609; CHECKV6M-NEXT:    mov r0, r5610; CHECKV6M-NEXT:  .LBB6_5: @ %then611; CHECKV6M-NEXT:    adds r0, r0, r2612; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}613; CHECKV6M-NEXT:  .LBB6_6: @ %else614; CHECKV6M-NEXT:    movs r1, #0615; CHECKV6M-NEXT:    subs r2, r2, r6616; CHECKV6M-NEXT:    sbcs r3, r1617; CHECKV6M-NEXT:    bhs .LBB6_8618; CHECKV6M-NEXT:  @ %bb.7: @ %else619; CHECKV6M-NEXT:    mov r0, r5620; CHECKV6M-NEXT:  .LBB6_8: @ %else621; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}622;623; CHECKV7M-LABEL: icmp64_uge_m2:624; CHECKV7M:       @ %bb.0:625; CHECKV7M-NEXT:    .save {r7, lr}626; CHECKV7M-NEXT:    push {r7, lr}627; CHECKV7M-NEXT:    mov r12, r0628; CHECKV7M-NEXT:    ldr r0, [sp, #16]629; CHECKV7M-NEXT:    lsls r0, r0, #31630; CHECKV7M-NEXT:    ldrd lr, r0, [sp, #8]631; CHECKV7M-NEXT:    beq .LBB6_2632; CHECKV7M-NEXT:  @ %bb.1: @ %then633; CHECKV7M-NEXT:    orrs.w r2, r3, r2, lsr #17634; CHECKV7M-NEXT:    mov r2, r0635; CHECKV7M-NEXT:    it ne636; CHECKV7M-NEXT:    movne r2, lr637; CHECKV7M-NEXT:    orrs.w r1, r1, r12, lsr #17638; CHECKV7M-NEXT:    it ne639; CHECKV7M-NEXT:    movne r0, lr640; CHECKV7M-NEXT:    add r0, r2641; CHECKV7M-NEXT:    pop {r7, pc}642; CHECKV7M-NEXT:  .LBB6_2: @ %else643; CHECKV7M-NEXT:    orrs.w r1, r3, r2, lsr #17644; CHECKV7M-NEXT:    it ne645; CHECKV7M-NEXT:    movne r0, lr646; CHECKV7M-NEXT:    pop {r7, pc}647;648; CHECKV7A-LABEL: icmp64_uge_m2:649; CHECKV7A:       @ %bb.0:650; CHECKV7A-NEXT:    .save {r4, lr}651; CHECKV7A-NEXT:    push {r4, lr}652; CHECKV7A-NEXT:    ldr r4, [sp, #16]653; CHECKV7A-NEXT:    mov r12, r0654; CHECKV7A-NEXT:    ldrd lr, r0, [sp, #8]655; CHECKV7A-NEXT:    lsls r4, r4, #31656; CHECKV7A-NEXT:    beq .LBB6_2657; CHECKV7A-NEXT:  @ %bb.1: @ %then658; CHECKV7A-NEXT:    orrs.w r2, r3, r2, lsr #17659; CHECKV7A-NEXT:    mov r2, r0660; CHECKV7A-NEXT:    it ne661; CHECKV7A-NEXT:    movne r2, lr662; CHECKV7A-NEXT:    orrs.w r1, r1, r12, lsr #17663; CHECKV7A-NEXT:    it ne664; CHECKV7A-NEXT:    movne r0, lr665; CHECKV7A-NEXT:    add r0, r2666; CHECKV7A-NEXT:    pop {r4, pc}667; CHECKV7A-NEXT:  .LBB6_2: @ %else668; CHECKV7A-NEXT:    orrs.w r1, r3, r2, lsr #17669; CHECKV7A-NEXT:    it ne670; CHECKV7A-NEXT:    movne r0, lr671; CHECKV7A-NEXT:    pop {r4, pc}672  br i1 %c, label %then, label %else673then:674  %c1 = icmp uge i64 %x, 131072675  %c2 = icmp uge i64 %y, 131072676  %s1 = select i1 %c1, i32 %a, i32 %b677  %s2 = select i1 %c2, i32 %a, i32 %b678  %r = add i32 %s1, %s2679  ret i32 %r680else:681  %c3 = icmp uge i64 %y, 131072682  %s3 = select i1 %c3, i32 %a, i32 %b683  ret i32 %s3684}685 686define i32 @icmp64_ugt_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) {687; CHECKV6M-LABEL: icmp64_ugt_m1:688; CHECKV6M:       @ %bb.0:689; CHECKV6M-NEXT:    .save {r4, r5, r6, r7, lr}690; CHECKV6M-NEXT:    push {r4, r5, r6, r7, lr}691; CHECKV6M-NEXT:    mov r4, r0692; CHECKV6M-NEXT:    ldr r0, [sp, #28]693; CHECKV6M-NEXT:    lsls r0, r0, #31694; CHECKV6M-NEXT:    ldr r6, .LCPI7_0695; CHECKV6M-NEXT:    ldr r5, [sp, #24]696; CHECKV6M-NEXT:    ldr r0, [sp, #20]697; CHECKV6M-NEXT:    beq .LBB7_6698; CHECKV6M-NEXT:  @ %bb.1: @ %then699; CHECKV6M-NEXT:    movs r7, #0700; CHECKV6M-NEXT:    subs r2, r6, r2701; CHECKV6M-NEXT:    mov r2, r7702; CHECKV6M-NEXT:    sbcs r2, r3703; CHECKV6M-NEXT:    mov r2, r0704; CHECKV6M-NEXT:    blo .LBB7_3705; CHECKV6M-NEXT:  @ %bb.2: @ %then706; CHECKV6M-NEXT:    mov r2, r5707; CHECKV6M-NEXT:  .LBB7_3: @ %then708; CHECKV6M-NEXT:    subs r3, r6, r4709; CHECKV6M-NEXT:    sbcs r7, r1710; CHECKV6M-NEXT:    blo .LBB7_5711; CHECKV6M-NEXT:  @ %bb.4: @ %then712; CHECKV6M-NEXT:    mov r0, r5713; CHECKV6M-NEXT:  .LBB7_5: @ %then714; CHECKV6M-NEXT:    adds r0, r0, r2715; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}716; CHECKV6M-NEXT:  .LBB7_6: @ %else717; CHECKV6M-NEXT:    movs r1, #0718; CHECKV6M-NEXT:    subs r2, r6, r2719; CHECKV6M-NEXT:    sbcs r1, r3720; CHECKV6M-NEXT:    blo .LBB7_8721; CHECKV6M-NEXT:  @ %bb.7: @ %else722; CHECKV6M-NEXT:    mov r0, r5723; CHECKV6M-NEXT:  .LBB7_8: @ %else724; CHECKV6M-NEXT:    pop {r4, r5, r6, r7, pc}725; CHECKV6M-NEXT:    .p2align 2726; CHECKV6M-NEXT:  @ %bb.9:727; CHECKV6M-NEXT:  .LCPI7_0:728; CHECKV6M-NEXT:    .long 131073 @ 0x20001729;730; CHECKV7M-LABEL: icmp64_ugt_m1:731; CHECKV7M:       @ %bb.0:732; CHECKV7M-NEXT:    .save {r4, r5, r7, lr}733; CHECKV7M-NEXT:    push {r4, r5, r7, lr}734; CHECKV7M-NEXT:    mov r12, r0735; CHECKV7M-NEXT:    ldr r0, [sp, #24]736; CHECKV7M-NEXT:    movs r4, #1737; CHECKV7M-NEXT:    movt r4, #2738; CHECKV7M-NEXT:    lsls r0, r0, #31739; CHECKV7M-NEXT:    ldrd lr, r0, [sp, #16]740; CHECKV7M-NEXT:    beq .LBB7_2741; CHECKV7M-NEXT:  @ %bb.1: @ %then742; CHECKV7M-NEXT:    subs r2, r4, r2743; CHECKV7M-NEXT:    mov.w r5, #0744; CHECKV7M-NEXT:    sbcs.w r2, r5, r3745; CHECKV7M-NEXT:    mov r2, r0746; CHECKV7M-NEXT:    it lo747; CHECKV7M-NEXT:    movlo r2, lr748; CHECKV7M-NEXT:    subs.w r3, r4, r12749; CHECKV7M-NEXT:    sbcs.w r1, r5, r1750; CHECKV7M-NEXT:    it lo751; CHECKV7M-NEXT:    movlo r0, lr752; CHECKV7M-NEXT:    add r0, r2753; CHECKV7M-NEXT:    pop {r4, r5, r7, pc}754; CHECKV7M-NEXT:  .LBB7_2: @ %else755; CHECKV7M-NEXT:    movs r1, #0756; CHECKV7M-NEXT:    subs r2, r4, r2757; CHECKV7M-NEXT:    sbcs r1, r3758; CHECKV7M-NEXT:    it lo759; CHECKV7M-NEXT:    movlo r0, lr760; CHECKV7M-NEXT:    pop {r4, r5, r7, pc}761;762; CHECKV7A-LABEL: icmp64_ugt_m1:763; CHECKV7A:       @ %bb.0:764; CHECKV7A-NEXT:    .save {r4, r5, r7, lr}765; CHECKV7A-NEXT:    push {r4, r5, r7, lr}766; CHECKV7A-NEXT:    ldr r4, [sp, #24]767; CHECKV7A-NEXT:    mov r12, r0768; CHECKV7A-NEXT:    ldrd lr, r0, [sp, #16]769; CHECKV7A-NEXT:    lsls r4, r4, #31770; CHECKV7A-NEXT:    movw r4, #1771; CHECKV7A-NEXT:    movt r4, #2772; CHECKV7A-NEXT:    beq .LBB7_2773; CHECKV7A-NEXT:  @ %bb.1: @ %then774; CHECKV7A-NEXT:    subs r2, r4, r2775; CHECKV7A-NEXT:    mov.w r5, #0776; CHECKV7A-NEXT:    sbcs.w r2, r5, r3777; CHECKV7A-NEXT:    mov r2, r0778; CHECKV7A-NEXT:    it lo779; CHECKV7A-NEXT:    movlo r2, lr780; CHECKV7A-NEXT:    subs.w r3, r4, r12781; CHECKV7A-NEXT:    sbcs.w r1, r5, r1782; CHECKV7A-NEXT:    it lo783; CHECKV7A-NEXT:    movlo r0, lr784; CHECKV7A-NEXT:    add r0, r2785; CHECKV7A-NEXT:    pop {r4, r5, r7, pc}786; CHECKV7A-NEXT:  .LBB7_2: @ %else787; CHECKV7A-NEXT:    movs r1, #0788; CHECKV7A-NEXT:    subs r2, r4, r2789; CHECKV7A-NEXT:    sbcs r1, r3790; CHECKV7A-NEXT:    it lo791; CHECKV7A-NEXT:    movlo r0, lr792; CHECKV7A-NEXT:    pop {r4, r5, r7, pc}793  br i1 %c, label %then, label %else794then:795  %c1 = icmp ugt i64 %x, 131073796  %c2 = icmp ugt i64 %y, 131073797  %s1 = select i1 %c1, i32 %a, i32 %b798  %s2 = select i1 %c2, i32 %a, i32 %b799  %r = add i32 %s1, %s2800  ret i32 %r801else:802  %c3 = icmp ugt i64 %y, 131073803  %s3 = select i1 %c3, i32 %a, i32 %b804  ret i32 %s3805}806