brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · 9acf8d2 Raw
291 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv7-unknown-linux < %s -verify-machineinstrs | FileCheck --check-prefix=CHECK-ARM %s3; RUN: llc -mtriple=thumb-eabi < %s  -verify-machineinstrs | FileCheck --check-prefix=CHECK-THUMB1-NOMOV %s4; RUN: llc -mtriple=thumbv6-unknown-linux < %s -verify-machineinstrs | FileCheck --check-prefix=CHECK-THUMB1 %s5; RUN: llc -mtriple=thumbv7-unknown-linux < %s -verify-machineinstrs | FileCheck --check-prefix=CHECK-THUMB2 %s6 7define i32 @test_slt1(i64 %a, i64 %b) {8; CHECK-ARM-LABEL: test_slt1:9; CHECK-ARM:       @ %bb.0: @ %entry10; CHECK-ARM-NEXT:    subs r0, r0, r211; CHECK-ARM-NEXT:    mov r12, #212; CHECK-ARM-NEXT:    sbcs r0, r1, r313; CHECK-ARM-NEXT:    movwlt r12, #114; CHECK-ARM-NEXT:    mov r0, r1215; CHECK-ARM-NEXT:    bx lr16;17; CHECK-THUMB1-NOMOV-LABEL: test_slt1:18; CHECK-THUMB1-NOMOV:       @ %bb.0: @ %entry19; CHECK-THUMB1-NOMOV-NEXT:    subs r0, r0, r220; CHECK-THUMB1-NOMOV-NEXT:    sbcs r1, r321; CHECK-THUMB1-NOMOV-NEXT:    bge .LBB0_222; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.1: @ %bb123; CHECK-THUMB1-NOMOV-NEXT:    movs r0, #124; CHECK-THUMB1-NOMOV-NEXT:    bx lr25; CHECK-THUMB1-NOMOV-NEXT:  .LBB0_2: @ %bb226; CHECK-THUMB1-NOMOV-NEXT:    movs r0, #227; CHECK-THUMB1-NOMOV-NEXT:    bx lr28;29; CHECK-THUMB1-LABEL: test_slt1:30; CHECK-THUMB1:       @ %bb.0: @ %entry31; CHECK-THUMB1-NEXT:    subs r0, r0, r232; CHECK-THUMB1-NEXT:    sbcs r1, r333; CHECK-THUMB1-NEXT:    bge .LBB0_234; CHECK-THUMB1-NEXT:  @ %bb.1: @ %bb135; CHECK-THUMB1-NEXT:    movs r0, #136; CHECK-THUMB1-NEXT:    bx lr37; CHECK-THUMB1-NEXT:  .LBB0_2: @ %bb238; CHECK-THUMB1-NEXT:    movs r0, #239; CHECK-THUMB1-NEXT:    bx lr40;41; CHECK-THUMB2-LABEL: test_slt1:42; CHECK-THUMB2:       @ %bb.0: @ %entry43; CHECK-THUMB2-NEXT:    subs r0, r0, r244; CHECK-THUMB2-NEXT:    mov.w r12, #245; CHECK-THUMB2-NEXT:    sbcs.w r0, r1, r346; CHECK-THUMB2-NEXT:    it lt47; CHECK-THUMB2-NEXT:    movlt.w r12, #148; CHECK-THUMB2-NEXT:    mov r0, r1249; CHECK-THUMB2-NEXT:    bx lr50entry:51  %cmp = icmp slt i64 %a, %b52  br i1 %cmp, label %bb1, label %bb253bb1:54  ret i32 155bb2:56  ret i32 257}58 59define void @test_slt2(i64 %a, i64 %b) {60; CHECK-ARM-LABEL: test_slt2:61; CHECK-ARM:       @ %bb.0: @ %entry62; CHECK-ARM-NEXT:    push {r11, lr}63; CHECK-ARM-NEXT:    subs r0, r0, r264; CHECK-ARM-NEXT:    sbcs r0, r1, r365; CHECK-ARM-NEXT:    bge .LBB1_266; CHECK-ARM-NEXT:  @ %bb.1: @ %bb167; CHECK-ARM-NEXT:    bl f68; CHECK-ARM-NEXT:    pop {r11, pc}69; CHECK-ARM-NEXT:  .LBB1_2: @ %bb270; CHECK-ARM-NEXT:    bl g71; CHECK-ARM-NEXT:    pop {r11, pc}72;73; CHECK-THUMB1-NOMOV-LABEL: test_slt2:74; CHECK-THUMB1-NOMOV:       @ %bb.0: @ %entry75; CHECK-THUMB1-NOMOV-NEXT:    .save {r7, lr}76; CHECK-THUMB1-NOMOV-NEXT:    push {r7, lr}77; CHECK-THUMB1-NOMOV-NEXT:    subs r0, r0, r278; CHECK-THUMB1-NOMOV-NEXT:    sbcs r1, r379; CHECK-THUMB1-NOMOV-NEXT:    bge .LBB1_280; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.1: @ %bb181; CHECK-THUMB1-NOMOV-NEXT:    bl f82; CHECK-THUMB1-NOMOV-NEXT:    b .LBB1_383; CHECK-THUMB1-NOMOV-NEXT:  .LBB1_2: @ %bb284; CHECK-THUMB1-NOMOV-NEXT:    bl g85; CHECK-THUMB1-NOMOV-NEXT:  .LBB1_3: @ %bb186; CHECK-THUMB1-NOMOV-NEXT:    pop {r7}87; CHECK-THUMB1-NOMOV-NEXT:    pop {r0}88; CHECK-THUMB1-NOMOV-NEXT:    bx r089;90; CHECK-THUMB1-LABEL: test_slt2:91; CHECK-THUMB1:       @ %bb.0: @ %entry92; CHECK-THUMB1-NEXT:    push {r7, lr}93; CHECK-THUMB1-NEXT:    subs r0, r0, r294; CHECK-THUMB1-NEXT:    sbcs r1, r395; CHECK-THUMB1-NEXT:    bge .LBB1_296; CHECK-THUMB1-NEXT:  @ %bb.1: @ %bb197; CHECK-THUMB1-NEXT:    bl f98; CHECK-THUMB1-NEXT:    pop {r7, pc}99; CHECK-THUMB1-NEXT:  .LBB1_2: @ %bb2100; CHECK-THUMB1-NEXT:    bl g101; CHECK-THUMB1-NEXT:    pop {r7, pc}102;103; CHECK-THUMB2-LABEL: test_slt2:104; CHECK-THUMB2:       @ %bb.0: @ %entry105; CHECK-THUMB2-NEXT:    push {r7, lr}106; CHECK-THUMB2-NEXT:    subs r0, r0, r2107; CHECK-THUMB2-NEXT:    sbcs.w r0, r1, r3108; CHECK-THUMB2-NEXT:    bge .LBB1_2109; CHECK-THUMB2-NEXT:  @ %bb.1: @ %bb1110; CHECK-THUMB2-NEXT:    bl f111; CHECK-THUMB2-NEXT:    pop {r7, pc}112; CHECK-THUMB2-NEXT:  .LBB1_2: @ %bb2113; CHECK-THUMB2-NEXT:    bl g114; CHECK-THUMB2-NEXT:    pop {r7, pc}115entry:116  %cmp = icmp slt i64 %a, %b117  br i1 %cmp, label %bb1, label %bb2118bb1:119  call void @f()120  ret void121bb2:122  call void @g()123  ret void124}125 126declare void @f()127declare void @g()128 129define i64 @test_slt_select(i64 %c, i64 %d, i64 %a, i64 %b) {130; CHECK-ARM-LABEL: test_slt_select:131; CHECK-ARM:       @ %bb.0: @ %entry132; CHECK-ARM-NEXT:    push {r4, r5, r6, lr}133; CHECK-ARM-NEXT:    ldr r12, [sp, #24]134; CHECK-ARM-NEXT:    ldr lr, [sp, #16]135; CHECK-ARM-NEXT:    ldr r6, [sp, #28]136; CHECK-ARM-NEXT:    ldr r5, [sp, #20]137; CHECK-ARM-NEXT:    subs r4, lr, r12138; CHECK-ARM-NEXT:    sbcs r6, r5, r6139; CHECK-ARM-NEXT:    movhs r0, r2140; CHECK-ARM-NEXT:    movhs r1, r3141; CHECK-ARM-NEXT:    pop {r4, r5, r6, pc}142;143; CHECK-THUMB1-NOMOV-LABEL: test_slt_select:144; CHECK-THUMB1-NOMOV:       @ %bb.0: @ %entry145; CHECK-THUMB1-NOMOV-NEXT:    .save {r4, r5, r6, r7, lr}146; CHECK-THUMB1-NOMOV-NEXT:    push {r4, r5, r6, r7, lr}147; CHECK-THUMB1-NOMOV-NEXT:    .pad #4148; CHECK-THUMB1-NOMOV-NEXT:    sub sp, #4149; CHECK-THUMB1-NOMOV-NEXT:    ldr r4, [sp, #36]150; CHECK-THUMB1-NOMOV-NEXT:    ldr r5, [sp, #28]151; CHECK-THUMB1-NOMOV-NEXT:    ldr r6, [sp, #32]152; CHECK-THUMB1-NOMOV-NEXT:    ldr r7, [sp, #24]153; CHECK-THUMB1-NOMOV-NEXT:    subs r6, r7, r6154; CHECK-THUMB1-NOMOV-NEXT:    sbcs r5, r4155; CHECK-THUMB1-NOMOV-NEXT:    blo .LBB2_2156; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.1: @ %entry157; CHECK-THUMB1-NOMOV-NEXT:    mov r12, r2158; CHECK-THUMB1-NOMOV-NEXT:    mov r0, r12159; CHECK-THUMB1-NOMOV-NEXT:  .LBB2_2: @ %entry160; CHECK-THUMB1-NOMOV-NEXT:    blo .LBB2_4161; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.3: @ %entry162; CHECK-THUMB1-NOMOV-NEXT:    movs r1, r3163; CHECK-THUMB1-NOMOV-NEXT:  .LBB2_4: @ %entry164; CHECK-THUMB1-NOMOV-NEXT:    add sp, #4165; CHECK-THUMB1-NOMOV-NEXT:    pop {r4, r5, r6, r7}166; CHECK-THUMB1-NOMOV-NEXT:    pop {r2}167; CHECK-THUMB1-NOMOV-NEXT:    bx r2168;169; CHECK-THUMB1-LABEL: test_slt_select:170; CHECK-THUMB1:       @ %bb.0: @ %entry171; CHECK-THUMB1-NEXT:    push {r4, r5, r6, r7, lr}172; CHECK-THUMB1-NEXT:    sub sp, #4173; CHECK-THUMB1-NEXT:    ldr r4, [sp, #36]174; CHECK-THUMB1-NEXT:    ldr r5, [sp, #28]175; CHECK-THUMB1-NEXT:    ldr r6, [sp, #32]176; CHECK-THUMB1-NEXT:    ldr r7, [sp, #24]177; CHECK-THUMB1-NEXT:    subs r6, r7, r6178; CHECK-THUMB1-NEXT:    sbcs r5, r4179; CHECK-THUMB1-NEXT:    bhs .LBB2_3180; CHECK-THUMB1-NEXT:  @ %bb.1: @ %entry181; CHECK-THUMB1-NEXT:    bhs .LBB2_4182; CHECK-THUMB1-NEXT:  .LBB2_2: @ %entry183; CHECK-THUMB1-NEXT:    add sp, #4184; CHECK-THUMB1-NEXT:    pop {r4, r5, r6, r7, pc}185; CHECK-THUMB1-NEXT:  .LBB2_3: @ %entry186; CHECK-THUMB1-NEXT:    mov r0, r2187; CHECK-THUMB1-NEXT:    blo .LBB2_2188; CHECK-THUMB1-NEXT:  .LBB2_4: @ %entry189; CHECK-THUMB1-NEXT:    mov r1, r3190; CHECK-THUMB1-NEXT:    add sp, #4191; CHECK-THUMB1-NEXT:    pop {r4, r5, r6, r7, pc}192;193; CHECK-THUMB2-LABEL: test_slt_select:194; CHECK-THUMB2:       @ %bb.0: @ %entry195; CHECK-THUMB2-NEXT:    push {r4, r5, r6, lr}196; CHECK-THUMB2-NEXT:    ldrd r12, r6, [sp, #24]197; CHECK-THUMB2-NEXT:    ldrd lr, r5, [sp, #16]198; CHECK-THUMB2-NEXT:    subs.w r4, lr, r12199; CHECK-THUMB2-NEXT:    sbcs.w r6, r5, r6200; CHECK-THUMB2-NEXT:    itt hs201; CHECK-THUMB2-NEXT:    movhs r0, r2202; CHECK-THUMB2-NEXT:    movhs r1, r3203; CHECK-THUMB2-NEXT:    pop {r4, r5, r6, pc}204entry:205    %cmp = icmp ult i64 %a, %b206    %r1 = select i1 %cmp, i64 %c, i64 %d207    ret i64 %r1208}209 210define {i32, i32} @test_slt_not(i32 %c, i32 %d, i64 %a, i64 %b) {211; CHECK-ARM-LABEL: test_slt_not:212; CHECK-ARM:       @ %bb.0: @ %entry213; CHECK-ARM-NEXT:    ldr r12, [sp]214; CHECK-ARM-NEXT:    mov r1, #0215; CHECK-ARM-NEXT:    ldr r0, [sp, #4]216; CHECK-ARM-NEXT:    subs r2, r2, r12217; CHECK-ARM-NEXT:    sbcs r0, r3, r0218; CHECK-ARM-NEXT:    mov r0, #0219; CHECK-ARM-NEXT:    movwge r1, #1220; CHECK-ARM-NEXT:    movwlt r0, #1221; CHECK-ARM-NEXT:    bx lr222;223; CHECK-THUMB1-NOMOV-LABEL: test_slt_not:224; CHECK-THUMB1-NOMOV:       @ %bb.0: @ %entry225; CHECK-THUMB1-NOMOV-NEXT:    .save {r4, r5, r7, lr}226; CHECK-THUMB1-NOMOV-NEXT:    push {r4, r5, r7, lr}227; CHECK-THUMB1-NOMOV-NEXT:    movs r1, #1228; CHECK-THUMB1-NOMOV-NEXT:    movs r4, #0229; CHECK-THUMB1-NOMOV-NEXT:    ldr r0, [sp, #20]230; CHECK-THUMB1-NOMOV-NEXT:    ldr r5, [sp, #16]231; CHECK-THUMB1-NOMOV-NEXT:    subs r2, r2, r5232; CHECK-THUMB1-NOMOV-NEXT:    sbcs r3, r0233; CHECK-THUMB1-NOMOV-NEXT:    mov r12, r1234; CHECK-THUMB1-NOMOV-NEXT:    mov r0, r12235; CHECK-THUMB1-NOMOV-NEXT:    blt .LBB3_2236; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.1: @ %entry237; CHECK-THUMB1-NOMOV-NEXT:    mov r12, r4238; CHECK-THUMB1-NOMOV-NEXT:    mov r0, r12239; CHECK-THUMB1-NOMOV-NEXT:  .LBB3_2: @ %entry240; CHECK-THUMB1-NOMOV-NEXT:    bge .LBB3_4241; CHECK-THUMB1-NOMOV-NEXT:  @ %bb.3: @ %entry242; CHECK-THUMB1-NOMOV-NEXT:    movs r1, r4243; CHECK-THUMB1-NOMOV-NEXT:  .LBB3_4: @ %entry244; CHECK-THUMB1-NOMOV-NEXT:    pop {r4, r5, r7}245; CHECK-THUMB1-NOMOV-NEXT:    pop {r2}246; CHECK-THUMB1-NOMOV-NEXT:    bx r2247;248; CHECK-THUMB1-LABEL: test_slt_not:249; CHECK-THUMB1:       @ %bb.0: @ %entry250; CHECK-THUMB1-NEXT:    push {r4, r5, r7, lr}251; CHECK-THUMB1-NEXT:    movs r1, #1252; CHECK-THUMB1-NEXT:    movs r4, #0253; CHECK-THUMB1-NEXT:    ldr r0, [sp, #20]254; CHECK-THUMB1-NEXT:    ldr r5, [sp, #16]255; CHECK-THUMB1-NEXT:    subs r2, r2, r5256; CHECK-THUMB1-NEXT:    sbcs r3, r0257; CHECK-THUMB1-NEXT:    mov r0, r1258; CHECK-THUMB1-NEXT:    bge .LBB3_3259; CHECK-THUMB1-NEXT:  @ %bb.1: @ %entry260; CHECK-THUMB1-NEXT:    blt .LBB3_4261; CHECK-THUMB1-NEXT:  .LBB3_2: @ %entry262; CHECK-THUMB1-NEXT:    pop {r4, r5, r7, pc}263; CHECK-THUMB1-NEXT:  .LBB3_3: @ %entry264; CHECK-THUMB1-NEXT:    mov r0, r4265; CHECK-THUMB1-NEXT:    bge .LBB3_2266; CHECK-THUMB1-NEXT:  .LBB3_4: @ %entry267; CHECK-THUMB1-NEXT:    mov r1, r4268; CHECK-THUMB1-NEXT:    pop {r4, r5, r7, pc}269;270; CHECK-THUMB2-LABEL: test_slt_not:271; CHECK-THUMB2:       @ %bb.0: @ %entry272; CHECK-THUMB2-NEXT:    ldr.w r12, [sp]273; CHECK-THUMB2-NEXT:    movs r1, #0274; CHECK-THUMB2-NEXT:    ldr r0, [sp, #4]275; CHECK-THUMB2-NEXT:    subs.w r2, r2, r12276; CHECK-THUMB2-NEXT:    sbcs.w r0, r3, r0277; CHECK-THUMB2-NEXT:    mov.w r0, #0278; CHECK-THUMB2-NEXT:    ite lt279; CHECK-THUMB2-NEXT:    movlt r0, #1280; CHECK-THUMB2-NEXT:    movge r1, #1281; CHECK-THUMB2-NEXT:    bx lr282entry:283    %cmp = icmp slt i64 %a, %b284    %not = xor i1 %cmp, true285    %r1 = zext i1 %cmp to i32286    %r2 = zext i1 %not to i32287    %z = insertvalue { i32, i32 } undef, i32 %r1, 0288    %z2 = insertvalue { i32, i32 } %z, i32 %r2, 1289    ret { i32, i32 } %z2290}291