[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / ARM / fast-isel-cmp-imm.ll
blob543b6c285f3f7c851783a5e0b452808b57b5e3d7
1 ; 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
5 define void @t1a(float %a) uwtable ssp {
6 entry:
7 ; ARM: t1a
8 ; THUMB: t1a
9   %cmp = fcmp oeq float %a, 0.000000e+00
10 ; ARM: vcmp.f32 s{{[0-9]+}}, #0
11 ; THUMB: vcmp.f32 s{{[0-9]+}}, #0
12   br i1 %cmp, label %if.then, label %if.end
14 if.then:                                          ; preds = %entry
15   tail call void @foo()
16   br label %if.end
18 if.end:                                           ; preds = %if.then, %entry
19   ret void
22 declare void @foo()
24 ; Shouldn't be able to encode -0.0 imm.
25 define void @t1b(float %a) uwtable ssp {
26 entry:
27 ; ARM: t1b
28 ; THUMB: t1b
29   %cmp = fcmp oeq float %a, -0.000000e+00
30 ; ARM: vldr
31 ; ARM: vcmp.f32 s{{[0-9]+}}, s{{[0-9]+}}
32 ; THUMB: vldr
33 ; THUMB: vcmp.f32 s{{[0-9]+}}, s{{[0-9]+}}
34   br i1 %cmp, label %if.then, label %if.end
36 if.then:                                          ; preds = %entry
37   tail call void @foo()
38   br label %if.end
40 if.end:                                           ; preds = %if.then, %entry
41   ret void
44 define void @t2a(double %a) uwtable ssp {
45 entry:
46 ; ARM: t2a
47 ; THUMB: t2a
48   %cmp = fcmp oeq double %a, 0.000000e+00
49 ; ARM: vcmp.f64 d{{[0-9]+}}, #0
50 ; THUMB: vcmp.f64 d{{[0-9]+}}, #0
51   br i1 %cmp, label %if.then, label %if.end
53 if.then:                                          ; preds = %entry
54   tail call void @foo()
55   br label %if.end
57 if.end:                                           ; preds = %if.then, %entry
58   ret void
61 ; Shouldn't be able to encode -0.0 imm.
62 define void @t2b(double %a) uwtable ssp {
63 entry:
64 ; ARM: t2b
65 ; THUMB: t2b
66   %cmp = fcmp oeq double %a, -0.000000e+00
67 ; ARM: vldr
68 ; ARM: vcmp.f64 d{{[0-9]+}}, d{{[0-9]+}}
69 ; THUMB: vldr
70 ; THUMB: vcmp.f64 d{{[0-9]+}}, d{{[0-9]+}}
71   br i1 %cmp, label %if.then, label %if.end
73 if.then:                                          ; preds = %entry
74   tail call void @foo()
75   br label %if.end
77 if.end:                                           ; preds = %if.then, %entry
78   ret void
81 define void @t4(i8 signext %a) uwtable ssp {
82 entry:
83 ; ARM: t4
84 ; THUMB: t4
85   %cmp = icmp eq i8 %a, -1
86 ; ARM: cmn r{{[0-9]}}, #1
87 ; THUMB: cmn.w r{{[0-9]}}, #1
88   br i1 %cmp, label %if.then, label %if.end
90 if.then:                                          ; preds = %entry
91   tail call void @foo()
92   br label %if.end
94 if.end:                                           ; preds = %if.then, %entry
95   ret void
98 define void @t5(i8 zeroext %a) uwtable ssp {
99 entry:
100 ; ARM: t5
101 ; THUMB: t5
102   %cmp = icmp eq i8 %a, 1
103 ; ARM: cmp r{{[0-9]}}, #1
104 ; THUMB: cmp r{{[0-9]}}, #1
105   br i1 %cmp, label %if.then, label %if.end
107 if.then:                                          ; preds = %entry
108   tail call void @foo()
109   br label %if.end
111 if.end:                                           ; preds = %if.then, %entry
112   ret void
115 define void @t6(i16 signext %a) uwtable ssp {
116 entry:
117 ; ARM: t6
118 ; THUMB: t6
119   %cmp = icmp eq i16 %a, -1
120 ; ARM: cmn r{{[0-9]}}, #1
121 ; THUMB: cmn.w r{{[0-9]}}, #1
122   br i1 %cmp, label %if.then, label %if.end
124 if.then:                                          ; preds = %entry
125   tail call void @foo()
126   br label %if.end
128 if.end:                                           ; preds = %if.then, %entry
129   ret void
132 define void @t7(i16 zeroext %a) uwtable ssp {
133 entry:
134 ; ARM: t7
135 ; THUMB: t7
136   %cmp = icmp eq i16 %a, 1
137 ; ARM: cmp r{{[0-9]}}, #1
138 ; THUMB: cmp r{{[0-9]}}, #1
139   br i1 %cmp, label %if.then, label %if.end
141 if.then:                                          ; preds = %entry
142   tail call void @foo()
143   br label %if.end
145 if.end:                                           ; preds = %if.then, %entry
146   ret void
149 define void @t8(i32 %a) uwtable ssp {
150 entry:
151 ; ARM: t8
152 ; THUMB: t8
153   %cmp = icmp eq i32 %a, -1
154 ; ARM: cmn r{{[0-9]}}, #1
155 ; THUMB: cmn.w r{{[0-9]}}, #1
156   br i1 %cmp, label %if.then, label %if.end
158 if.then:                                          ; preds = %entry
159   tail call void @foo()
160   br label %if.end
162 if.end:                                           ; preds = %if.then, %entry
163   ret void
166 define void @t9(i32 %a) uwtable ssp {
167 entry:
168 ; ARM: t9
169 ; THUMB: t9
170   %cmp = icmp eq i32 %a, 1
171 ; ARM: cmp r{{[0-9]}}, #1
172 ; THUMB: cmp r{{[0-9]}}, #1
173   br i1 %cmp, label %if.then, label %if.end
175 if.then:                                          ; preds = %entry
176   tail call void @foo()
177   br label %if.end
179 if.end:                                           ; preds = %if.then, %entry
180   ret void
183 define void @t10(i32 %a) uwtable ssp {
184 entry:
185 ; ARM: t10
186 ; THUMB: t10
187   %cmp = icmp eq i32 %a, 384
188 ; ARM: cmp r{{[0-9]}}, #384
189 ; THUMB: cmp.w r{{[0-9]}}, #384
190   br i1 %cmp, label %if.then, label %if.end
192 if.then:                                          ; preds = %entry
193   tail call void @foo()
194   br label %if.end
196 if.end:                                           ; preds = %if.then, %entry
197   ret void
200 define void @t11(i32 %a) uwtable ssp {
201 entry:
202 ; ARM: t11
203 ; THUMB: t11
204   %cmp = icmp eq i32 %a, 4096
205 ; ARM: cmp r{{[0-9]}}, #4096
206 ; THUMB: cmp.w r{{[0-9]}}, #4096
207   br i1 %cmp, label %if.then, label %if.end
209 if.then:                                          ; preds = %entry
210   tail call void @foo()
211   br label %if.end
213 if.end:                                           ; preds = %if.then, %entry
214   ret void
217 define void @t12(i8 %a) uwtable ssp {
218 entry:
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
226 if.then:                                          ; preds = %entry
227   tail call void @foo()
228   br label %if.end
230 if.end:                                           ; preds = %if.then, %entry
231   ret void
234 ; rdar://11038907
235 ; When comparing LONG_MIN/INT_MIN use a cmp instruction.
236 define void @t13() nounwind ssp {
237 entry:
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
245 if.then:                                          ; preds = %entry
246   ret void
248 if.end:                                           ; preds = %entry
249   ret void