252 lines · plain
1; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=ARM2; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -verify-machineinstrs | FileCheck %s --check-prefix=ARM3; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB4 5define void @t1a(float %a) uwtable ssp {6entry:7; ARM: t1a8; THUMB: t1a9 %cmp = fcmp oeq float %a, 0.000000e+0010; ARM: vcmp.f32 s{{[0-9]+}}, #011; THUMB: vcmp.f32 s{{[0-9]+}}, #012 br i1 %cmp, label %if.then, label %if.end13 14if.then: ; preds = %entry15 tail call void @foo()16 br label %if.end17 18if.end: ; preds = %if.then, %entry19 ret void20}21 22declare void @foo()23 24; Shouldn't be able to encode -0.0 imm.25define void @t1b(float %a) uwtable ssp {26entry:27; ARM: t1b28; THUMB: t1b29 %cmp = fcmp oeq float %a, -0.000000e+0030; ARM: vldr31; ARM: vcmp.f32 s{{[0-9]+}}, s{{[0-9]+}}32; THUMB: vldr33; THUMB: vcmp.f32 s{{[0-9]+}}, s{{[0-9]+}}34 br i1 %cmp, label %if.then, label %if.end35 36if.then: ; preds = %entry37 tail call void @foo()38 br label %if.end39 40if.end: ; preds = %if.then, %entry41 ret void42}43 44define void @t2a(double %a) uwtable ssp {45entry:46; ARM: t2a47; THUMB: t2a48 %cmp = fcmp oeq double %a, 0.000000e+0049; ARM: vcmp.f64 d{{[0-9]+}}, #050; THUMB: vcmp.f64 d{{[0-9]+}}, #051 br i1 %cmp, label %if.then, label %if.end52 53if.then: ; preds = %entry54 tail call void @foo()55 br label %if.end56 57if.end: ; preds = %if.then, %entry58 ret void59}60 61; Shouldn't be able to encode -0.0 imm.62define void @t2b(double %a) uwtable ssp {63entry:64; ARM: t2b65; THUMB: t2b66 %cmp = fcmp oeq double %a, -0.000000e+0067; ARM: vldr68; ARM: vcmp.f64 d{{[0-9]+}}, d{{[0-9]+}}69; THUMB: vldr70; THUMB: vcmp.f64 d{{[0-9]+}}, d{{[0-9]+}}71 br i1 %cmp, label %if.then, label %if.end72 73if.then: ; preds = %entry74 tail call void @foo()75 br label %if.end76 77if.end: ; preds = %if.then, %entry78 ret void79}80 81define void @t4(i8 signext %a) uwtable ssp {82entry:83; ARM: t484; THUMB: t485 %cmp = icmp eq i8 %a, -186; ARM: cmn r{{[0-9]}}, #187; THUMB: cmn.w r{{[0-9]}}, #188 br i1 %cmp, label %if.then, label %if.end89 90if.then: ; preds = %entry91 tail call void @foo()92 br label %if.end93 94if.end: ; preds = %if.then, %entry95 ret void96}97 98define void @t5(i8 zeroext %a) uwtable ssp {99entry:100; ARM: t5101; THUMB: t5102 %cmp = icmp eq i8 %a, 1103; ARM: cmp r{{[0-9]}}, #1104; THUMB: cmp r{{[0-9]}}, #1105 br i1 %cmp, label %if.then, label %if.end106 107if.then: ; preds = %entry108 tail call void @foo()109 br label %if.end110 111if.end: ; preds = %if.then, %entry112 ret void113}114 115define void @t6(i16 signext %a) uwtable ssp {116entry:117; ARM: t6118; THUMB: t6119 %cmp = icmp eq i16 %a, -1120; ARM: cmn r{{[0-9]}}, #1121; THUMB: cmn.w r{{[0-9]}}, #1122 br i1 %cmp, label %if.then, label %if.end123 124if.then: ; preds = %entry125 tail call void @foo()126 br label %if.end127 128if.end: ; preds = %if.then, %entry129 ret void130}131 132define void @t7(i16 zeroext %a) uwtable ssp {133entry:134; ARM: t7135; THUMB: t7136 %cmp = icmp eq i16 %a, 1137; ARM: cmp r{{[0-9]}}, #1138; THUMB: cmp r{{[0-9]}}, #1139 br i1 %cmp, label %if.then, label %if.end140 141if.then: ; preds = %entry142 tail call void @foo()143 br label %if.end144 145if.end: ; preds = %if.then, %entry146 ret void147}148 149define void @t8(i32 %a) uwtable ssp {150entry:151; ARM: t8152; THUMB: t8153 %cmp = icmp eq i32 %a, -1154; ARM: cmn r{{[0-9]}}, #1155; THUMB: cmn.w r{{[0-9]}}, #1156 br i1 %cmp, label %if.then, label %if.end157 158if.then: ; preds = %entry159 tail call void @foo()160 br label %if.end161 162if.end: ; preds = %if.then, %entry163 ret void164}165 166define void @t9(i32 %a) uwtable ssp {167entry:168; ARM: t9169; THUMB: t9170 %cmp = icmp eq i32 %a, 1171; ARM: cmp r{{[0-9]}}, #1172; THUMB: cmp r{{[0-9]}}, #1173 br i1 %cmp, label %if.then, label %if.end174 175if.then: ; preds = %entry176 tail call void @foo()177 br label %if.end178 179if.end: ; preds = %if.then, %entry180 ret void181}182 183define void @t10(i32 %a) uwtable ssp {184entry:185; ARM: t10186; THUMB: t10187 %cmp = icmp eq i32 %a, 384188; ARM: cmp r{{[0-9]}}, #384189; THUMB: cmp.w r{{[0-9]}}, #384190 br i1 %cmp, label %if.then, label %if.end191 192if.then: ; preds = %entry193 tail call void @foo()194 br label %if.end195 196if.end: ; preds = %if.then, %entry197 ret void198}199 200define void @t11(i32 %a) uwtable ssp {201entry:202; ARM: t11203; THUMB: t11204 %cmp = icmp eq i32 %a, 4096205; ARM: cmp r{{[0-9]}}, #4096206; THUMB: cmp.w r{{[0-9]}}, #4096207 br i1 %cmp, label %if.then, label %if.end208 209if.then: ; preds = %entry210 tail call void @foo()211 br label %if.end212 213if.end: ; preds = %if.then, %entry214 ret void215}216 217define void @t12(i8 %a) uwtable ssp {218entry:219; ARM: t12220; THUMB: t12221 %cmp = icmp ugt i8 %a, -113222; ARM: cmp r{{[0-9]}}, #143223; THUMB: cmp r{{[0-9]}}, #143224 br i1 %cmp, label %if.then, label %if.end225 226if.then: ; preds = %entry227 tail call void @foo()228 br label %if.end229 230if.end: ; preds = %if.then, %entry231 ret void232}233 234; rdar://11038907235; When comparing LONG_MIN/INT_MIN use a cmp instruction.236define void @t13() nounwind ssp {237entry:238; ARM: t13239; THUMB: t13240 %cmp = icmp slt i32 -123, -2147483648241; ARM: cmp r{{[0-9]}}, #-2147483648242; THUMB: cmp.w r{{[0-9]}}, #-2147483648243 br i1 %cmp, label %if.then, label %if.end244 245if.then: ; preds = %entry246 ret void247 248if.end: ; preds = %entry249 ret void250}251 252