300 lines · plain
1; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - | FileCheck %s2 3; These tests would be improved by 'movs r0, #0' being rematerialized below the4; test as 'mov.w r0, #0'.5 6; 0x000000bb = 1877define i32 @f1(i32 %a) {8; CHECK-LABEL: f1:9; CHECK: cmp {{.*}}, #18710 %tmp = icmp ne i32 %a, 18711 %ret = select i1 %tmp, i32 42, i32 2412 ret i32 %ret13}14 15; 0x00aa00aa = 1114129016define i32 @f2(i32 %a) {17; CHECK-LABEL: f2:18; CHECK: cmp.w {{.*}}, #1114129019 %tmp = icmp eq i32 %a, 11141290 20 %ret = select i1 %tmp, i32 42, i32 2421 ret i32 %ret22}23 24; 0xcc00cc00 = 342260428825define i32 @f3(i32 %a) {26; CHECK-LABEL: f3:27; CHECK: cmp.w {{.*}}, #-87236300828 %tmp = icmp ne i32 %a, 342260428829 %ret = select i1 %tmp, i32 42, i32 2430 ret i32 %ret31}32 33; 0xdddddddd = 372230498934define i32 @f4(i32 %a) {35; CHECK-LABEL: f4:36; CHECK: cmp.w {{.*}}, #-57266230737 %tmp = icmp ne i32 %a, 372230498938 %ret = select i1 %tmp, i32 42, i32 2439 ret i32 %ret40}41 42; 0x00110000 = 111411243define i32 @f5(i32 %a) {44; CHECK-LABEL: f5:45; CHECK: cmp.w {{.*}}, #111411246 %tmp = icmp eq i32 %a, 111411247 %ret = select i1 %tmp, i32 42, i32 2448 ret i32 %ret49}50 51; Check that we don't do an invalid (a > b) --> !(a < b + 1) transform.52;53; CHECK-LABEL: f6:54; CHECK-NOT: cmp.w {{.*}}, #-214748364855; CHECK: bx lr56define i32 @f6(i32 %a) {57 %tmp = icmp sgt i32 %a, 214748364758 br i1 %tmp, label %true, label %false59true:60 ret i32 261false:62 ret i32 063}64 65define i32 @slt_poweroftwo(i32 %a) {66; CHECK-LABEL: slt_poweroftwo:67; CHECK: cmp.w r0, #409668 %b = icmp slt i32 %a, 409669 br i1 %b, label %true, label %false70 71true:72 ret i32 173 74false:75 ret i32 276}77 78define i32 @sle_poweroftwo(i32 %a) {79; CHECK-LABEL: sle_poweroftwo:80; CHECK: cmp.w r0, #409681 %b = icmp sle i32 %a, 409682 br i1 %b, label %true, label %false83 84true:85 ret i32 186 87false:88 ret i32 289}90 91define i32 @sge_poweroftwo(i32 %a) {92; CHECK-LABEL: sge_poweroftwo:93; CHECK: cmp.w r0, #409694 %b = icmp sge i32 %a, 409695 br i1 %b, label %true, label %false96 97true:98 ret i32 199 100false:101 ret i32 2102}103 104define i32 @sgt_poweroftwo(i32 %a) {105; CHECK-LABEL: sgt_poweroftwo:106; CHECK: cmp.w r0, #4096107 %b = icmp sgt i32 %a, 4096108 br i1 %b, label %true, label %false109 110true:111 ret i32 1112 113false:114 ret i32 2115}116 117define i32 @slt_nearpoweroftwo(i32 %a) {118; CHECK-LABEL: slt_nearpoweroftwo:119; CHECK: cmp.w r0, #4096120 %b = icmp slt i32 %a, 4097121 br i1 %b, label %true, label %false122 123true:124 ret i32 1125 126false:127 ret i32 2128}129 130define i32 @sle_nearpoweroftwo(i32 %a) {131; CHECK-LABEL: sle_nearpoweroftwo:132; CHECK: cmp.w r0, #4096133 %b = icmp sle i32 %a, 4095134 br i1 %b, label %true, label %false135 136true:137 ret i32 1138 139false:140 ret i32 2141}142 143 144define i32 @sge_nearpoweroftwo(i32 %a) {145; CHECK-LABEL: sge_nearpoweroftwo:146; CHECK: cmp.w r0, #4096147 %b = icmp sge i32 %a, 4097148 br i1 %b, label %true, label %false149 150true:151 ret i32 1152 153false:154 ret i32 2155}156 157define i32 @sgt_nearpoweroftwo(i32 %a) {158; CHECK-LABEL: sgt_nearpoweroftwo:159; CHECK: cmp.w r0, #4096160 %b = icmp sgt i32 %a, 4095161 br i1 %b, label %true, label %false162 163true:164 ret i32 1165 166false:167 ret i32 2168}169 170define i32 @slt_neg_soimm(i32 %a) {171; CHECK-LABEL: slt_neg_soimm:172; CHECK: cmn.w r0, #7929856173 %b = icmp slt i32 %a, -7929856174 br i1 %b, label %true, label %false175 176true:177 ret i32 1178 179false:180 ret i32 2181}182 183define i32 @sle_neg_soimm(i32 %a) {184; CHECK-LABEL: sle_neg_soimm:185; CHECK: cmn.w r0, #7929856186 %b = icmp sle i32 %a, -7929856187 br i1 %b, label %true, label %false188 189true:190 ret i32 1191 192false:193 ret i32 2194}195 196define i32 @sge_neg_soimm(i32 %a) {197; CHECK-LABEL: sge_neg_soimm:198; CHECK: cmn.w r0, #7929856199 %b = icmp sge i32 %a, -7929856200 br i1 %b, label %true, label %false201 202true:203 ret i32 1204 205false:206 ret i32 2207}208 209define i32 @sgt_neg_soimm(i32 %a) {210; CHECK-LABEL: sgt_neg_soimm:211; CHECK: cmn.w r0, #7929856212 %b = icmp sgt i32 %a, -7929856213 br i1 %b, label %true, label %false214 215true:216 ret i32 1217 218false:219 ret i32 2220}221 222define i32 @slt_notneg_soimm(i32 %a) {223; CHECK-LABEL: slt_notneg_soimm:224; CHECK: cmp.w r0, #-2013231104225 %b = icmp slt i32 %a, -2013231104226 br i1 %b, label %true, label %false227 228true:229 ret i32 1230 231false:232 ret i32 2233}234 235define i32 @sle_notneg_soimm(i32 %a) {236; CHECK-LABEL: sle_notneg_soimm:237; CHECK: cmp.w r0, #-2013231104238 %b = icmp sle i32 %a, -2013231104239 br i1 %b, label %true, label %false240 241true:242 ret i32 1243 244false:245 ret i32 2246}247 248define i32 @sge_notneg_soimm(i32 %a) {249; CHECK-LABEL: sge_notneg_soimm:250; CHECK: cmp.w r0, #-2013231104251 %b = icmp sge i32 %a, -2013231104252 br i1 %b, label %true, label %false253 254true:255 ret i32 1256 257false:258 ret i32 2259}260 261define i32 @sgt_notneg_soimm(i32 %a) {262; CHECK-LABEL: sgt_notneg_soimm:263; CHECK: cmp.w r0, #-2013231104264 %b = icmp sgt i32 %a, -2013231104265 br i1 %b, label %true, label %false266 267true:268 ret i32 1269 270false:271 ret i32 2272}273 274define i32 @sgt_movw(i32 %a) {275; CHECK-LABEL: sgt_movw:276; CHECK: movw r1, #2167277 %b = icmp sgt i32 %a, 2166278 br i1 %b, label %true, label %false279 280true:281 ret i32 1282 283false:284 ret i32 2285}286 287define i32 @sgt_neg_movw(i32 %a) {288; CHECK-LABEL: sgt_neg_movw:289; CHECK: movw r1, #63371290; CHECK: movt r1, #65535291 %b = icmp sgt i32 %a, -2166292 br i1 %b, label %true, label %false293 294true:295 ret i32 1296 297false:298 ret i32 2299}300