1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=armv7-unknown-linux < %s | FileCheck --check-prefix=CHECK-ARM %s 3; RUN: llc -mtriple=thumbv6-unknown-linux < %s | FileCheck --check-prefix=CHECK-THUMB1 %s 4; RUN: llc -mtriple=thumbv7-unknown-linux < %s | FileCheck --check-prefix=CHECK-THUMB2 %s 5 6define i32 @test_slt1(i64 %a, i64 %b) { 7; CHECK-ARM-LABEL: test_slt1: 8; CHECK-ARM: @ %bb.0: @ %entry 9; CHECK-ARM-NEXT: subs r0, r0, r2 10; CHECK-ARM-NEXT: mov r12, #2 11; CHECK-ARM-NEXT: sbcs r0, r1, r3 12; CHECK-ARM-NEXT: movwlt r12, #1 13; CHECK-ARM-NEXT: mov r0, r12 14; CHECK-ARM-NEXT: bx lr 15; 16; CHECK-THUMB1-LABEL: test_slt1: 17; CHECK-THUMB1: @ %bb.0: @ %entry 18; CHECK-THUMB1-NEXT: subs r0, r0, r2 19; CHECK-THUMB1-NEXT: sbcs r1, r3 20; CHECK-THUMB1-NEXT: bge .LBB0_2 21; CHECK-THUMB1-NEXT: @ %bb.1: @ %bb1 22; CHECK-THUMB1-NEXT: movs r0, #1 23; CHECK-THUMB1-NEXT: bx lr 24; CHECK-THUMB1-NEXT: .LBB0_2: @ %bb2 25; CHECK-THUMB1-NEXT: movs r0, #2 26; CHECK-THUMB1-NEXT: bx lr 27; 28; CHECK-THUMB2-LABEL: test_slt1: 29; CHECK-THUMB2: @ %bb.0: @ %entry 30; CHECK-THUMB2-NEXT: subs r0, r0, r2 31; CHECK-THUMB2-NEXT: mov.w r12, #2 32; CHECK-THUMB2-NEXT: sbcs.w r0, r1, r3 33; CHECK-THUMB2-NEXT: it lt 34; CHECK-THUMB2-NEXT: movlt.w r12, #1 35; CHECK-THUMB2-NEXT: mov r0, r12 36; CHECK-THUMB2-NEXT: bx lr 37entry: 38 %cmp = icmp slt i64 %a, %b 39 br i1 %cmp, label %bb1, label %bb2 40bb1: 41 ret i32 1 42bb2: 43 ret i32 2 44} 45 46define void @test_slt2(i64 %a, i64 %b) { 47; CHECK-ARM-LABEL: test_slt2: 48; CHECK-ARM: @ %bb.0: @ %entry 49; CHECK-ARM-NEXT: push {r11, lr} 50; CHECK-ARM-NEXT: subs r0, r0, r2 51; CHECK-ARM-NEXT: sbcs r0, r1, r3 52; CHECK-ARM-NEXT: bge .LBB1_2 53; CHECK-ARM-NEXT: @ %bb.1: @ %bb1 54; CHECK-ARM-NEXT: bl f 55; CHECK-ARM-NEXT: pop {r11, pc} 56; CHECK-ARM-NEXT: .LBB1_2: @ %bb2 57; CHECK-ARM-NEXT: bl g 58; CHECK-ARM-NEXT: pop {r11, pc} 59; 60; CHECK-THUMB1-LABEL: test_slt2: 61; CHECK-THUMB1: @ %bb.0: @ %entry 62; CHECK-THUMB1-NEXT: push {r7, lr} 63; CHECK-THUMB1-NEXT: subs r0, r0, r2 64; CHECK-THUMB1-NEXT: sbcs r1, r3 65; CHECK-THUMB1-NEXT: bge .LBB1_2 66; CHECK-THUMB1-NEXT: @ %bb.1: @ %bb1 67; CHECK-THUMB1-NEXT: bl f 68; CHECK-THUMB1-NEXT: pop {r7, pc} 69; CHECK-THUMB1-NEXT: .LBB1_2: @ %bb2 70; CHECK-THUMB1-NEXT: bl g 71; CHECK-THUMB1-NEXT: pop {r7, pc} 72; 73; CHECK-THUMB2-LABEL: test_slt2: 74; CHECK-THUMB2: @ %bb.0: @ %entry 75; CHECK-THUMB2-NEXT: push {r7, lr} 76; CHECK-THUMB2-NEXT: subs r0, r0, r2 77; CHECK-THUMB2-NEXT: sbcs.w r0, r1, r3 78; CHECK-THUMB2-NEXT: bge .LBB1_2 79; CHECK-THUMB2-NEXT: @ %bb.1: @ %bb1 80; CHECK-THUMB2-NEXT: bl f 81; CHECK-THUMB2-NEXT: pop {r7, pc} 82; CHECK-THUMB2-NEXT: .LBB1_2: @ %bb2 83; CHECK-THUMB2-NEXT: bl g 84; CHECK-THUMB2-NEXT: pop {r7, pc} 85entry: 86 %cmp = icmp slt i64 %a, %b 87 br i1 %cmp, label %bb1, label %bb2 88bb1: 89 call void @f() 90 ret void 91bb2: 92 call void @g() 93 ret void 94} 95 96declare void @f() 97declare void @g() 98