c1f6b6327a44fb8923e3f52b7fbd0e1e6c4c9236
[oota-llvm.git] / test / CodeGen / PowerPC / fast-isel-cmp-imm.ll
1 ; FIXME: FastISel currently returns false if it hits code that uses VSX
2 ; registers and with -fast-isel-abort turned on the test case will then fail.
3 ; When fastisel better supports VSX fix up this test case.
4 ;
5 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64
6 define void @t1a(float %a) uwtable ssp {
7 entry:
8 ; ELF64: t1a
9   %cmp = fcmp oeq float %a, 0.000000e+00
10 ; ELF64: addis
11 ; ELF64: lfs
12 ; ELF64: fcmpu
13   br i1 %cmp, label %if.then, label %if.end
14
15 if.then:                                          ; preds = %entry
16   call void @foo()
17   br label %if.end
18
19 if.end:                                           ; preds = %if.then, %entry
20   ret void
21 }
22
23 declare void @foo()
24
25 define void @t1b(float %a) uwtable ssp {
26 entry:
27 ; ELF64: t1b
28   %cmp = fcmp oeq float %a, -0.000000e+00
29 ; ELF64: addis
30 ; ELF64: lfs
31 ; ELF64: fcmpu
32   br i1 %cmp, label %if.then, label %if.end
33
34 if.then:                                          ; preds = %entry
35   call void @foo()
36   br label %if.end
37
38 if.end:                                           ; preds = %if.then, %entry
39   ret void
40 }
41
42 define void @t2a(double %a) uwtable ssp {
43 entry:
44 ; ELF64: t2a
45   %cmp = fcmp oeq double %a, 0.000000e+00
46 ; ELF64: addis
47 ; ELF64: lfd
48 ; ELF64: fcmpu
49   br i1 %cmp, label %if.then, label %if.end
50
51 if.then:                                          ; preds = %entry
52   call void @foo()
53   br label %if.end
54
55 if.end:                                           ; preds = %if.then, %entry
56   ret void
57 }
58
59 define void @t2b(double %a) uwtable ssp {
60 entry:
61 ; ELF64: t2b
62   %cmp = fcmp oeq double %a, -0.000000e+00
63 ; ELF64: addis
64 ; ELF64: lfd
65 ; ELF64: fcmpu
66   br i1 %cmp, label %if.then, label %if.end
67
68 if.then:                                          ; preds = %entry
69   call void @foo()
70   br label %if.end
71
72 if.end:                                           ; preds = %if.then, %entry
73   ret void
74 }
75
76 define void @t4(i8 signext %a) uwtable ssp {
77 entry:
78 ; ELF64: t4
79   %cmp = icmp eq i8 %a, -1
80 ; ELF64: extsb
81 ; ELF64: cmpwi
82   br i1 %cmp, label %if.then, label %if.end
83
84 if.then:                                          ; preds = %entry
85   call void @foo()
86   br label %if.end
87
88 if.end:                                           ; preds = %if.then, %entry
89   ret void
90 }
91
92 define void @t5(i8 zeroext %a) uwtable ssp {
93 entry:
94 ; ELF64: t5
95   %cmp = icmp eq i8 %a, 1
96 ; ELF64: extsb
97 ; ELF64: cmpwi
98   br i1 %cmp, label %if.then, label %if.end
99
100 if.then:                                          ; preds = %entry
101   call void @foo()
102   br label %if.end
103
104 if.end:                                           ; preds = %if.then, %entry
105   ret void
106 }
107
108 define void @t6(i16 signext %a) uwtable ssp {
109 entry:
110 ; ELF64: t6
111   %cmp = icmp eq i16 %a, -1
112 ; ELF64: extsh
113 ; ELF64: cmpwi
114   br i1 %cmp, label %if.then, label %if.end
115
116 if.then:                                          ; preds = %entry
117   call void @foo()
118   br label %if.end
119
120 if.end:                                           ; preds = %if.then, %entry
121   ret void
122 }
123
124 define void @t7(i16 zeroext %a) uwtable ssp {
125 entry:
126 ; ELF64: t7
127   %cmp = icmp eq i16 %a, 1
128 ; ELF64: extsh
129 ; ELF64: cmpwi
130   br i1 %cmp, label %if.then, label %if.end
131
132 if.then:                                          ; preds = %entry
133   call void @foo()
134   br label %if.end
135
136 if.end:                                           ; preds = %if.then, %entry
137   ret void
138 }
139
140 define void @t8(i32 %a) uwtable ssp {
141 entry:
142 ; ELF64: t8
143   %cmp = icmp eq i32 %a, -1
144 ; ELF64: cmpwi
145   br i1 %cmp, label %if.then, label %if.end
146
147 if.then:                                          ; preds = %entry
148   call void @foo()
149   br label %if.end
150
151 if.end:                                           ; preds = %if.then, %entry
152   ret void
153 }
154
155 define void @t9(i32 %a) uwtable ssp {
156 entry:
157 ; ELF64: t9
158   %cmp = icmp eq i32 %a, 1
159 ; ELF64: cmpwi
160   br i1 %cmp, label %if.then, label %if.end
161
162 if.then:                                          ; preds = %entry
163   call void @foo()
164   br label %if.end
165
166 if.end:                                           ; preds = %if.then, %entry
167   ret void
168 }
169
170 define void @t10(i32 %a) uwtable ssp {
171 entry:
172 ; ELF64: t10
173   %cmp = icmp eq i32 %a, 384
174 ; ELF64: cmpwi
175   br i1 %cmp, label %if.then, label %if.end
176
177 if.then:                                          ; preds = %entry
178   call void @foo()
179   br label %if.end
180
181 if.end:                                           ; preds = %if.then, %entry
182   ret void
183 }
184
185 define void @t11(i32 %a) uwtable ssp {
186 entry:
187 ; ELF64: t11
188   %cmp = icmp eq i32 %a, 4096
189 ; ELF64: cmpwi
190   br i1 %cmp, label %if.then, label %if.end
191
192 if.then:                                          ; preds = %entry
193   call void @foo()
194   br label %if.end
195
196 if.end:                                           ; preds = %if.then, %entry
197   ret void
198 }
199
200 define void @t12(i8 %a) uwtable ssp {
201 entry:
202 ; ELF64: t12
203   %cmp = icmp ugt i8 %a, -113
204 ; ELF64: rlwinm
205 ; ELF64: cmplwi
206   br i1 %cmp, label %if.then, label %if.end
207
208 if.then:                                          ; preds = %entry
209   call void @foo()
210   br label %if.end
211
212 if.end:                                           ; preds = %if.then, %entry
213   ret void
214 }
215
216 define void @t13() nounwind ssp {
217 entry:
218 ; ELF64: t13
219   %cmp = icmp slt i32 -123, -2147483648
220 ; ELF64: li
221 ; ELF64: lis
222 ; ELF64: cmpw
223   br i1 %cmp, label %if.then, label %if.end
224
225 if.then:                                          ; preds = %entry
226   ret void
227
228 if.end:                                           ; preds = %entry
229   ret void
230 }
231
232 define void @t14(i64 %a) uwtable ssp {
233 entry:
234 ; ELF64: t14
235   %cmp = icmp eq i64 %a, -1
236 ; ELF64: cmpdi
237   br i1 %cmp, label %if.then, label %if.end
238
239 if.then:                                          ; preds = %entry
240   call void @foo()
241   br label %if.end
242
243 if.end:                                           ; preds = %if.then, %entry
244   ret void
245 }
246
247 define void @t15(i64 %a) uwtable ssp {
248 entry:
249 ; ELF64: t15
250   %cmp = icmp eq i64 %a, 1
251 ; ELF64: cmpdi
252   br i1 %cmp, label %if.then, label %if.end
253
254 if.then:                                          ; preds = %entry
255   call void @foo()
256   br label %if.end
257
258 if.end:                                           ; preds = %if.then, %entry
259   ret void
260 }
261
262 define void @t16(i64 %a) uwtable ssp {
263 entry:
264 ; ELF64: t16
265   %cmp = icmp eq i64 %a, 384
266 ; ELF64: cmpdi
267   br i1 %cmp, label %if.then, label %if.end
268
269 if.then:                                          ; preds = %entry
270   call void @foo()
271   br label %if.end
272
273 if.end:                                           ; preds = %if.then, %entry
274   ret void
275 }
276
277 define void @t17(i64 %a) uwtable ssp {
278 entry:
279 ; ELF64: t17
280   %cmp = icmp eq i64 %a, 32768
281 ; Extra operand so we don't match on cmpdi.
282 ; ELF64: cmpd {{[0-9]+}}
283   br i1 %cmp, label %if.then, label %if.end
284
285 if.then:                                          ; preds = %entry
286   call void @foo()
287   br label %if.end
288
289 if.end:                                           ; preds = %if.then, %entry
290   ret void
291 }
292