Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.cmp.ll

Issue 1266263003: Add the ARM32 FP register table entries, simple arith, and args. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: format more Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests_lit/llvm2ice_tests/fp.call_ret.ll ('k') | tests_lit/llvm2ice_tests/fp.convert.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 ; This tries to be a comprehensive test of f32 and f64 compare operations.
2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines.
5
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s
7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s
8
9 define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
10 entry:
11 %cmp = fcmp oeq float %a, %b
12 br i1 %cmp, label %if.then, label %if.end
13
14 if.then: ; preds = %entry
15 call void @func()
16 br label %if.end
17
18 if.end: ; preds = %if.then, %entry
19 %cmp1 = fcmp oeq double %c, %d
20 br i1 %cmp1, label %if.then2, label %if.end3
21
22 if.then2: ; preds = %if.end
23 call void @func()
24 br label %if.end3
25
26 if.end3: ; preds = %if.then2, %if.end
27 ret void
28 }
29 ; CHECK-LABEL: fcmpEq
30 ; CHECK: ucomiss
31 ; CHECK: jne
32 ; CHECK-NEXT: jp
33 ; CHECK: call {{.*}} R_{{.*}} func
34 ; CHECK: ucomisd
35 ; CHECK: jne
36 ; CHECK-NEXT: jp
37 ; CHECK: call {{.*}} R_{{.*}} func
38
39 declare void @func()
40
41 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
42 entry:
43 %cmp = fcmp une float %a, %b
44 br i1 %cmp, label %if.then, label %if.end
45
46 if.then: ; preds = %entry
47 call void @func()
48 br label %if.end
49
50 if.end: ; preds = %if.then, %entry
51 %cmp1 = fcmp une double %c, %d
52 br i1 %cmp1, label %if.then2, label %if.end3
53
54 if.then2: ; preds = %if.end
55 call void @func()
56 br label %if.end3
57
58 if.end3: ; preds = %if.then2, %if.end
59 ret void
60 }
61 ; CHECK-LABEL: fcmpNe
62 ; CHECK: ucomiss
63 ; CHECK: jne
64 ; CHECK-NEXT: jp
65 ; CHECK: call {{.*}} R_{{.*}} func
66 ; CHECK: ucomisd
67 ; CHECK: jne
68 ; CHECK-NEXT: jp
69 ; CHECK: call {{.*}} R_{{.*}} func
70
71 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
72 entry:
73 %cmp = fcmp ogt float %a, %b
74 br i1 %cmp, label %if.then, label %if.end
75
76 if.then: ; preds = %entry
77 call void @func()
78 br label %if.end
79
80 if.end: ; preds = %if.then, %entry
81 %cmp1 = fcmp ogt double %c, %d
82 br i1 %cmp1, label %if.then2, label %if.end3
83
84 if.then2: ; preds = %if.end
85 call void @func()
86 br label %if.end3
87
88 if.end3: ; preds = %if.then2, %if.end
89 ret void
90 }
91 ; CHECK-LABEL: fcmpGt
92 ; CHECK: ucomiss
93 ; CHECK: seta
94 ; CHECK: call {{.*}} R_{{.*}} func
95 ; CHECK: ucomisd
96 ; CHECK: seta
97 ; CHECK: call {{.*}} R_{{.*}} func
98
99 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
100 entry:
101 %cmp = fcmp ult float %a, %b
102 br i1 %cmp, label %if.end, label %if.then
103
104 if.then: ; preds = %entry
105 call void @func()
106 br label %if.end
107
108 if.end: ; preds = %entry, %if.then
109 %cmp1 = fcmp ult double %c, %d
110 br i1 %cmp1, label %if.end3, label %if.then2
111
112 if.then2: ; preds = %if.end
113 call void @func()
114 br label %if.end3
115
116 if.end3: ; preds = %if.end, %if.then2
117 ret void
118 }
119 ; CHECK-LABEL: fcmpGe
120 ; CHECK: ucomiss
121 ; CHECK: setb
122 ; CHECK: call {{.*}} R_{{.*}} func
123 ; CHECK: ucomisd
124 ; CHECK: setb
125 ; CHECK: call {{.*}} R_{{.*}} func
126
127 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
128 entry:
129 %cmp = fcmp olt float %a, %b
130 br i1 %cmp, label %if.then, label %if.end
131
132 if.then: ; preds = %entry
133 call void @func()
134 br label %if.end
135
136 if.end: ; preds = %if.then, %entry
137 %cmp1 = fcmp olt double %c, %d
138 br i1 %cmp1, label %if.then2, label %if.end3
139
140 if.then2: ; preds = %if.end
141 call void @func()
142 br label %if.end3
143
144 if.end3: ; preds = %if.then2, %if.end
145 ret void
146 }
147 ; CHECK-LABEL: fcmpLt
148 ; CHECK: ucomiss
149 ; CHECK: seta
150 ; CHECK: call {{.*}} R_{{.*}} func
151 ; CHECK: ucomisd
152 ; CHECK: seta
153 ; CHECK: call {{.*}} R_{{.*}} func
154
155 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
156 entry:
157 %cmp = fcmp ugt float %a, %b
158 br i1 %cmp, label %if.end, label %if.then
159
160 if.then: ; preds = %entry
161 call void @func()
162 br label %if.end
163
164 if.end: ; preds = %entry, %if.then
165 %cmp1 = fcmp ugt double %c, %d
166 br i1 %cmp1, label %if.end3, label %if.then2
167
168 if.then2: ; preds = %if.end
169 call void @func()
170 br label %if.end3
171
172 if.end3: ; preds = %if.end, %if.then2
173 ret void
174 }
175 ; CHECK-LABEL: fcmpLe
176 ; CHECK: ucomiss
177 ; CHECK: setb
178 ; CHECK: call {{.*}} R_{{.*}} func
179 ; CHECK: ucomisd
180 ; CHECK: setb
181 ; CHECK: call {{.*}} R_{{.*}} func
182
183 define internal i32 @fcmpFalseFloat(float %a, float %b) {
184 entry:
185 %cmp = fcmp false float %a, %b
186 %cmp.ret_ext = zext i1 %cmp to i32
187 ret i32 %cmp.ret_ext
188 }
189 ; CHECK-LABEL: fcmpFalseFloat
190 ; CHECK: mov {{.*}},0x0
191
192 define internal i32 @fcmpFalseDouble(double %a, double %b) {
193 entry:
194 %cmp = fcmp false double %a, %b
195 %cmp.ret_ext = zext i1 %cmp to i32
196 ret i32 %cmp.ret_ext
197 }
198 ; CHECK-LABEL: fcmpFalseDouble
199 ; CHECK: mov {{.*}},0x0
200
201 define internal i32 @fcmpOeqFloat(float %a, float %b) {
202 entry:
203 %cmp = fcmp oeq float %a, %b
204 %cmp.ret_ext = zext i1 %cmp to i32
205 ret i32 %cmp.ret_ext
206 }
207 ; CHECK-LABEL: fcmpOeqFloat
208 ; CHECK: ucomiss
209 ; CHECK: jne
210 ; CHECK: jp
211
212 define internal i32 @fcmpOeqDouble(double %a, double %b) {
213 entry:
214 %cmp = fcmp oeq double %a, %b
215 %cmp.ret_ext = zext i1 %cmp to i32
216 ret i32 %cmp.ret_ext
217 }
218 ; CHECK-LABEL: fcmpOeqDouble
219 ; CHECK: ucomisd
220 ; CHECK: jne
221 ; CHECK: jp
222
223 define internal i32 @fcmpOgtFloat(float %a, float %b) {
224 entry:
225 %cmp = fcmp ogt float %a, %b
226 %cmp.ret_ext = zext i1 %cmp to i32
227 ret i32 %cmp.ret_ext
228 }
229 ; CHECK-LABEL: fcmpOgtFloat
230 ; CHECK: ucomiss
231 ; CHECK: seta
232
233 define internal i32 @fcmpOgtDouble(double %a, double %b) {
234 entry:
235 %cmp = fcmp ogt double %a, %b
236 %cmp.ret_ext = zext i1 %cmp to i32
237 ret i32 %cmp.ret_ext
238 }
239 ; CHECK-LABEL: fcmpOgtDouble
240 ; CHECK: ucomisd
241 ; CHECK: seta
242
243 define internal i32 @fcmpOgeFloat(float %a, float %b) {
244 entry:
245 %cmp = fcmp oge float %a, %b
246 %cmp.ret_ext = zext i1 %cmp to i32
247 ret i32 %cmp.ret_ext
248 }
249 ; CHECK-LABEL: fcmpOgeFloat
250 ; CHECK: ucomiss
251 ; CHECK: setae
252
253 define internal i32 @fcmpOgeDouble(double %a, double %b) {
254 entry:
255 %cmp = fcmp oge double %a, %b
256 %cmp.ret_ext = zext i1 %cmp to i32
257 ret i32 %cmp.ret_ext
258 }
259 ; CHECK-LABEL: fcmpOgeDouble
260 ; CHECK: ucomisd
261 ; CHECK: setae
262
263 define internal i32 @fcmpOltFloat(float %a, float %b) {
264 entry:
265 %cmp = fcmp olt float %a, %b
266 %cmp.ret_ext = zext i1 %cmp to i32
267 ret i32 %cmp.ret_ext
268 }
269 ; CHECK-LABEL: fcmpOltFloat
270 ; CHECK: ucomiss
271 ; CHECK: seta
272
273 define internal i32 @fcmpOltDouble(double %a, double %b) {
274 entry:
275 %cmp = fcmp olt double %a, %b
276 %cmp.ret_ext = zext i1 %cmp to i32
277 ret i32 %cmp.ret_ext
278 }
279 ; CHECK-LABEL: fcmpOltDouble
280 ; CHECK: ucomisd
281 ; CHECK: seta
282
283 define internal i32 @fcmpOleFloat(float %a, float %b) {
284 entry:
285 %cmp = fcmp ole float %a, %b
286 %cmp.ret_ext = zext i1 %cmp to i32
287 ret i32 %cmp.ret_ext
288 }
289 ; CHECK-LABEL: fcmpOleFloat
290 ; CHECK: ucomiss
291 ; CHECK: setae
292
293 define internal i32 @fcmpOleDouble(double %a, double %b) {
294 entry:
295 %cmp = fcmp ole double %a, %b
296 %cmp.ret_ext = zext i1 %cmp to i32
297 ret i32 %cmp.ret_ext
298 }
299 ; CHECK-LABEL: fcmpOleDouble
300 ; CHECK: ucomisd
301 ; CHECK: setae
302
303 define internal i32 @fcmpOneFloat(float %a, float %b) {
304 entry:
305 %cmp = fcmp one float %a, %b
306 %cmp.ret_ext = zext i1 %cmp to i32
307 ret i32 %cmp.ret_ext
308 }
309 ; CHECK-LABEL: fcmpOneFloat
310 ; CHECK: ucomiss
311 ; CHECK: setne
312
313 define internal i32 @fcmpOneDouble(double %a, double %b) {
314 entry:
315 %cmp = fcmp one double %a, %b
316 %cmp.ret_ext = zext i1 %cmp to i32
317 ret i32 %cmp.ret_ext
318 }
319 ; CHECK-LABEL: fcmpOneDouble
320 ; CHECK: ucomisd
321 ; CHECK: setne
322
323 define internal i32 @fcmpOrdFloat(float %a, float %b) {
324 entry:
325 %cmp = fcmp ord float %a, %b
326 %cmp.ret_ext = zext i1 %cmp to i32
327 ret i32 %cmp.ret_ext
328 }
329 ; CHECK-LABEL: fcmpOrdFloat
330 ; CHECK: ucomiss
331 ; CHECK: setnp
332
333 define internal i32 @fcmpOrdDouble(double %a, double %b) {
334 entry:
335 %cmp = fcmp ord double %a, %b
336 %cmp.ret_ext = zext i1 %cmp to i32
337 ret i32 %cmp.ret_ext
338 }
339 ; CHECK-LABEL: fcmpOrdDouble
340 ; CHECK: ucomisd
341 ; CHECK: setnp
342
343 define internal i32 @fcmpUeqFloat(float %a, float %b) {
344 entry:
345 %cmp = fcmp ueq float %a, %b
346 %cmp.ret_ext = zext i1 %cmp to i32
347 ret i32 %cmp.ret_ext
348 }
349 ; CHECK-LABEL: fcmpUeqFloat
350 ; CHECK: ucomiss
351 ; CHECK: sete
352
353 define internal i32 @fcmpUeqDouble(double %a, double %b) {
354 entry:
355 %cmp = fcmp ueq double %a, %b
356 %cmp.ret_ext = zext i1 %cmp to i32
357 ret i32 %cmp.ret_ext
358 }
359 ; CHECK-LABEL: fcmpUeqDouble
360 ; CHECK: ucomisd
361 ; CHECK: sete
362
363 define internal i32 @fcmpUgtFloat(float %a, float %b) {
364 entry:
365 %cmp = fcmp ugt float %a, %b
366 %cmp.ret_ext = zext i1 %cmp to i32
367 ret i32 %cmp.ret_ext
368 }
369 ; CHECK-LABEL: fcmpUgtFloat
370 ; CHECK: ucomiss
371 ; CHECK: setb
372
373 define internal i32 @fcmpUgtDouble(double %a, double %b) {
374 entry:
375 %cmp = fcmp ugt double %a, %b
376 %cmp.ret_ext = zext i1 %cmp to i32
377 ret i32 %cmp.ret_ext
378 }
379 ; CHECK-LABEL: fcmpUgtDouble
380 ; CHECK: ucomisd
381 ; CHECK: setb
382
383 define internal i32 @fcmpUgeFloat(float %a, float %b) {
384 entry:
385 %cmp = fcmp uge float %a, %b
386 %cmp.ret_ext = zext i1 %cmp to i32
387 ret i32 %cmp.ret_ext
388 }
389 ; CHECK-LABEL: fcmpUgeFloat
390 ; CHECK: ucomiss
391 ; CHECK: setbe
392
393 define internal i32 @fcmpUgeDouble(double %a, double %b) {
394 entry:
395 %cmp = fcmp uge double %a, %b
396 %cmp.ret_ext = zext i1 %cmp to i32
397 ret i32 %cmp.ret_ext
398 }
399 ; CHECK-LABEL: fcmpUgeDouble
400 ; CHECK: ucomisd
401 ; CHECK: setbe
402
403 define internal i32 @fcmpUltFloat(float %a, float %b) {
404 entry:
405 %cmp = fcmp ult float %a, %b
406 %cmp.ret_ext = zext i1 %cmp to i32
407 ret i32 %cmp.ret_ext
408 }
409 ; CHECK-LABEL: fcmpUltFloat
410 ; CHECK: ucomiss
411 ; CHECK: setb
412
413 define internal i32 @fcmpUltDouble(double %a, double %b) {
414 entry:
415 %cmp = fcmp ult double %a, %b
416 %cmp.ret_ext = zext i1 %cmp to i32
417 ret i32 %cmp.ret_ext
418 }
419 ; CHECK-LABEL: fcmpUltDouble
420 ; CHECK: ucomisd
421 ; CHECK: setb
422
423 define internal i32 @fcmpUleFloat(float %a, float %b) {
424 entry:
425 %cmp = fcmp ule float %a, %b
426 %cmp.ret_ext = zext i1 %cmp to i32
427 ret i32 %cmp.ret_ext
428 }
429 ; CHECK-LABEL: fcmpUleFloat
430 ; CHECK: ucomiss
431 ; CHECK: setbe
432
433 define internal i32 @fcmpUleDouble(double %a, double %b) {
434 entry:
435 %cmp = fcmp ule double %a, %b
436 %cmp.ret_ext = zext i1 %cmp to i32
437 ret i32 %cmp.ret_ext
438 }
439 ; CHECK-LABEL: fcmpUleDouble
440 ; CHECK: ucomisd
441 ; CHECK: setbe
442
443 define internal i32 @fcmpUneFloat(float %a, float %b) {
444 entry:
445 %cmp = fcmp une float %a, %b
446 %cmp.ret_ext = zext i1 %cmp to i32
447 ret i32 %cmp.ret_ext
448 }
449 ; CHECK-LABEL: fcmpUneFloat
450 ; CHECK: ucomiss
451 ; CHECK: jne
452 ; CHECK: jp
453
454 define internal i32 @fcmpUneDouble(double %a, double %b) {
455 entry:
456 %cmp = fcmp une double %a, %b
457 %cmp.ret_ext = zext i1 %cmp to i32
458 ret i32 %cmp.ret_ext
459 }
460 ; CHECK-LABEL: fcmpUneDouble
461 ; CHECK: ucomisd
462 ; CHECK: jne
463 ; CHECK: jp
464
465 define internal i32 @fcmpUnoFloat(float %a, float %b) {
466 entry:
467 %cmp = fcmp uno float %a, %b
468 %cmp.ret_ext = zext i1 %cmp to i32
469 ret i32 %cmp.ret_ext
470 }
471 ; CHECK-LABEL: fcmpUnoFloat
472 ; CHECK: ucomiss
473 ; CHECK: setp
474
475 define internal i32 @fcmpUnoDouble(double %a, double %b) {
476 entry:
477 %cmp = fcmp uno double %a, %b
478 %cmp.ret_ext = zext i1 %cmp to i32
479 ret i32 %cmp.ret_ext
480 }
481 ; CHECK-LABEL: fcmpUnoDouble
482 ; CHECK: ucomisd
483 ; CHECK: setp
484
485 define internal i32 @fcmpTrueFloat(float %a, float %b) {
486 entry:
487 %cmp = fcmp true float %a, %b
488 %cmp.ret_ext = zext i1 %cmp to i32
489 ret i32 %cmp.ret_ext
490 }
491 ; CHECK-LABEL: fcmpTrueFloat
492 ; CHECK: mov {{.*}},0x1
493
494 define internal i32 @fcmpTrueDouble(double %a, double %b) {
495 entry:
496 %cmp = fcmp true double %a, %b
497 %cmp.ret_ext = zext i1 %cmp to i32
498 ret i32 %cmp.ret_ext
499 }
500 ; CHECK-LABEL: fcmpTrueDouble
501 ; CHECK: mov {{.*}},0x1
502
503 define internal float @selectFloatVarVar(float %a, float %b) {
504 entry:
505 %cmp = fcmp olt float %a, %b
506 %cond = select i1 %cmp, float %a, float %b
507 ret float %cond
508 }
509 ; CHECK-LABEL: selectFloatVarVar
510 ; CHECK: ucomiss
511 ; CHECK: seta
512 ; CHECK: fld
513
514 define internal double @selectDoubleVarVar(double %a, double %b) {
515 entry:
516 %cmp = fcmp olt double %a, %b
517 %cond = select i1 %cmp, double %a, double %b
518 ret double %cond
519 }
520 ; CHECK-LABEL: selectDoubleVarVar
521 ; CHECK: ucomisd
522 ; CHECK: seta
523 ; CHECK: fld
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/fp.call_ret.ll ('k') | tests_lit/llvm2ice_tests/fp.convert.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698