brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.0 KiB · c002449 Raw
421 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=thumbv6m-eabi %s -o - | FileCheck %s -check-prefix=THUMB13; RUN: llc -mtriple=thumbv7-apple-darwin %s -o - | FileCheck %s -check-prefix=THUMB24; RUN: llc -mtriple thumbv8.1m.main-none-eabi -o - %s | FileCheck %s --check-prefix=V81M5 6define i8 @scmp_8_8(i8 signext %x, i8 signext %y) nounwind {7; THUMB1-LABEL: scmp_8_8:8; THUMB1:       @ %bb.0:9; THUMB1-NEXT:    movs r2, #110; THUMB1-NEXT:    movs r3, #011; THUMB1-NEXT:    cmp r0, r112; THUMB1-NEXT:    mov r0, r213; THUMB1-NEXT:    bge .LBB0_314; THUMB1-NEXT:  @ %bb.1:15; THUMB1-NEXT:    ble .LBB0_416; THUMB1-NEXT:  .LBB0_2:17; THUMB1-NEXT:    subs r0, r2, r018; THUMB1-NEXT:    bx lr19; THUMB1-NEXT:  .LBB0_3:20; THUMB1-NEXT:    mov r0, r321; THUMB1-NEXT:    bgt .LBB0_222; THUMB1-NEXT:  .LBB0_4:23; THUMB1-NEXT:    mov r2, r324; THUMB1-NEXT:    subs r0, r2, r025; THUMB1-NEXT:    bx lr26;27; THUMB2-LABEL: scmp_8_8:28; THUMB2:       @ %bb.0:29; THUMB2-NEXT:    subs r0, r0, r130; THUMB2-NEXT:    it gt31; THUMB2-NEXT:    movgt r0, #132; THUMB2-NEXT:    it lt33; THUMB2-NEXT:    movlt.w r0, #-134; THUMB2-NEXT:    bx lr35;36; V81M-LABEL: scmp_8_8:37; V81M:       @ %bb.0:38; V81M-NEXT:    cmp r0, r139; V81M-NEXT:    cset r0, gt40; V81M-NEXT:    it lt41; V81M-NEXT:    movlt.w r0, #-142; V81M-NEXT:    bx lr43  %1 = call i8 @llvm.scmp(i8 %x, i8 %y)44  ret i8 %145}46 47define i8 @scmp_8_16(i16 signext %x, i16 signext %y) nounwind {48; THUMB1-LABEL: scmp_8_16:49; THUMB1:       @ %bb.0:50; THUMB1-NEXT:    movs r2, #151; THUMB1-NEXT:    movs r3, #052; THUMB1-NEXT:    cmp r0, r153; THUMB1-NEXT:    mov r0, r254; THUMB1-NEXT:    bge .LBB1_355; THUMB1-NEXT:  @ %bb.1:56; THUMB1-NEXT:    ble .LBB1_457; THUMB1-NEXT:  .LBB1_2:58; THUMB1-NEXT:    subs r0, r2, r059; THUMB1-NEXT:    bx lr60; THUMB1-NEXT:  .LBB1_3:61; THUMB1-NEXT:    mov r0, r362; THUMB1-NEXT:    bgt .LBB1_263; THUMB1-NEXT:  .LBB1_4:64; THUMB1-NEXT:    mov r2, r365; THUMB1-NEXT:    subs r0, r2, r066; THUMB1-NEXT:    bx lr67;68; THUMB2-LABEL: scmp_8_16:69; THUMB2:       @ %bb.0:70; THUMB2-NEXT:    subs r0, r0, r171; THUMB2-NEXT:    it gt72; THUMB2-NEXT:    movgt r0, #173; THUMB2-NEXT:    it lt74; THUMB2-NEXT:    movlt.w r0, #-175; THUMB2-NEXT:    bx lr76;77; V81M-LABEL: scmp_8_16:78; V81M:       @ %bb.0:79; V81M-NEXT:    cmp r0, r180; V81M-NEXT:    cset r0, gt81; V81M-NEXT:    it lt82; V81M-NEXT:    movlt.w r0, #-183; V81M-NEXT:    bx lr84  %1 = call i8 @llvm.scmp(i16 %x, i16 %y)85  ret i8 %186}87 88define i8 @scmp_8_32(i32 %x, i32 %y) nounwind {89; THUMB1-LABEL: scmp_8_32:90; THUMB1:       @ %bb.0:91; THUMB1-NEXT:    movs r2, #192; THUMB1-NEXT:    movs r3, #093; THUMB1-NEXT:    cmp r0, r194; THUMB1-NEXT:    mov r0, r295; THUMB1-NEXT:    bge .LBB2_396; THUMB1-NEXT:  @ %bb.1:97; THUMB1-NEXT:    ble .LBB2_498; THUMB1-NEXT:  .LBB2_2:99; THUMB1-NEXT:    subs r0, r2, r0100; THUMB1-NEXT:    bx lr101; THUMB1-NEXT:  .LBB2_3:102; THUMB1-NEXT:    mov r0, r3103; THUMB1-NEXT:    bgt .LBB2_2104; THUMB1-NEXT:  .LBB2_4:105; THUMB1-NEXT:    mov r2, r3106; THUMB1-NEXT:    subs r0, r2, r0107; THUMB1-NEXT:    bx lr108;109; THUMB2-LABEL: scmp_8_32:110; THUMB2:       @ %bb.0:111; THUMB2-NEXT:    subs r0, r0, r1112; THUMB2-NEXT:    it gt113; THUMB2-NEXT:    movgt r0, #1114; THUMB2-NEXT:    it lt115; THUMB2-NEXT:    movlt.w r0, #-1116; THUMB2-NEXT:    bx lr117;118; V81M-LABEL: scmp_8_32:119; V81M:       @ %bb.0:120; V81M-NEXT:    cmp r0, r1121; V81M-NEXT:    cset r0, gt122; V81M-NEXT:    it lt123; V81M-NEXT:    movlt.w r0, #-1124; V81M-NEXT:    bx lr125  %1 = call i8 @llvm.scmp(i32 %x, i32 %y)126  ret i8 %1127}128 129define i8 @scmp_8_64(i64 %x, i64 %y) nounwind {130; THUMB1-LABEL: scmp_8_64:131; THUMB1:       @ %bb.0:132; THUMB1-NEXT:    .save {r4, r5, r6, lr}133; THUMB1-NEXT:    push {r4, r5, r6, lr}134; THUMB1-NEXT:    movs r4, #1135; THUMB1-NEXT:    movs r5, #0136; THUMB1-NEXT:    subs r6, r0, r2137; THUMB1-NEXT:    mov r6, r1138; THUMB1-NEXT:    sbcs r6, r3139; THUMB1-NEXT:    mov r6, r4140; THUMB1-NEXT:    blt .LBB3_2141; THUMB1-NEXT:  @ %bb.1:142; THUMB1-NEXT:    mov r6, r5143; THUMB1-NEXT:  .LBB3_2:144; THUMB1-NEXT:    subs r0, r2, r0145; THUMB1-NEXT:    sbcs r3, r1146; THUMB1-NEXT:    blt .LBB3_4147; THUMB1-NEXT:  @ %bb.3:148; THUMB1-NEXT:    mov r4, r5149; THUMB1-NEXT:  .LBB3_4:150; THUMB1-NEXT:    subs r0, r4, r6151; THUMB1-NEXT:    pop {r4, r5, r6, pc}152;153; THUMB2-LABEL: scmp_8_64:154; THUMB2:       @ %bb.0:155; THUMB2-NEXT:    subs.w r12, r0, r2156; THUMB2-NEXT:    mov.w r9, #0157; THUMB2-NEXT:    sbcs.w r12, r1, r3158; THUMB2-NEXT:    mov.w r12, #0159; THUMB2-NEXT:    it lt160; THUMB2-NEXT:    movlt.w r12, #1161; THUMB2-NEXT:    subs r0, r2, r0162; THUMB2-NEXT:    sbcs.w r0, r3, r1163; THUMB2-NEXT:    it lt164; THUMB2-NEXT:    movlt.w r9, #1165; THUMB2-NEXT:    sub.w r0, r9, r12166; THUMB2-NEXT:    bx lr167;168; V81M-LABEL: scmp_8_64:169; V81M:       @ %bb.0:170; V81M-NEXT:    subs.w r12, r0, r2171; V81M-NEXT:    sbcs.w r12, r1, r3172; V81M-NEXT:    cset r12, lt173; V81M-NEXT:    subs r0, r2, r0174; V81M-NEXT:    sbcs.w r0, r3, r1175; V81M-NEXT:    cset r0, lt176; V81M-NEXT:    sub.w r0, r0, r12177; V81M-NEXT:    bx lr178  %1 = call i8 @llvm.scmp(i64 %x, i64 %y)179  ret i8 %1180}181 182define i8 @scmp_8_128(i128 %x, i128 %y) nounwind {183; THUMB1-LABEL: scmp_8_128:184; THUMB1:       @ %bb.0:185; THUMB1-NEXT:    .save {r4, r5, r6, r7, lr}186; THUMB1-NEXT:    push {r4, r5, r6, r7, lr}187; THUMB1-NEXT:    .pad #20188; THUMB1-NEXT:    sub sp, #20189; THUMB1-NEXT:    str r3, [sp, #16] @ 4-byte Spill190; THUMB1-NEXT:    movs r3, #1191; THUMB1-NEXT:    str r3, [sp] @ 4-byte Spill192; THUMB1-NEXT:    movs r3, #0193; THUMB1-NEXT:    str r3, [sp, #12] @ 4-byte Spill194; THUMB1-NEXT:    ldr r6, [sp, #52]195; THUMB1-NEXT:    add r7, sp, #40196; THUMB1-NEXT:    ldm r7, {r3, r5, r7}197; THUMB1-NEXT:    subs r4, r0, r3198; THUMB1-NEXT:    str r1, [sp, #4] @ 4-byte Spill199; THUMB1-NEXT:    mov r4, r1200; THUMB1-NEXT:    ldr r1, [sp] @ 4-byte Reload201; THUMB1-NEXT:    sbcs r4, r5202; THUMB1-NEXT:    str r2, [sp, #8] @ 4-byte Spill203; THUMB1-NEXT:    mov r4, r2204; THUMB1-NEXT:    sbcs r4, r7205; THUMB1-NEXT:    ldr r4, [sp, #16] @ 4-byte Reload206; THUMB1-NEXT:    sbcs r4, r6207; THUMB1-NEXT:    mov r2, r1208; THUMB1-NEXT:    blt .LBB4_2209; THUMB1-NEXT:  @ %bb.1:210; THUMB1-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload211; THUMB1-NEXT:  .LBB4_2:212; THUMB1-NEXT:    subs r0, r3, r0213; THUMB1-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload214; THUMB1-NEXT:    sbcs r5, r0215; THUMB1-NEXT:    ldr r0, [sp, #8] @ 4-byte Reload216; THUMB1-NEXT:    sbcs r7, r0217; THUMB1-NEXT:    ldr r0, [sp, #16] @ 4-byte Reload218; THUMB1-NEXT:    sbcs r6, r0219; THUMB1-NEXT:    blt .LBB4_4220; THUMB1-NEXT:  @ %bb.3:221; THUMB1-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload222; THUMB1-NEXT:  .LBB4_4:223; THUMB1-NEXT:    subs r0, r1, r2224; THUMB1-NEXT:    add sp, #20225; THUMB1-NEXT:    pop {r4, r5, r6, r7, pc}226;227; THUMB2-LABEL: scmp_8_128:228; THUMB2:       @ %bb.0:229; THUMB2-NEXT:    push {r4, r5, r6, lr}230; THUMB2-NEXT:    add.w lr, sp, #16231; THUMB2-NEXT:    ldr r4, [sp, #28]232; THUMB2-NEXT:    movs r5, #0233; THUMB2-NEXT:    ldm.w lr, {r9, r12, lr}234; THUMB2-NEXT:    subs.w r6, r0, r9235; THUMB2-NEXT:    sbcs.w r6, r1, r12236; THUMB2-NEXT:    sbcs.w r6, r2, lr237; THUMB2-NEXT:    sbcs.w r6, r3, r4238; THUMB2-NEXT:    mov.w r6, #0239; THUMB2-NEXT:    it lt240; THUMB2-NEXT:    movlt r6, #1241; THUMB2-NEXT:    subs.w r0, r9, r0242; THUMB2-NEXT:    sbcs.w r0, r12, r1243; THUMB2-NEXT:    sbcs.w r0, lr, r2244; THUMB2-NEXT:    sbcs.w r0, r4, r3245; THUMB2-NEXT:    it lt246; THUMB2-NEXT:    movlt r5, #1247; THUMB2-NEXT:    subs r0, r5, r6248; THUMB2-NEXT:    pop {r4, r5, r6, pc}249;250; V81M-LABEL: scmp_8_128:251; V81M:       @ %bb.0:252; V81M-NEXT:    .save {r4, r5, r6, lr}253; V81M-NEXT:    push {r4, r5, r6, lr}254; V81M-NEXT:    ldrd r5, r4, [sp, #16]255; V81M-NEXT:    ldrd lr, r12, [sp, #24]256; V81M-NEXT:    subs r6, r0, r5257; V81M-NEXT:    sbcs.w r6, r1, r4258; V81M-NEXT:    sbcs.w r6, r2, lr259; V81M-NEXT:    sbcs.w r6, r3, r12260; V81M-NEXT:    cset r6, lt261; V81M-NEXT:    subs r0, r5, r0262; V81M-NEXT:    sbcs.w r0, r4, r1263; V81M-NEXT:    sbcs.w r0, lr, r2264; V81M-NEXT:    sbcs.w r0, r12, r3265; V81M-NEXT:    cset r0, lt266; V81M-NEXT:    subs r0, r0, r6267; V81M-NEXT:    pop {r4, r5, r6, pc}268  %1 = call i8 @llvm.scmp(i128 %x, i128 %y)269  ret i8 %1270}271 272define i32 @scmp_32_32(i32 %x, i32 %y) nounwind {273; THUMB1-LABEL: scmp_32_32:274; THUMB1:       @ %bb.0:275; THUMB1-NEXT:    movs r2, #1276; THUMB1-NEXT:    movs r3, #0277; THUMB1-NEXT:    cmp r0, r1278; THUMB1-NEXT:    mov r0, r2279; THUMB1-NEXT:    bge .LBB5_3280; THUMB1-NEXT:  @ %bb.1:281; THUMB1-NEXT:    ble .LBB5_4282; THUMB1-NEXT:  .LBB5_2:283; THUMB1-NEXT:    subs r0, r2, r0284; THUMB1-NEXT:    bx lr285; THUMB1-NEXT:  .LBB5_3:286; THUMB1-NEXT:    mov r0, r3287; THUMB1-NEXT:    bgt .LBB5_2288; THUMB1-NEXT:  .LBB5_4:289; THUMB1-NEXT:    mov r2, r3290; THUMB1-NEXT:    subs r0, r2, r0291; THUMB1-NEXT:    bx lr292;293; THUMB2-LABEL: scmp_32_32:294; THUMB2:       @ %bb.0:295; THUMB2-NEXT:    subs r0, r0, r1296; THUMB2-NEXT:    it gt297; THUMB2-NEXT:    movgt r0, #1298; THUMB2-NEXT:    it lt299; THUMB2-NEXT:    movlt.w r0, #-1300; THUMB2-NEXT:    bx lr301;302; V81M-LABEL: scmp_32_32:303; V81M:       @ %bb.0:304; V81M-NEXT:    cmp r0, r1305; V81M-NEXT:    cset r0, gt306; V81M-NEXT:    it lt307; V81M-NEXT:    movlt.w r0, #-1308; V81M-NEXT:    bx lr309  %1 = call i32 @llvm.scmp(i32 %x, i32 %y)310  ret i32 %1311}312 313define i32 @scmp_32_64(i64 %x, i64 %y) nounwind {314; THUMB1-LABEL: scmp_32_64:315; THUMB1:       @ %bb.0:316; THUMB1-NEXT:    .save {r4, r5, r6, lr}317; THUMB1-NEXT:    push {r4, r5, r6, lr}318; THUMB1-NEXT:    movs r4, #1319; THUMB1-NEXT:    movs r5, #0320; THUMB1-NEXT:    subs r6, r0, r2321; THUMB1-NEXT:    mov r6, r1322; THUMB1-NEXT:    sbcs r6, r3323; THUMB1-NEXT:    mov r6, r4324; THUMB1-NEXT:    blt .LBB6_2325; THUMB1-NEXT:  @ %bb.1:326; THUMB1-NEXT:    mov r6, r5327; THUMB1-NEXT:  .LBB6_2:328; THUMB1-NEXT:    subs r0, r2, r0329; THUMB1-NEXT:    sbcs r3, r1330; THUMB1-NEXT:    blt .LBB6_4331; THUMB1-NEXT:  @ %bb.3:332; THUMB1-NEXT:    mov r4, r5333; THUMB1-NEXT:  .LBB6_4:334; THUMB1-NEXT:    subs r0, r4, r6335; THUMB1-NEXT:    pop {r4, r5, r6, pc}336;337; THUMB2-LABEL: scmp_32_64:338; THUMB2:       @ %bb.0:339; THUMB2-NEXT:    subs.w r12, r0, r2340; THUMB2-NEXT:    mov.w r9, #0341; THUMB2-NEXT:    sbcs.w r12, r1, r3342; THUMB2-NEXT:    mov.w r12, #0343; THUMB2-NEXT:    it lt344; THUMB2-NEXT:    movlt.w r12, #1345; THUMB2-NEXT:    subs r0, r2, r0346; THUMB2-NEXT:    sbcs.w r0, r3, r1347; THUMB2-NEXT:    it lt348; THUMB2-NEXT:    movlt.w r9, #1349; THUMB2-NEXT:    sub.w r0, r9, r12350; THUMB2-NEXT:    bx lr351;352; V81M-LABEL: scmp_32_64:353; V81M:       @ %bb.0:354; V81M-NEXT:    subs.w r12, r0, r2355; V81M-NEXT:    sbcs.w r12, r1, r3356; V81M-NEXT:    cset r12, lt357; V81M-NEXT:    subs r0, r2, r0358; V81M-NEXT:    sbcs.w r0, r3, r1359; V81M-NEXT:    cset r0, lt360; V81M-NEXT:    sub.w r0, r0, r12361; V81M-NEXT:    bx lr362  %1 = call i32 @llvm.scmp(i64 %x, i64 %y)363  ret i32 %1364}365 366define i64 @scmp_64_64(i64 %x, i64 %y) nounwind {367; THUMB1-LABEL: scmp_64_64:368; THUMB1:       @ %bb.0:369; THUMB1-NEXT:    .save {r4, r5, r6, lr}370; THUMB1-NEXT:    push {r4, r5, r6, lr}371; THUMB1-NEXT:    movs r4, #1372; THUMB1-NEXT:    movs r5, #0373; THUMB1-NEXT:    subs r6, r0, r2374; THUMB1-NEXT:    mov r6, r1375; THUMB1-NEXT:    sbcs r6, r3376; THUMB1-NEXT:    mov r6, r4377; THUMB1-NEXT:    blt .LBB7_2378; THUMB1-NEXT:  @ %bb.1:379; THUMB1-NEXT:    mov r6, r5380; THUMB1-NEXT:  .LBB7_2:381; THUMB1-NEXT:    subs r0, r2, r0382; THUMB1-NEXT:    sbcs r3, r1383; THUMB1-NEXT:    blt .LBB7_4384; THUMB1-NEXT:  @ %bb.3:385; THUMB1-NEXT:    mov r4, r5386; THUMB1-NEXT:  .LBB7_4:387; THUMB1-NEXT:    subs r0, r4, r6388; THUMB1-NEXT:    asrs r1, r0, #31389; THUMB1-NEXT:    pop {r4, r5, r6, pc}390;391; THUMB2-LABEL: scmp_64_64:392; THUMB2:       @ %bb.0:393; THUMB2-NEXT:    subs.w r12, r0, r2394; THUMB2-NEXT:    mov.w r9, #0395; THUMB2-NEXT:    sbcs.w r12, r1, r3396; THUMB2-NEXT:    mov.w r12, #0397; THUMB2-NEXT:    it lt398; THUMB2-NEXT:    movlt.w r12, #1399; THUMB2-NEXT:    subs r0, r2, r0400; THUMB2-NEXT:    sbcs.w r0, r3, r1401; THUMB2-NEXT:    it lt402; THUMB2-NEXT:    movlt.w r9, #1403; THUMB2-NEXT:    sub.w r0, r9, r12404; THUMB2-NEXT:    asrs r1, r0, #31405; THUMB2-NEXT:    bx lr406;407; V81M-LABEL: scmp_64_64:408; V81M:       @ %bb.0:409; V81M-NEXT:    subs.w r12, r0, r2410; V81M-NEXT:    sbcs.w r12, r1, r3411; V81M-NEXT:    cset r12, lt412; V81M-NEXT:    subs r0, r2, r0413; V81M-NEXT:    sbcs.w r0, r3, r1414; V81M-NEXT:    cset r0, lt415; V81M-NEXT:    sub.w r0, r0, r12416; V81M-NEXT:    asrs r1, r0, #31417; V81M-NEXT:    bx lr418  %1 = call i64 @llvm.scmp(i64 %x, i64 %y)419  ret i64 %1420}421