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

Side by Side Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 205613002: Initial skeleton of Subzero. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Use non-anonymous structs so that array_lengthof works Created 6 years, 7 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/lit.cfg ('k') | tests_lit/llvm2ice_tests/alloc.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 ; RUIN: %llvm2ice --verbose none %s | FileCheck %s
2 ; RUIN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
3 ; RUN: %szdiff --llvm2ice=%llvm2ice %s | FileCheck --check-prefix=DUMP %s
4
5 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
6 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
7 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
8 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
9
10 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
11 entry:
12 ret i32 %b
13 }
14
15 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) {
16 entry:
17 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b)
18 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d)
19 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f)
20 %add = add i32 %call1, %call
21 %add3 = add i32 %add, %call2
22 ret i32 %add3
23 }
24 ; CHECK: pass64BitArg:
25 ; CHECK: push 123
26 ; CHECK-NEXT: push
27 ; CHECK-NEXT: push
28 ; CHECK-NEXT: call ignore64BitArgNoInline
29 ; CHECK: push
30 ; CHECK-NEXT: push
31 ; CHECK-NEXT: push 123
32 ; CHECK-NEXT: push
33 ; CHECK-NEXT: push
34 ; CHECK-NEXT: call ignore64BitArgNoInline
35 ; CHECK: push
36 ; CHECK-NEXT: push
37 ; CHECK-NEXT: push 123
38 ; CHECK-NEXT: push
39 ; CHECK-NEXT: push
40 ; CHECK-NEXT: call ignore64BitArgNoInline
41
42 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
43
44 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
45 entry:
46 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256)
47 ret i32 %call
48 }
49 ; CHECK: pass64BitConstArg:
50 ; CHECK: push 3735928559
51 ; CHECK-NEXT: push 305419896
52 ; CHECK-NEXT: push 123
53 ; CHECK-NEXT: push ecx
54 ; CHECK-NEXT: push eax
55 ; CHECK-NEXT: call ignore64BitArgNoInline
56
57 define internal i64 @return64BitArg(i64 %a) {
58 entry:
59 ret i64 %a
60 }
61 ; CHECK: return64BitArg:
62 ; CHECK: mov {{.*}}, dword ptr [esp+4]
63 ; CHECK: mov {{.*}}, dword ptr [esp+8]
64 ; CHECK: ret
65
66 define internal i64 @return64BitConst() {
67 entry:
68 ret i64 -2401053092306725256
69 }
70 ; CHECK: return64BitConst:
71 ; CHECK: mov eax, 305419896
72 ; CHECK: mov edx, 3735928559
73 ; CHECK: ret
74
75 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
76 entry:
77 %add = add i64 %b, %a
78 ret i64 %add
79 }
80 ; CHECK: add64BitSigned:
81 ; CHECK: add
82 ; CHECK: adc
83 ; CHECK: ret
84
85 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) {
86 entry:
87 %add = add i64 %b, %a
88 ret i64 %add
89 }
90 ; CHECK: add64BitUnsigned:
91 ; CHECK: add
92 ; CHECK: adc
93 ; CHECK: ret
94
95 define internal i64 @sub64BitSigned(i64 %a, i64 %b) {
96 entry:
97 %sub = sub i64 %a, %b
98 ret i64 %sub
99 }
100 ; CHECK: sub64BitSigned:
101 ; CHECK: sub
102 ; CHECK: sbb
103 ; CHECK: ret
104
105 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) {
106 entry:
107 %sub = sub i64 %a, %b
108 ret i64 %sub
109 }
110 ; CHECK: sub64BitUnsigned:
111 ; CHECK: sub
112 ; CHECK: sbb
113 ; CHECK: ret
114
115 define internal i64 @mul64BitSigned(i64 %a, i64 %b) {
116 entry:
117 %mul = mul i64 %b, %a
118 ret i64 %mul
119 }
120 ; CHECK: mul64BitSigned:
121 ; CHECK: imul
122 ; CHECK: imul
123 ; CHECK: mul
124 ; CHECK: add
125 ; CHECK: add
126 ; CHECK: ret
127
128 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) {
129 entry:
130 %mul = mul i64 %b, %a
131 ret i64 %mul
132 }
133 ; CHECK: mul64BitUnsigned:
134 ; CHECK: imul
135 ; CHECK: imul
136 ; CHECK: mul
137 ; CHECK: add
138 ; CHECK: add
139 ; CHECK: ret
140
141 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
142 entry:
143 %div = sdiv i64 %a, %b
144 ret i64 %div
145 }
146 ; CHECK: div64BitSigned:
147 ; CHECK: call __divdi3
148 ; CHECK: ret
149
150 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
151 entry:
152 %div = udiv i64 %a, %b
153 ret i64 %div
154 }
155 ; CHECK: div64BitUnsigned:
156 ; CHECK: call __udivdi3
157 ; CHECK: ret
158
159 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
160 entry:
161 %rem = srem i64 %a, %b
162 ret i64 %rem
163 }
164 ; CHECK: rem64BitSigned:
165 ; CHECK: call __moddi3
166 ; CHECK: ret
167
168 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
169 entry:
170 %rem = urem i64 %a, %b
171 ret i64 %rem
172 }
173 ; CHECK: rem64BitUnsigned:
174 ; CHECK: call __umoddi3
175 ; CHECK: ret
176
177 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
178 entry:
179 %shl = shl i64 %a, %b
180 ret i64 %shl
181 }
182 ; CHECK: shl64BitSigned:
183 ; CHECK: shld
184 ; CHECK: shl e
185 ; CHECK: test {{.*}}, 32
186 ; CHECK: je
187
188 define internal i64 @shl64BitUnsigned(i64 %a, i64 %b) {
189 entry:
190 %shl = shl i64 %a, %b
191 ret i64 %shl
192 }
193 ; CHECK: shl64BitUnsigned:
194 ; CHECK: shld
195 ; CHECK: shl e
196 ; CHECK: test {{.*}}, 32
197 ; CHECK: je
198
199 define internal i64 @shr64BitSigned(i64 %a, i64 %b) {
200 entry:
201 %shr = ashr i64 %a, %b
202 ret i64 %shr
203 }
204 ; CHECK: shr64BitSigned:
205 ; CHECK: shrd
206 ; CHECK: sar
207 ; CHECK: test {{.*}}, 32
208 ; CHECK: je
209 ; CHECK: sar {{.*}}, 31
210
211 define internal i64 @shr64BitUnsigned(i64 %a, i64 %b) {
212 entry:
213 %shr = lshr i64 %a, %b
214 ret i64 %shr
215 }
216 ; CHECK: shr64BitUnsigned:
217 ; CHECK: shrd
218 ; CHECK: shr
219 ; CHECK: test {{.*}}, 32
220 ; CHECK: je
221
222 define internal i64 @and64BitSigned(i64 %a, i64 %b) {
223 entry:
224 %and = and i64 %b, %a
225 ret i64 %and
226 }
227 ; CHECK: and64BitSigned:
228 ; CHECK: and
229 ; CHECK: and
230
231 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) {
232 entry:
233 %and = and i64 %b, %a
234 ret i64 %and
235 }
236 ; CHECK: and64BitUnsigned:
237 ; CHECK: and
238 ; CHECK: and
239
240 define internal i64 @or64BitSigned(i64 %a, i64 %b) {
241 entry:
242 %or = or i64 %b, %a
243 ret i64 %or
244 }
245 ; CHECK: or64BitSigned:
246 ; CHECK: or
247 ; CHECK: or
248
249 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) {
250 entry:
251 %or = or i64 %b, %a
252 ret i64 %or
253 }
254 ; CHECK: or64BitUnsigned:
255 ; CHECK: or
256 ; CHECK: or
257
258 define internal i64 @xor64BitSigned(i64 %a, i64 %b) {
259 entry:
260 %xor = xor i64 %b, %a
261 ret i64 %xor
262 }
263 ; CHECK: xor64BitSigned:
264 ; CHECK: xor
265 ; CHECK: xor
266
267 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) {
268 entry:
269 %xor = xor i64 %b, %a
270 ret i64 %xor
271 }
272 ; CHECK: xor64BitUnsigned:
273 ; CHECK: xor
274 ; CHECK: xor
275
276 define internal i32 @trunc64To32Signed(i64 %a) {
277 entry:
278 %conv = trunc i64 %a to i32
279 ret i32 %conv
280 }
281 ; CHECK: trunc64To32Signed:
282 ; CHECK: mov eax, dword ptr [esp+4]
283 ; CHECK-NEXT: ret
284
285 define internal i32 @trunc64To16Signed(i64 %a) {
286 entry:
287 %conv = trunc i64 %a to i16
288 %conv.ret_ext = sext i16 %conv to i32
289 ret i32 %conv.ret_ext
290 }
291 ; CHECK: trunc64To16Signed:
292 ; CHECK: mov eax, dword ptr [esp+4]
293 ; CHECK-NEXT: movsx eax, ax
294 ; CHECK-NEXT: ret
295
296 define internal i32 @trunc64To8Signed(i64 %a) {
297 entry:
298 %conv = trunc i64 %a to i8
299 %conv.ret_ext = sext i8 %conv to i32
300 ret i32 %conv.ret_ext
301 }
302 ; CHECK: trunc64To8Signed:
303 ; CHECK: mov eax, dword ptr [esp+4]
304 ; CHECK-NEXT: movsx eax, al
305 ; CHECK-NEXT: ret
306
307 define internal i32 @trunc64To32Unsigned(i64 %a) {
308 entry:
309 %conv = trunc i64 %a to i32
310 ret i32 %conv
311 }
312 ; CHECK: trunc64To32Unsigned:
313 ; CHECK: mov eax, dword ptr [esp+4]
314 ; CHECK-NEXT: ret
315
316 define internal i32 @trunc64To16Unsigned(i64 %a) {
317 entry:
318 %conv = trunc i64 %a to i16
319 %conv.ret_ext = zext i16 %conv to i32
320 ret i32 %conv.ret_ext
321 }
322 ; CHECK: trunc64To16Unsigned:
323 ; CHECK: mov eax, dword ptr [esp+4]
324 ; CHECK-NEXT: movzx eax, ax
325 ; CHECK-NEXT: ret
326
327 define internal i32 @trunc64To8Unsigned(i64 %a) {
328 entry:
329 %conv = trunc i64 %a to i8
330 %conv.ret_ext = zext i8 %conv to i32
331 ret i32 %conv.ret_ext
332 }
333 ; CHECK: trunc64To8Unsigned:
334 ; CHECK: mov eax, dword ptr [esp+4]
335 ; CHECK-NEXT: movzx eax, al
336 ; CHECK-NEXT: ret
337
338 define internal i32 @trunc64To1(i64 %a) {
339 entry:
340 ; %tobool = icmp ne i64 %a, 0
341 %tobool = trunc i64 %a to i1
342 %tobool.ret_ext = zext i1 %tobool to i32
343 ret i32 %tobool.ret_ext
344 }
345 ; CHECK: trunc64To1:
346 ; CHECK: mov eax, dword ptr [esp+4]
347 ; CHECK: and eax, 1
348 ; CHECK-NEXT: ret
349
350 define internal i64 @sext32To64(i32 %a) {
351 entry:
352 %conv = sext i32 %a to i64
353 ret i64 %conv
354 }
355 ; CHECK: sext32To64:
356 ; CHECK: mov
357 ; CHECK: sar {{.*}}, 31
358
359 define internal i64 @sext16To64(i32 %a) {
360 entry:
361 %a.arg_trunc = trunc i32 %a to i16
362 %conv = sext i16 %a.arg_trunc to i64
363 ret i64 %conv
364 }
365 ; CHECK: sext16To64:
366 ; CHECK: movsx
367 ; CHECK: sar {{.*}}, 31
368
369 define internal i64 @sext8To64(i32 %a) {
370 entry:
371 %a.arg_trunc = trunc i32 %a to i8
372 %conv = sext i8 %a.arg_trunc to i64
373 ret i64 %conv
374 }
375 ; CHECK: sext8To64:
376 ; CHECK: movsx
377 ; CHECK: sar {{.*}}, 31
378
379 define internal i64 @zext32To64(i32 %a) {
380 entry:
381 %conv = zext i32 %a to i64
382 ret i64 %conv
383 }
384 ; CHECK: zext32To64:
385 ; CHECK: mov
386 ; CHECK: mov {{.*}}, 0
387
388 define internal i64 @zext16To64(i32 %a) {
389 entry:
390 %a.arg_trunc = trunc i32 %a to i16
391 %conv = zext i16 %a.arg_trunc to i64
392 ret i64 %conv
393 }
394 ; CHECK: zext16To64:
395 ; CHECK: movzx
396 ; CHECK: mov {{.*}}, 0
397
398 define internal i64 @zext8To64(i32 %a) {
399 entry:
400 %a.arg_trunc = trunc i32 %a to i8
401 %conv = zext i8 %a.arg_trunc to i64
402 ret i64 %conv
403 }
404 ; CHECK: zext8To64:
405 ; CHECK: movzx
406 ; CHECK: mov {{.*}}, 0
407
408 define internal i64 @zext1To64(i32 %a) {
409 entry:
410 %a.arg_trunc = trunc i32 %a to i1
411 %conv = zext i1 %a.arg_trunc to i64
412 ret i64 %conv
413 }
414 ; CHECK: zext1To64:
415 ; CHECK: movzx
416 ; CHECK: mov {{.*}}, 0
417
418 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
419 entry:
420 %cmp = icmp eq i64 %a, %b
421 br i1 %cmp, label %if.then, label %if.end
422
423 if.then: ; preds = %entry
424 call void @func()
425 br label %if.end
426
427 if.end: ; preds = %if.then, %entry
428 %cmp1 = icmp eq i64 %c, %d
429 br i1 %cmp1, label %if.then2, label %if.end3
430
431 if.then2: ; preds = %if.end
432 call void @func()
433 br label %if.end3
434
435 if.end3: ; preds = %if.then2, %if.end
436 ret void
437 }
438 ; CHECK: icmpEq64:
439 ; CHECK: jne
440 ; CHECK: jne
441 ; CHECK: call
442 ; CHECK: jne
443 ; CHECK: jne
444 ; CHECK: call
445
446 declare void @func()
447
448 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) {
449 entry:
450 %cmp = icmp ne i64 %a, %b
451 br i1 %cmp, label %if.then, label %if.end
452
453 if.then: ; preds = %entry
454 call void @func()
455 br label %if.end
456
457 if.end: ; preds = %if.then, %entry
458 %cmp1 = icmp ne i64 %c, %d
459 br i1 %cmp1, label %if.then2, label %if.end3
460
461 if.then2: ; preds = %if.end
462 call void @func()
463 br label %if.end3
464
465 if.end3: ; preds = %if.end, %if.then2
466 ret void
467 }
468 ; CHECK: icmpNe64:
469 ; CHECK: jne
470 ; CHECK: jne
471 ; CHECK: call
472 ; CHECK: jne
473 ; CHECK: jne
474 ; CHECK: call
475
476 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) {
477 entry:
478 %cmp = icmp ugt i64 %a, %b
479 br i1 %cmp, label %if.then, label %if.end
480
481 if.then: ; preds = %entry
482 call void @func()
483 br label %if.end
484
485 if.end: ; preds = %if.then, %entry
486 %cmp1 = icmp sgt i64 %c, %d
487 br i1 %cmp1, label %if.then2, label %if.end3
488
489 if.then2: ; preds = %if.end
490 call void @func()
491 br label %if.end3
492
493 if.end3: ; preds = %if.then2, %if.end
494 ret void
495 }
496 ; CHECK: icmpGt64:
497 ; CHECK: ja
498 ; CHECK: jb
499 ; CHECK: ja
500 ; CHECK: call
501 ; CHECK: jg
502 ; CHECK: jl
503 ; CHECK: ja
504 ; CHECK: call
505
506 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) {
507 entry:
508 %cmp = icmp uge i64 %a, %b
509 br i1 %cmp, label %if.then, label %if.end
510
511 if.then: ; preds = %entry
512 call void @func()
513 br label %if.end
514
515 if.end: ; preds = %if.then, %entry
516 %cmp1 = icmp sge i64 %c, %d
517 br i1 %cmp1, label %if.then2, label %if.end3
518
519 if.then2: ; preds = %if.end
520 call void @func()
521 br label %if.end3
522
523 if.end3: ; preds = %if.end, %if.then2
524 ret void
525 }
526 ; CHECK: icmpGe64:
527 ; CHECK: ja
528 ; CHECK: jb
529 ; CHECK: jae
530 ; CHECK: call
531 ; CHECK: jg
532 ; CHECK: jl
533 ; CHECK: jae
534 ; CHECK: call
535
536 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) {
537 entry:
538 %cmp = icmp ult i64 %a, %b
539 br i1 %cmp, label %if.then, label %if.end
540
541 if.then: ; preds = %entry
542 call void @func()
543 br label %if.end
544
545 if.end: ; preds = %if.then, %entry
546 %cmp1 = icmp slt i64 %c, %d
547 br i1 %cmp1, label %if.then2, label %if.end3
548
549 if.then2: ; preds = %if.end
550 call void @func()
551 br label %if.end3
552
553 if.end3: ; preds = %if.then2, %if.end
554 ret void
555 }
556 ; CHECK: icmpLt64:
557 ; CHECK: jb
558 ; CHECK: ja
559 ; CHECK: jb
560 ; CHECK: call
561 ; CHECK: jl
562 ; CHECK: jg
563 ; CHECK: jb
564 ; CHECK: call
565
566 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) {
567 entry:
568 %cmp = icmp ule i64 %a, %b
569 br i1 %cmp, label %if.then, label %if.end
570
571 if.then: ; preds = %entry
572 call void @func()
573 br label %if.end
574
575 if.end: ; preds = %if.then, %entry
576 %cmp1 = icmp sle i64 %c, %d
577 br i1 %cmp1, label %if.then2, label %if.end3
578
579 if.then2: ; preds = %if.end
580 call void @func()
581 br label %if.end3
582
583 if.end3: ; preds = %if.end, %if.then2
584 ret void
585 }
586 ; CHECK: icmpLe64:
587 ; CHECK: jb
588 ; CHECK: ja
589 ; CHECK: jbe
590 ; CHECK: call
591 ; CHECK: jl
592 ; CHECK: jg
593 ; CHECK: jbe
594 ; CHECK: call
595
596 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) {
597 entry:
598 %cmp = icmp eq i64 %a, %b
599 %cmp.ret_ext = zext i1 %cmp to i32
600 ret i32 %cmp.ret_ext
601 }
602 ; CHECK: icmpEq64Bool:
603 ; CHECK: jne
604 ; CHECK: jne
605
606 define internal i32 @icmpNe64Bool(i64 %a, i64 %b) {
607 entry:
608 %cmp = icmp ne i64 %a, %b
609 %cmp.ret_ext = zext i1 %cmp to i32
610 ret i32 %cmp.ret_ext
611 }
612 ; CHECK: icmpNe64Bool:
613 ; CHECK: jne
614 ; CHECK: jne
615
616 define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) {
617 entry:
618 %cmp = icmp sgt i64 %a, %b
619 %cmp.ret_ext = zext i1 %cmp to i32
620 ret i32 %cmp.ret_ext
621 }
622 ; CHECK: icmpSgt64Bool:
623 ; CHECK: cmp
624 ; CHECK: jg
625 ; CHECK: jl
626 ; CHECK: cmp
627 ; CHECK: ja
628
629 define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) {
630 entry:
631 %cmp = icmp ugt i64 %a, %b
632 %cmp.ret_ext = zext i1 %cmp to i32
633 ret i32 %cmp.ret_ext
634 }
635 ; CHECK: icmpUgt64Bool:
636 ; CHECK: cmp
637 ; CHECK: ja
638 ; CHECK: jb
639 ; CHECK: cmp
640 ; CHECK: ja
641
642 define internal i32 @icmpSge64Bool(i64 %a, i64 %b) {
643 entry:
644 %cmp = icmp sge i64 %a, %b
645 %cmp.ret_ext = zext i1 %cmp to i32
646 ret i32 %cmp.ret_ext
647 }
648 ; CHECK: icmpSge64Bool:
649 ; CHECK: cmp
650 ; CHECK: jg
651 ; CHECK: jl
652 ; CHECK: cmp
653 ; CHECK: jae
654
655 define internal i32 @icmpUge64Bool(i64 %a, i64 %b) {
656 entry:
657 %cmp = icmp uge i64 %a, %b
658 %cmp.ret_ext = zext i1 %cmp to i32
659 ret i32 %cmp.ret_ext
660 }
661 ; CHECK: icmpUge64Bool:
662 ; CHECK: cmp
663 ; CHECK: ja
664 ; CHECK: jb
665 ; CHECK: cmp
666 ; CHECK: jae
667
668 define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) {
669 entry:
670 %cmp = icmp slt i64 %a, %b
671 %cmp.ret_ext = zext i1 %cmp to i32
672 ret i32 %cmp.ret_ext
673 }
674 ; CHECK: icmpSlt64Bool:
675 ; CHECK: cmp
676 ; CHECK: jl
677 ; CHECK: jg
678 ; CHECK: cmp
679 ; CHECK: jb
680
681 define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) {
682 entry:
683 %cmp = icmp ult i64 %a, %b
684 %cmp.ret_ext = zext i1 %cmp to i32
685 ret i32 %cmp.ret_ext
686 }
687 ; CHECK: icmpUlt64Bool:
688 ; CHECK: cmp
689 ; CHECK: jb
690 ; CHECK: ja
691 ; CHECK: cmp
692 ; CHECK: jb
693
694 define internal i32 @icmpSle64Bool(i64 %a, i64 %b) {
695 entry:
696 %cmp = icmp sle i64 %a, %b
697 %cmp.ret_ext = zext i1 %cmp to i32
698 ret i32 %cmp.ret_ext
699 }
700 ; CHECK: icmpSle64Bool:
701 ; CHECK: cmp
702 ; CHECK: jl
703 ; CHECK: jg
704 ; CHECK: cmp
705 ; CHECK: jbe
706
707 define internal i32 @icmpUle64Bool(i64 %a, i64 %b) {
708 entry:
709 %cmp = icmp ule i64 %a, %b
710 %cmp.ret_ext = zext i1 %cmp to i32
711 ret i32 %cmp.ret_ext
712 }
713 ; CHECK: icmpUle64Bool:
714 ; CHECK: cmp
715 ; CHECK: jb
716 ; CHECK: ja
717 ; CHECK: cmp
718 ; CHECK: jbe
719
720 define internal i64 @load64(i32 %a) {
721 entry:
722 %a.asptr = inttoptr i32 %a to i64*
723 %v0 = load i64* %a.asptr, align 1
724 ret i64 %v0
725 }
726 ; CHECK: load64:
727 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
728 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]]
729 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]+4]
730
731 define internal void @store64(i32 %a, i64 %value) {
732 entry:
733 %a.asptr = inttoptr i32 %a to i64*
734 store i64 %value, i64* %a.asptr, align 1
735 ret void
736 }
737 ; CHECK: store64:
738 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
739 ; CHECK: mov dword ptr [e[[REGISTER]]+4],
740 ; CHECK: mov dword ptr [e[[REGISTER]]],
741
742 define internal void @store64Const(i32 %a) {
743 entry:
744 %a.asptr = inttoptr i32 %a to i64*
745 store i64 -2401053092306725256, i64* %a.asptr, align 1
746 ret void
747 }
748 ; CHECK: store64Const:
749 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
750 ; CHECK: mov dword ptr [e[[REGISTER]]+4], 3735928559
751 ; CHECK: mov dword ptr [e[[REGISTER]]], 305419896
752
753 define internal i64 @select64VarVar(i64 %a, i64 %b) {
754 entry:
755 %cmp = icmp ult i64 %a, %b
756 %cond = select i1 %cmp, i64 %a, i64 %b
757 ret i64 %cond
758 }
759 ; CHECK: select64VarVar:
760 ; CHECK: cmp
761 ; CHECK: jb
762 ; CHECK: ja
763 ; CHECK: cmp
764 ; CHECK: jb
765 ; CHECK: cmp
766 ; CHECK: jne
767
768 define internal i64 @select64VarConst(i64 %a, i64 %b) {
769 entry:
770 %cmp = icmp ult i64 %a, %b
771 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256
772 ret i64 %cond
773 }
774 ; CHECK: select64VarConst:
775 ; CHECK: cmp
776 ; CHECK: jb
777 ; CHECK: ja
778 ; CHECK: cmp
779 ; CHECK: jb
780 ; CHECK: cmp
781 ; CHECK: jne
782
783 define internal i64 @select64ConstVar(i64 %a, i64 %b) {
784 entry:
785 %cmp = icmp ult i64 %a, %b
786 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b
787 ret i64 %cond
788 }
789 ; CHECK: select64ConstVar:
790 ; CHECK: cmp
791 ; CHECK: jb
792 ; CHECK: ja
793 ; CHECK: cmp
794 ; CHECK: jb
795 ; CHECK: cmp
796 ; CHECK: jne
797
798 ; ERRORS-NOT: ICE translation error
799 ; DUMP-NOT: SZ
OLDNEW
« no previous file with comments | « tests_lit/lit.cfg ('k') | tests_lit/llvm2ice_tests/alloc.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698