1 ; RUN: llc < %s -mtriple thumbv6m-eabi | FileCheck %s 2 3 define i32 @slt_poweroftwo(i32 %a) { 4 ; CHECK-LABEL: slt_poweroftwo: 5 ; CHECK: .long 4095 6 %b = icmp slt i32 %a, 4096 7 br i1 %b, label %true, label %false 8 9 true: 10 ret i32 1 11 12 false: 13 ret i32 2 14 } 15 16 define i32 @sle_poweroftwo(i32 %a) { 17 ; CHECK-LABEL: sle_poweroftwo: 18 ; CHECK: movs r1, #1 19 ; CHECK: lsls r1, r1, #12 20 %b = icmp sle i32 %a, 4096 21 br i1 %b, label %true, label %false 22 23 true: 24 ret i32 1 25 26 false: 27 ret i32 2 28 } 29 30 define i32 @sge_poweroftwo(i32 %a) { 31 ; CHECK-LABEL: sge_poweroftwo: 32 ; CHECK: movs r1, #1 33 ; CHECK: lsls r1, r1, #12 34 %b = icmp sge i32 %a, 4096 35 br i1 %b, label %true, label %false 36 37 true: 38 ret i32 1 39 40 false: 41 ret i32 2 42 } 43 44 define i32 @sgt_poweroftwo(i32 %a) { 45 ; CHECK-LABEL: sgt_poweroftwo: 46 ; CHECK: .long 4097 47 %b = icmp sgt i32 %a, 4096 48 br i1 %b, label %true, label %false 49 50 true: 51 ret i32 1 52 53 false: 54 ret i32 2 55 } 56 57 define i32 @slt_nearpoweroftwo(i32 %a) { 58 ; CHECK-LABEL: slt_nearpoweroftwo: 59 ; CHECK: movs r1, #1 60 ; CHECK: lsls r1, r1, #12 61 %b = icmp slt i32 %a, 4097 62 br i1 %b, label %true, label %false 63 64 true: 65 ret i32 1 66 67 false: 68 ret i32 2 69 } 70 71 define i32 @sle_nearpoweroftwo(i32 %a) { 72 ; CHECK-LABEL: sle_nearpoweroftwo: 73 ; CHECK: .long 4095 74 %b = icmp sle i32 %a, 4095 75 br i1 %b, label %true, label %false 76 77 true: 78 ret i32 1 79 80 false: 81 ret i32 2 82 } 83 84 85 define i32 @sge_nearpoweroftwo(i32 %a) { 86 ; CHECK-LABEL: sge_nearpoweroftwo: 87 ; CHECK: .long 4097 88 %b = icmp sge i32 %a, 4097 89 br i1 %b, label %true, label %false 90 91 true: 92 ret i32 1 93 94 false: 95 ret i32 2 96 } 97 98 define i32 @sgt_nearpoweroftwo(i32 %a) { 99 ; CHECK-LABEL: sgt_nearpoweroftwo: 100 ; CHECK: movs r1, #1 101 ; CHECK: lsls r1, r1, #12 102 %b = icmp sgt i32 %a, 4095 103 br i1 %b, label %true, label %false 104 105 true: 106 ret i32 1 107 108 false: 109 ret i32 2 110 } 111