Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 2 | ; RUN: llc -o - %s | FileCheck %s |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 3 | |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 4 | target triple = "i386-unknown-linux-gnu" |
| 5 | |
| 6 | @a = external global i32, align 4 |
| 7 | @d = external global i32*, align 4 |
| 8 | @k = external global i32**, align 4 |
| 9 | @j = external global i32***, align 4 |
| 10 | @h = external global i32, align 4 |
| 11 | @c = external global i32, align 4 |
| 12 | @i = external global i32, align 4 |
| 13 | @b = external global i32, align 4 |
| 14 | @f = external global i64, align 8 |
| 15 | @e = external global i64, align 8 |
| 16 | @g = external global i32, align 4 |
| 17 | |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 18 | declare i32 @fn1(i32 returned) optsize readnone |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 19 | |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 20 | declare i32 @main() optsize |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 21 | |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 22 | declare i32 @putchar(i32) nounwind |
| 23 | |
| 24 | define void @fn2() nounwind optsize { |
| 25 | ; CHECK-LABEL: fn2: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 26 | ; CHECK: # %bb.0: # %entry |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 27 | ; CHECK-NEXT: pushl %ebx |
| 28 | ; CHECK-NEXT: subl $8, %esp |
| 29 | ; CHECK-NEXT: movl $48, (%esp) |
| 30 | ; CHECK-NEXT: calll putchar |
| 31 | ; CHECK-NEXT: movl h, %eax |
| 32 | ; CHECK-NEXT: movl c, %ecx |
| 33 | ; CHECK-NEXT: movl j, %edx |
| 34 | ; CHECK-NEXT: movl (%edx), %edx |
| 35 | ; CHECK-NEXT: movl (%edx), %edx |
| 36 | ; CHECK-NEXT: xorl %ebx, %ebx |
| 37 | ; CHECK-NEXT: cmpl (%edx), %ecx |
| 38 | ; CHECK-NEXT: setg %bl |
| 39 | ; CHECK-NEXT: xorl %ecx, %ecx |
| 40 | ; CHECK-NEXT: cmpl %ebx, i |
| 41 | ; CHECK-NEXT: setg %cl |
| 42 | ; CHECK-NEXT: movl %ecx, b |
| 43 | ; CHECK-NEXT: xorl %edx, %edx |
| 44 | ; CHECK-NEXT: cmpl %ecx, %eax |
| 45 | ; CHECK-NEXT: setg %dl |
| 46 | ; CHECK-NEXT: xorl %edx, a |
| 47 | ; CHECK-NEXT: movl d, %eax |
| 48 | ; CHECK-NEXT: movl (%eax), %eax |
| 49 | ; CHECK-NEXT: andl %eax, e |
| 50 | ; CHECK-NEXT: sarl $31, %eax |
| 51 | ; CHECK-NEXT: andl %eax, e+4 |
| 52 | ; CHECK-NEXT: decl g |
Chandler Carruth | 52a31bf | 2017-09-07 23:54:24 +0000 | [diff] [blame] | 53 | ; CHECK-NEXT: addl $1, f |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 54 | ; CHECK-NEXT: adcl $0, f+4 |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 55 | ; CHECK-NEXT: addl $8, %esp |
| 56 | ; CHECK-NEXT: popl %ebx |
| 57 | ; CHECK-NEXT: retl |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 58 | entry: |
| 59 | %putchar = tail call i32 @putchar(i32 48) |
| 60 | %0 = load volatile i32, i32* @h, align 4 |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 61 | %1 = load i32, i32* @c, align 4, !tbaa !1 |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 62 | %2 = load i32***, i32**** @j, align 4 |
| 63 | %3 = load i32**, i32*** %2, align 4 |
| 64 | %4 = load i32*, i32** %3, align 4 |
| 65 | %5 = load i32, i32* %4, align 4 |
| 66 | %cmp = icmp sgt i32 %1, %5 |
| 67 | %conv = zext i1 %cmp to i32 |
| 68 | %6 = load i32, i32* @i, align 4 |
| 69 | %cmp1 = icmp sgt i32 %6, %conv |
| 70 | %conv2 = zext i1 %cmp1 to i32 |
| 71 | store i32 %conv2, i32* @b, align 4 |
| 72 | %cmp3 = icmp sgt i32 %0, %conv2 |
| 73 | %conv4 = zext i1 %cmp3 to i32 |
| 74 | %7 = load i32, i32* @a, align 4 |
| 75 | %or = xor i32 %7, %conv4 |
| 76 | store i32 %or, i32* @a, align 4 |
| 77 | %8 = load i32*, i32** @d, align 4 |
| 78 | %9 = load i32, i32* %8, align 4 |
| 79 | %conv6 = sext i32 %9 to i64 |
| 80 | %10 = load i64, i64* @e, align 8 |
| 81 | %and = and i64 %10, %conv6 |
| 82 | store i64 %and, i64* @e, align 8 |
| 83 | %11 = load i32, i32* @g, align 4 |
| 84 | %dec = add nsw i32 %11, -1 |
| 85 | store i32 %dec, i32* @g, align 4 |
| 86 | %12 = load i64, i64* @f, align 8 |
| 87 | %inc = add nsw i64 %12, 1 |
| 88 | store i64 %inc, i64* @f, align 8 |
| 89 | ret void |
| 90 | } |
| 91 | |
Nirav Dave | 43a4d81 | 2017-06-09 12:57:35 +0000 | [diff] [blame] | 92 | !0 = !{i32 1, !"NumRegisterParameters", i32 0} |
Chandler Carruth | 4625926 | 2017-08-25 02:32:51 +0000 | [diff] [blame] | 93 | !1 = !{!2, !2, i64 0} |
| 94 | !2 = !{!"int", !3, i64 0} |
| 95 | !3 = !{!"omnipotent char", !4, i64 0} |
| 96 | !4 = !{!"Simple C/C++ TBAA"} |
| 97 | !5 = !{!6, !6, i64 0} |
| 98 | !6 = !{!"any pointer", !3, i64 0} |
| 99 | !7 = !{!8, !8, i64 0} |
| 100 | !8 = !{!"long long", !3, i64 0} |