|
| 1 | +; ModuleID = 'mod' |
| 2 | +source_filename = "mod" |
| 3 | + |
| 4 | +@.strliteral = private unnamed_addr constant [23 x i8] c"http://www.example.com\00", align 1 |
| 5 | +@.strliteral.1 = private unnamed_addr constant [8 x i8] c"Round: \00", align 1 |
| 6 | +@fmt.int = private unnamed_addr constant [3 x i8] c"%d\00", align 1 |
| 7 | +@newline = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 |
| 8 | +@.strliteral.2 = private unnamed_addr constant [23 x i8] c"http://www.example.com\00", align 1 |
| 9 | +@.strliteral.3 = private unnamed_addr constant [9 x i8] c"Status: \00", align 1 |
| 10 | +@.strliteral.4 = private unnamed_addr constant [11 x i8] c" Success: \00", align 1 |
| 11 | +@fmt.bool = private unnamed_addr constant [3 x i8] c"%d\00", align 1 |
| 12 | + |
| 13 | +declare i32 @printf(i8*, ...) |
| 14 | + |
| 15 | +define void @process_http({ i32, i1 }* "noalias" "sret" %0, i8* %1) { |
| 16 | +entry: |
| 17 | + %2 = alloca i8*, align 8 |
| 18 | + store i8* %1, i8** %2, align 8 |
| 19 | + %url.load = load i8*, i8** %2, align 8 |
| 20 | + %eqtmp = icmp eq i8* %url.load, getelementptr inbounds ([23 x i8], [23 x i8]* @.strliteral, i32 0, i32 0) |
| 21 | + br i1 %eqtmp, label %then, label %else |
| 22 | + |
| 23 | +then: ; preds = %entry |
| 24 | + %fieldptr = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 0 |
| 25 | + store i32 200, i32* %fieldptr, align 4 |
| 26 | + %fieldptr1 = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 1 |
| 27 | + store i1 true, i1* %fieldptr1, align 1 |
| 28 | + ret void |
| 29 | + br label %merge |
| 30 | + |
| 31 | +else: ; preds = %entry |
| 32 | + br label %merge |
| 33 | + |
| 34 | +merge: ; preds = %else, %then |
| 35 | + %fieldptr2 = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 0 |
| 36 | + store i32 401, i32* %fieldptr2, align 4 |
| 37 | + %fieldptr3 = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 1 |
| 38 | + store i1 false, i1* %fieldptr3, align 1 |
| 39 | + ret void |
| 40 | +} |
| 41 | + |
| 42 | +define void @process_http_retry({ i32, i1 }* "noalias" "sret" %0, i8* %1, i32 %2) { |
| 43 | +entry: |
| 44 | + %3 = alloca i8*, align 8 |
| 45 | + store i8* %1, i8** %3, align 8 |
| 46 | + %4 = alloca i32, align 4 |
| 47 | + store i32 %2, i32* %4, align 4 |
| 48 | + %i = alloca i32, align 4 |
| 49 | + store i32 0, i32* %i, align 4 |
| 50 | + store i32 0, i32* %i, align 4 |
| 51 | + %retries.load = load i32, i32* %4, align 4 |
| 52 | + store i32 %retries.load, i32* %i, align 4 |
| 53 | + br label %loop |
| 54 | + |
| 55 | +loop: ; preds = %loopupdate, %entry |
| 56 | + %i.load = load i32, i32* %i, align 4 |
| 57 | + %gttmp = icmp sgt i32 %i.load, 0 |
| 58 | + br i1 %gttmp, label %loopbody, label %afterloop |
| 59 | + |
| 60 | +loopbody: ; preds = %loop |
| 61 | + %retries.load1 = load i32, i32* %4, align 4 |
| 62 | + %i.load2 = load i32, i32* %i, align 4 |
| 63 | + %subtmp = sub i32 %retries.load1, %i.load2 |
| 64 | + %addtmp = add i32 %subtmp, 1 |
| 65 | + %calltmp0 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.strliteral.1, i32 0, i32 0)) |
| 66 | + %calltmp1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @fmt.int, i32 0, i32 0), i32 %addtmp) |
| 67 | + %newline = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @newline, i32 0, i32 0)) |
| 68 | + %resp = alloca { i32, i1 }, align 8 |
| 69 | + %url.load = load i8*, i8** %3, align 8 |
| 70 | + call void @process_http({ i32, i1 }* %resp, i8* %url.load) |
| 71 | + %fieldptr = getelementptr { i32, i1 }, { i32, i1 }* %resp, i32 0, i32 1 |
| 72 | + %fieldload = load i1, i1* %fieldptr, align 1 |
| 73 | + br i1 %fieldload, label %then, label %else |
| 74 | + |
| 75 | +loopupdate: ; preds = %merge |
| 76 | + %i.load3 = load i32, i32* %i, align 4 |
| 77 | + %subtmp4 = sub i32 %i.load3, 1 |
| 78 | + store i32 %subtmp4, i32* %i, align 4 |
| 79 | + br label %loop |
| 80 | + |
| 81 | +afterloop: ; preds = %loop |
| 82 | + %fieldptr5 = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 0 |
| 83 | + store i32 500, i32* %fieldptr5, align 4 |
| 84 | + %fieldptr6 = getelementptr { i32, i1 }, { i32, i1 }* %0, i32 0, i32 1 |
| 85 | + store i1 false, i1* %fieldptr6, align 1 |
| 86 | + ret void |
| 87 | + |
| 88 | +then: ; preds = %loopbody |
| 89 | + %resp.load = load { i32, i1 }, { i32, i1 }* %resp, align 4 |
| 90 | + store { i32, i1 } %resp.load, { i32, i1 }* %0, align 4 |
| 91 | + ret void |
| 92 | + br label %merge |
| 93 | + |
| 94 | +else: ; preds = %loopbody |
| 95 | + br label %merge |
| 96 | + |
| 97 | +merge: ; preds = %else, %then |
| 98 | + br label %loopupdate |
| 99 | +} |
| 100 | + |
| 101 | +define void @main() { |
| 102 | +entry: |
| 103 | + %resp = alloca { i32, i1 }, align 8 |
| 104 | + call void @process_http_retry({ i32, i1 }* %resp, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.strliteral.2, i32 0, i32 0), i32 10) |
| 105 | + %fieldptr = getelementptr { i32, i1 }, { i32, i1 }* %resp, i32 0, i32 0 |
| 106 | + %fieldload = load i32, i32* %fieldptr, align 4 |
| 107 | + %fieldptr1 = getelementptr { i32, i1 }, { i32, i1 }* %resp, i32 0, i32 1 |
| 108 | + %fieldload2 = load i1, i1* %fieldptr1, align 1 |
| 109 | + %calltmp0 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.strliteral.3, i32 0, i32 0)) |
| 110 | + %calltmp1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @fmt.int, i32 0, i32 0), i32 %fieldload) |
| 111 | + %calltmp2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.strliteral.4, i32 0, i32 0)) |
| 112 | + %calltmp3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @fmt.bool, i32 0, i32 0), i1 %fieldload2) |
| 113 | + %newline = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @newline, i32 0, i32 0)) |
| 114 | + ret void |
| 115 | +} |
0 commit comments