blob: a9d7e4580638e73e69c8daf336ad36cdf67dd336 [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=ARM
2; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -verify-machineinstrs | FileCheck %s --check-prefix=ARM
3; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB
Chad Rosier595d4192011-11-09 03:22:02 +00004
5define void @t1a(float %a) uwtable ssp {
6entry:
7; ARM: t1a
8; THUMB: t1a
9 %cmp = fcmp oeq float %a, 0.000000e+00
Chad Rosierc22f6512011-11-09 20:06:13 +000010; ARM: vcmpe.f32 s{{[0-9]+}}, #0
11; THUMB: vcmpe.f32 s{{[0-9]+}}, #0
Chad Rosier595d4192011-11-09 03:22:02 +000012 br i1 %cmp, label %if.then, label %if.end
13
14if.then: ; preds = %entry
15 tail call void @foo()
16 br label %if.end
17
18if.end: ; preds = %if.then, %entry
19 ret void
20}
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: t1b
28; THUMB: t1b
29 %cmp = fcmp oeq float %a, -0.000000e+00
Jim Grosbach3e2c6f32011-11-14 23:03:21 +000030; ARM: vldr
Chad Rosierc22f6512011-11-09 20:06:13 +000031; ARM: vcmpe.f32 s{{[0-9]+}}, s{{[0-9]+}}
Jim Grosbach3e2c6f32011-11-14 23:03:21 +000032; THUMB: vldr
Chad Rosierc22f6512011-11-09 20:06:13 +000033; THUMB: vcmpe.f32 s{{[0-9]+}}, s{{[0-9]+}}
Chad Rosier595d4192011-11-09 03:22:02 +000034 br i1 %cmp, label %if.then, label %if.end
35
36if.then: ; preds = %entry
37 tail call void @foo()
38 br label %if.end
39
40if.end: ; preds = %if.then, %entry
41 ret void
42}
43
44define void @t2a(double %a) uwtable ssp {
45entry:
46; ARM: t2a
47; THUMB: t2a
48 %cmp = fcmp oeq double %a, 0.000000e+00
Chad Rosierc22f6512011-11-09 20:06:13 +000049; ARM: vcmpe.f64 d{{[0-9]+}}, #0
50; THUMB: vcmpe.f64 d{{[0-9]+}}, #0
Chad Rosier595d4192011-11-09 03:22:02 +000051 br i1 %cmp, label %if.then, label %if.end
52
53if.then: ; preds = %entry
54 tail call void @foo()
55 br label %if.end
56
57if.end: ; preds = %if.then, %entry
58 ret void
59}
60
61; Shouldn't be able to encode -0.0 imm.
62define void @t2b(double %a) uwtable ssp {
63entry:
64; ARM: t2b
65; THUMB: t2b
66 %cmp = fcmp oeq double %a, -0.000000e+00
Jim Grosbach3e2c6f32011-11-14 23:03:21 +000067; ARM: vldr
Chad Rosierc22f6512011-11-09 20:06:13 +000068; ARM: vcmpe.f64 d{{[0-9]+}}, d{{[0-9]+}}
Jim Grosbach3e2c6f32011-11-14 23:03:21 +000069; THUMB: vldr
Chad Rosierc22f6512011-11-09 20:06:13 +000070; THUMB: vcmpe.f64 d{{[0-9]+}}, d{{[0-9]+}}
Chad Rosier595d4192011-11-09 03:22:02 +000071 br i1 %cmp, label %if.then, label %if.end
72
73if.then: ; preds = %entry
74 tail call void @foo()
75 br label %if.end
76
77if.end: ; preds = %if.then, %entry
78 ret void
79}
80
81define void @t4(i8 signext %a) uwtable ssp {
82entry:
83; ARM: t4
84; THUMB: t4
85 %cmp = icmp eq i8 %a, -1
Chad Rosierc22f6512011-11-09 20:06:13 +000086; ARM: cmn r{{[0-9]}}, #1
87; THUMB: cmn.w r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +000088 br i1 %cmp, label %if.then, label %if.end
89
90if.then: ; preds = %entry
91 tail call void @foo()
92 br label %if.end
93
94if.end: ; preds = %if.then, %entry
95 ret void
96}
97
98define void @t5(i8 zeroext %a) uwtable ssp {
99entry:
100; ARM: t5
101; THUMB: t5
102 %cmp = icmp eq i8 %a, 1
Chad Rosierc22f6512011-11-09 20:06:13 +0000103; ARM: cmp r{{[0-9]}}, #1
104; THUMB: cmp r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +0000105 br i1 %cmp, label %if.then, label %if.end
106
107if.then: ; preds = %entry
108 tail call void @foo()
109 br label %if.end
110
111if.end: ; preds = %if.then, %entry
112 ret void
113}
114
115define void @t6(i16 signext %a) uwtable ssp {
116entry:
117; ARM: t6
118; THUMB: t6
119 %cmp = icmp eq i16 %a, -1
Chad Rosierc22f6512011-11-09 20:06:13 +0000120; ARM: cmn r{{[0-9]}}, #1
121; THUMB: cmn.w r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +0000122 br i1 %cmp, label %if.then, label %if.end
123
124if.then: ; preds = %entry
125 tail call void @foo()
126 br label %if.end
127
128if.end: ; preds = %if.then, %entry
129 ret void
130}
131
132define void @t7(i16 zeroext %a) uwtable ssp {
133entry:
134; ARM: t7
135; THUMB: t7
136 %cmp = icmp eq i16 %a, 1
Chad Rosierc22f6512011-11-09 20:06:13 +0000137; ARM: cmp r{{[0-9]}}, #1
138; THUMB: cmp r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +0000139 br i1 %cmp, label %if.then, label %if.end
140
141if.then: ; preds = %entry
142 tail call void @foo()
143 br label %if.end
144
145if.end: ; preds = %if.then, %entry
146 ret void
147}
148
149define void @t8(i32 %a) uwtable ssp {
150entry:
151; ARM: t8
152; THUMB: t8
153 %cmp = icmp eq i32 %a, -1
Chad Rosierc22f6512011-11-09 20:06:13 +0000154; ARM: cmn r{{[0-9]}}, #1
155; THUMB: cmn.w r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +0000156 br i1 %cmp, label %if.then, label %if.end
157
158if.then: ; preds = %entry
159 tail call void @foo()
160 br label %if.end
161
162if.end: ; preds = %if.then, %entry
163 ret void
164}
165
166define void @t9(i32 %a) uwtable ssp {
167entry:
168; ARM: t9
169; THUMB: t9
170 %cmp = icmp eq i32 %a, 1
Chad Rosierc22f6512011-11-09 20:06:13 +0000171; ARM: cmp r{{[0-9]}}, #1
172; THUMB: cmp r{{[0-9]}}, #1
Chad Rosier595d4192011-11-09 03:22:02 +0000173 br i1 %cmp, label %if.then, label %if.end
174
175if.then: ; preds = %entry
176 tail call void @foo()
177 br label %if.end
178
179if.end: ; preds = %if.then, %entry
180 ret void
181}
182
183define void @t10(i32 %a) uwtable ssp {
184entry:
185; ARM: t10
186; THUMB: t10
187 %cmp = icmp eq i32 %a, 384
Chad Rosierc22f6512011-11-09 20:06:13 +0000188; ARM: cmp r{{[0-9]}}, #384
189; THUMB: cmp.w r{{[0-9]}}, #384
Chad Rosier595d4192011-11-09 03:22:02 +0000190 br i1 %cmp, label %if.then, label %if.end
191
192if.then: ; preds = %entry
193 tail call void @foo()
194 br label %if.end
195
196if.end: ; preds = %if.then, %entry
197 ret void
198}
199
200define void @t11(i32 %a) uwtable ssp {
201entry:
202; ARM: t11
203; THUMB: t11
204 %cmp = icmp eq i32 %a, 4096
Chad Rosierc22f6512011-11-09 20:06:13 +0000205; ARM: cmp r{{[0-9]}}, #4096
206; THUMB: cmp.w r{{[0-9]}}, #4096
Chad Rosier595d4192011-11-09 03:22:02 +0000207 br i1 %cmp, label %if.then, label %if.end
208
209if.then: ; preds = %entry
210 tail call void @foo()
211 br label %if.end
212
213if.end: ; preds = %if.then, %entry
214 ret void
215}
Chad Rosier3fbd0942011-11-10 01:30:39 +0000216
217define void @t12(i8 %a) uwtable ssp {
218entry:
219; ARM: t12
220; THUMB: t12
221 %cmp = icmp ugt i8 %a, -113
222; ARM: cmp r{{[0-9]}}, #143
223; THUMB: cmp r{{[0-9]}}, #143
224 br i1 %cmp, label %if.then, label %if.end
225
226if.then: ; preds = %entry
227 tail call void @foo()
228 br label %if.end
229
230if.end: ; preds = %if.then, %entry
231 ret void
232}
Chad Rosier26d05882012-03-15 22:54:20 +0000233
234; rdar://11038907
235; When comparing LONG_MIN/INT_MIN use a cmp instruction.
236define void @t13() nounwind ssp {
237entry:
238; ARM: t13
239; THUMB: t13
240 %cmp = icmp slt i32 -123, -2147483648
241; ARM: cmp r{{[0-9]}}, #-2147483648
242; THUMB: cmp.w r{{[0-9]}}, #-2147483648
243 br i1 %cmp, label %if.then, label %if.end
244
245if.then: ; preds = %entry
246 ret void
247
248if.end: ; preds = %entry
249 ret void
250}
251