brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 5d0f57e Raw
377 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 @ucmp_8_8(i8 zeroext %x, i8 zeroext %y) nounwind {7; THUMB1-LABEL: ucmp_8_8:8; THUMB1:       @ %bb.0:9; THUMB1-NEXT:    subs r2, r0, r110; THUMB1-NEXT:    sbcs r2, r211; THUMB1-NEXT:    cmp r1, r012; THUMB1-NEXT:    sbcs r1, r113; THUMB1-NEXT:    subs r0, r2, r114; THUMB1-NEXT:    bx lr15;16; THUMB2-LABEL: ucmp_8_8:17; THUMB2:       @ %bb.0:18; THUMB2-NEXT:    subs r0, r0, r119; THUMB2-NEXT:    it hi20; THUMB2-NEXT:    movhi r0, #121; THUMB2-NEXT:    it lo22; THUMB2-NEXT:    movlo.w r0, #-123; THUMB2-NEXT:    bx lr24;25; V81M-LABEL: ucmp_8_8:26; V81M:       @ %bb.0:27; V81M-NEXT:    cmp r0, r128; V81M-NEXT:    cset r0, hi29; V81M-NEXT:    it lo30; V81M-NEXT:    movlo.w r0, #-131; V81M-NEXT:    bx lr32  %1 = call i8 @llvm.ucmp(i8 %x, i8 %y)33  ret i8 %134}35 36define i8 @ucmp_8_16(i16 zeroext %x, i16 zeroext %y) nounwind {37; THUMB1-LABEL: ucmp_8_16:38; THUMB1:       @ %bb.0:39; THUMB1-NEXT:    subs r2, r0, r140; THUMB1-NEXT:    sbcs r2, r241; THUMB1-NEXT:    cmp r1, r042; THUMB1-NEXT:    sbcs r1, r143; THUMB1-NEXT:    subs r0, r2, r144; THUMB1-NEXT:    bx lr45;46; THUMB2-LABEL: ucmp_8_16:47; THUMB2:       @ %bb.0:48; THUMB2-NEXT:    subs r0, r0, r149; THUMB2-NEXT:    it hi50; THUMB2-NEXT:    movhi r0, #151; THUMB2-NEXT:    it lo52; THUMB2-NEXT:    movlo.w r0, #-153; THUMB2-NEXT:    bx lr54;55; V81M-LABEL: ucmp_8_16:56; V81M:       @ %bb.0:57; V81M-NEXT:    cmp r0, r158; V81M-NEXT:    cset r0, hi59; V81M-NEXT:    it lo60; V81M-NEXT:    movlo.w r0, #-161; V81M-NEXT:    bx lr62  %1 = call i8 @llvm.ucmp(i16 %x, i16 %y)63  ret i8 %164}65 66define i8 @ucmp_8_32(i32 %x, i32 %y) nounwind {67; THUMB1-LABEL: ucmp_8_32:68; THUMB1:       @ %bb.0:69; THUMB1-NEXT:    subs r2, r0, r170; THUMB1-NEXT:    sbcs r2, r271; THUMB1-NEXT:    cmp r1, r072; THUMB1-NEXT:    sbcs r1, r173; THUMB1-NEXT:    subs r0, r2, r174; THUMB1-NEXT:    bx lr75;76; THUMB2-LABEL: ucmp_8_32:77; THUMB2:       @ %bb.0:78; THUMB2-NEXT:    subs r0, r0, r179; THUMB2-NEXT:    it hi80; THUMB2-NEXT:    movhi r0, #181; THUMB2-NEXT:    it lo82; THUMB2-NEXT:    movlo.w r0, #-183; THUMB2-NEXT:    bx lr84;85; V81M-LABEL: ucmp_8_32:86; V81M:       @ %bb.0:87; V81M-NEXT:    cmp r0, r188; V81M-NEXT:    cset r0, hi89; V81M-NEXT:    it lo90; V81M-NEXT:    movlo.w r0, #-191; V81M-NEXT:    bx lr92  %1 = call i8 @llvm.ucmp(i32 %x, i32 %y)93  ret i8 %194}95 96define i8 @ucmp_8_64(i64 %x, i64 %y) nounwind {97; THUMB1-LABEL: ucmp_8_64:98; THUMB1:       @ %bb.0:99; THUMB1-NEXT:    .save {r4, r5, r6, lr}100; THUMB1-NEXT:    push {r4, r5, r6, lr}101; THUMB1-NEXT:    movs r4, #1102; THUMB1-NEXT:    movs r5, #0103; THUMB1-NEXT:    subs r6, r0, r2104; THUMB1-NEXT:    mov r6, r1105; THUMB1-NEXT:    sbcs r6, r3106; THUMB1-NEXT:    mov r6, r4107; THUMB1-NEXT:    blo .LBB3_2108; THUMB1-NEXT:  @ %bb.1:109; THUMB1-NEXT:    mov r6, r5110; THUMB1-NEXT:  .LBB3_2:111; THUMB1-NEXT:    subs r0, r2, r0112; THUMB1-NEXT:    sbcs r3, r1113; THUMB1-NEXT:    blo .LBB3_4114; THUMB1-NEXT:  @ %bb.3:115; THUMB1-NEXT:    mov r4, r5116; THUMB1-NEXT:  .LBB3_4:117; THUMB1-NEXT:    subs r0, r4, r6118; THUMB1-NEXT:    pop {r4, r5, r6, pc}119;120; THUMB2-LABEL: ucmp_8_64:121; THUMB2:       @ %bb.0:122; THUMB2-NEXT:    subs.w r12, r0, r2123; THUMB2-NEXT:    mov.w r9, #0124; THUMB2-NEXT:    sbcs.w r12, r1, r3125; THUMB2-NEXT:    mov.w r12, #0126; THUMB2-NEXT:    it lo127; THUMB2-NEXT:    movlo.w r12, #1128; THUMB2-NEXT:    subs r0, r2, r0129; THUMB2-NEXT:    sbcs.w r0, r3, r1130; THUMB2-NEXT:    it lo131; THUMB2-NEXT:    movlo.w r9, #1132; THUMB2-NEXT:    sub.w r0, r9, r12133; THUMB2-NEXT:    bx lr134;135; V81M-LABEL: ucmp_8_64:136; V81M:       @ %bb.0:137; V81M-NEXT:    subs.w r12, r0, r2138; V81M-NEXT:    sbcs.w r12, r1, r3139; V81M-NEXT:    cset r12, lo140; V81M-NEXT:    subs r0, r2, r0141; V81M-NEXT:    sbcs.w r0, r3, r1142; V81M-NEXT:    cset r0, lo143; V81M-NEXT:    sub.w r0, r0, r12144; V81M-NEXT:    bx lr145  %1 = call i8 @llvm.ucmp(i64 %x, i64 %y)146  ret i8 %1147}148 149define i8 @ucmp_8_128(i128 %x, i128 %y) nounwind {150; THUMB1-LABEL: ucmp_8_128:151; THUMB1:       @ %bb.0:152; THUMB1-NEXT:    .save {r4, r5, r6, r7, lr}153; THUMB1-NEXT:    push {r4, r5, r6, r7, lr}154; THUMB1-NEXT:    .pad #20155; THUMB1-NEXT:    sub sp, #20156; THUMB1-NEXT:    str r3, [sp, #16] @ 4-byte Spill157; THUMB1-NEXT:    movs r3, #1158; THUMB1-NEXT:    str r3, [sp] @ 4-byte Spill159; THUMB1-NEXT:    movs r3, #0160; THUMB1-NEXT:    str r3, [sp, #12] @ 4-byte Spill161; THUMB1-NEXT:    ldr r6, [sp, #52]162; THUMB1-NEXT:    add r7, sp, #40163; THUMB1-NEXT:    ldm r7, {r3, r5, r7}164; THUMB1-NEXT:    subs r4, r0, r3165; THUMB1-NEXT:    str r1, [sp, #4] @ 4-byte Spill166; THUMB1-NEXT:    mov r4, r1167; THUMB1-NEXT:    ldr r1, [sp] @ 4-byte Reload168; THUMB1-NEXT:    sbcs r4, r5169; THUMB1-NEXT:    str r2, [sp, #8] @ 4-byte Spill170; THUMB1-NEXT:    mov r4, r2171; THUMB1-NEXT:    sbcs r4, r7172; THUMB1-NEXT:    ldr r4, [sp, #16] @ 4-byte Reload173; THUMB1-NEXT:    sbcs r4, r6174; THUMB1-NEXT:    mov r2, r1175; THUMB1-NEXT:    blo .LBB4_2176; THUMB1-NEXT:  @ %bb.1:177; THUMB1-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload178; THUMB1-NEXT:  .LBB4_2:179; THUMB1-NEXT:    subs r0, r3, r0180; THUMB1-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload181; THUMB1-NEXT:    sbcs r5, r0182; THUMB1-NEXT:    ldr r0, [sp, #8] @ 4-byte Reload183; THUMB1-NEXT:    sbcs r7, r0184; THUMB1-NEXT:    ldr r0, [sp, #16] @ 4-byte Reload185; THUMB1-NEXT:    sbcs r6, r0186; THUMB1-NEXT:    blo .LBB4_4187; THUMB1-NEXT:  @ %bb.3:188; THUMB1-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload189; THUMB1-NEXT:  .LBB4_4:190; THUMB1-NEXT:    subs r0, r1, r2191; THUMB1-NEXT:    add sp, #20192; THUMB1-NEXT:    pop {r4, r5, r6, r7, pc}193;194; THUMB2-LABEL: ucmp_8_128:195; THUMB2:       @ %bb.0:196; THUMB2-NEXT:    push {r4, r5, r6, lr}197; THUMB2-NEXT:    add.w lr, sp, #16198; THUMB2-NEXT:    ldr r4, [sp, #28]199; THUMB2-NEXT:    movs r5, #0200; THUMB2-NEXT:    ldm.w lr, {r9, r12, lr}201; THUMB2-NEXT:    subs.w r6, r0, r9202; THUMB2-NEXT:    sbcs.w r6, r1, r12203; THUMB2-NEXT:    sbcs.w r6, r2, lr204; THUMB2-NEXT:    sbcs.w r6, r3, r4205; THUMB2-NEXT:    mov.w r6, #0206; THUMB2-NEXT:    it lo207; THUMB2-NEXT:    movlo r6, #1208; THUMB2-NEXT:    subs.w r0, r9, r0209; THUMB2-NEXT:    sbcs.w r0, r12, r1210; THUMB2-NEXT:    sbcs.w r0, lr, r2211; THUMB2-NEXT:    sbcs.w r0, r4, r3212; THUMB2-NEXT:    it lo213; THUMB2-NEXT:    movlo r5, #1214; THUMB2-NEXT:    subs r0, r5, r6215; THUMB2-NEXT:    pop {r4, r5, r6, pc}216;217; V81M-LABEL: ucmp_8_128:218; V81M:       @ %bb.0:219; V81M-NEXT:    .save {r4, r5, r6, lr}220; V81M-NEXT:    push {r4, r5, r6, lr}221; V81M-NEXT:    ldrd r5, r4, [sp, #16]222; V81M-NEXT:    ldrd lr, r12, [sp, #24]223; V81M-NEXT:    subs r6, r0, r5224; V81M-NEXT:    sbcs.w r6, r1, r4225; V81M-NEXT:    sbcs.w r6, r2, lr226; V81M-NEXT:    sbcs.w r6, r3, r12227; V81M-NEXT:    cset r6, lo228; V81M-NEXT:    subs r0, r5, r0229; V81M-NEXT:    sbcs.w r0, r4, r1230; V81M-NEXT:    sbcs.w r0, lr, r2231; V81M-NEXT:    sbcs.w r0, r12, r3232; V81M-NEXT:    cset r0, lo233; V81M-NEXT:    subs r0, r0, r6234; V81M-NEXT:    pop {r4, r5, r6, pc}235  %1 = call i8 @llvm.ucmp(i128 %x, i128 %y)236  ret i8 %1237}238 239define i32 @ucmp_32_32(i32 %x, i32 %y) nounwind {240; THUMB1-LABEL: ucmp_32_32:241; THUMB1:       @ %bb.0:242; THUMB1-NEXT:    subs r2, r0, r1243; THUMB1-NEXT:    sbcs r2, r2244; THUMB1-NEXT:    cmp r1, r0245; THUMB1-NEXT:    sbcs r1, r1246; THUMB1-NEXT:    subs r0, r2, r1247; THUMB1-NEXT:    bx lr248;249; THUMB2-LABEL: ucmp_32_32:250; THUMB2:       @ %bb.0:251; THUMB2-NEXT:    subs r0, r0, r1252; THUMB2-NEXT:    it hi253; THUMB2-NEXT:    movhi r0, #1254; THUMB2-NEXT:    it lo255; THUMB2-NEXT:    movlo.w r0, #-1256; THUMB2-NEXT:    bx lr257;258; V81M-LABEL: ucmp_32_32:259; V81M:       @ %bb.0:260; V81M-NEXT:    cmp r0, r1261; V81M-NEXT:    cset r0, hi262; V81M-NEXT:    it lo263; V81M-NEXT:    movlo.w r0, #-1264; V81M-NEXT:    bx lr265  %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)266  ret i32 %1267}268 269define i32 @ucmp_32_64(i64 %x, i64 %y) nounwind {270; THUMB1-LABEL: ucmp_32_64:271; THUMB1:       @ %bb.0:272; THUMB1-NEXT:    .save {r4, r5, r6, lr}273; THUMB1-NEXT:    push {r4, r5, r6, lr}274; THUMB1-NEXT:    movs r4, #1275; THUMB1-NEXT:    movs r5, #0276; THUMB1-NEXT:    subs r6, r0, r2277; THUMB1-NEXT:    mov r6, r1278; THUMB1-NEXT:    sbcs r6, r3279; THUMB1-NEXT:    mov r6, r4280; THUMB1-NEXT:    blo .LBB6_2281; THUMB1-NEXT:  @ %bb.1:282; THUMB1-NEXT:    mov r6, r5283; THUMB1-NEXT:  .LBB6_2:284; THUMB1-NEXT:    subs r0, r2, r0285; THUMB1-NEXT:    sbcs r3, r1286; THUMB1-NEXT:    blo .LBB6_4287; THUMB1-NEXT:  @ %bb.3:288; THUMB1-NEXT:    mov r4, r5289; THUMB1-NEXT:  .LBB6_4:290; THUMB1-NEXT:    subs r0, r4, r6291; THUMB1-NEXT:    pop {r4, r5, r6, pc}292;293; THUMB2-LABEL: ucmp_32_64:294; THUMB2:       @ %bb.0:295; THUMB2-NEXT:    subs.w r12, r0, r2296; THUMB2-NEXT:    mov.w r9, #0297; THUMB2-NEXT:    sbcs.w r12, r1, r3298; THUMB2-NEXT:    mov.w r12, #0299; THUMB2-NEXT:    it lo300; THUMB2-NEXT:    movlo.w r12, #1301; THUMB2-NEXT:    subs r0, r2, r0302; THUMB2-NEXT:    sbcs.w r0, r3, r1303; THUMB2-NEXT:    it lo304; THUMB2-NEXT:    movlo.w r9, #1305; THUMB2-NEXT:    sub.w r0, r9, r12306; THUMB2-NEXT:    bx lr307;308; V81M-LABEL: ucmp_32_64:309; V81M:       @ %bb.0:310; V81M-NEXT:    subs.w r12, r0, r2311; V81M-NEXT:    sbcs.w r12, r1, r3312; V81M-NEXT:    cset r12, lo313; V81M-NEXT:    subs r0, r2, r0314; V81M-NEXT:    sbcs.w r0, r3, r1315; V81M-NEXT:    cset r0, lo316; V81M-NEXT:    sub.w r0, r0, r12317; V81M-NEXT:    bx lr318  %1 = call i32 @llvm.ucmp(i64 %x, i64 %y)319  ret i32 %1320}321 322define i64 @ucmp_64_64(i64 %x, i64 %y) nounwind {323; THUMB1-LABEL: ucmp_64_64:324; THUMB1:       @ %bb.0:325; THUMB1-NEXT:    .save {r4, r5, r6, lr}326; THUMB1-NEXT:    push {r4, r5, r6, lr}327; THUMB1-NEXT:    movs r4, #1328; THUMB1-NEXT:    movs r5, #0329; THUMB1-NEXT:    subs r6, r0, r2330; THUMB1-NEXT:    mov r6, r1331; THUMB1-NEXT:    sbcs r6, r3332; THUMB1-NEXT:    mov r6, r4333; THUMB1-NEXT:    blo .LBB7_2334; THUMB1-NEXT:  @ %bb.1:335; THUMB1-NEXT:    mov r6, r5336; THUMB1-NEXT:  .LBB7_2:337; THUMB1-NEXT:    subs r0, r2, r0338; THUMB1-NEXT:    sbcs r3, r1339; THUMB1-NEXT:    blo .LBB7_4340; THUMB1-NEXT:  @ %bb.3:341; THUMB1-NEXT:    mov r4, r5342; THUMB1-NEXT:  .LBB7_4:343; THUMB1-NEXT:    subs r0, r4, r6344; THUMB1-NEXT:    asrs r1, r0, #31345; THUMB1-NEXT:    pop {r4, r5, r6, pc}346;347; THUMB2-LABEL: ucmp_64_64:348; THUMB2:       @ %bb.0:349; THUMB2-NEXT:    subs.w r12, r0, r2350; THUMB2-NEXT:    mov.w r9, #0351; THUMB2-NEXT:    sbcs.w r12, r1, r3352; THUMB2-NEXT:    mov.w r12, #0353; THUMB2-NEXT:    it lo354; THUMB2-NEXT:    movlo.w r12, #1355; THUMB2-NEXT:    subs r0, r2, r0356; THUMB2-NEXT:    sbcs.w r0, r3, r1357; THUMB2-NEXT:    it lo358; THUMB2-NEXT:    movlo.w r9, #1359; THUMB2-NEXT:    sub.w r0, r9, r12360; THUMB2-NEXT:    asrs r1, r0, #31361; THUMB2-NEXT:    bx lr362;363; V81M-LABEL: ucmp_64_64:364; V81M:       @ %bb.0:365; V81M-NEXT:    subs.w r12, r0, r2366; V81M-NEXT:    sbcs.w r12, r1, r3367; V81M-NEXT:    cset r12, lo368; V81M-NEXT:    subs r0, r2, r0369; V81M-NEXT:    sbcs.w r0, r3, r1370; V81M-NEXT:    cset r0, lo371; V81M-NEXT:    sub.w r0, r0, r12372; V81M-NEXT:    asrs r1, r0, #31373; V81M-NEXT:    bx lr374  %1 = call i64 @llvm.ucmp(i64 %x, i64 %y)375  ret i64 %1376}377