fix(0109): hoist all per-instruction allocas to the function entry block

An alloca built at its use site re-executes on every pass through that
block, and LLVM reclaims allocas only at ret — so loop-body locals,
nested-loop index slots, and emitter spill temps (ig.tmp, sret slots, ABI
coercion temps, byval materialization) grew the stack per iteration and
long loops segfaulted on stack exhaustion.

New LLVMEmitter.buildEntryAlloca inserts after existing entry-block
allocas and restores the builder position; every LLVMBuildAlloca site
reachable during instruction emission now routes through it.
Initialization stores stay at the use site (per-iteration re-init is
unchanged), and entry slots become mem2reg-promotable. The 35 .ir
snapshot diffs are pure alloca position moves (type multisets verified
identical per file).

Regression: examples/0047-basic-loop-local-stack-reuse.sx (segfaulted
pre-fix on both the 1M-iteration body-local loop and the 3M-iteration
nested loop).
This commit is contained in:
agra
2026-06-10 17:27:11 +03:00
parent e81780e32e
commit 878c4226a6
43 changed files with 1661 additions and 1468 deletions

View File

@@ -0,0 +1,26 @@
// Loop-body locals reuse one stack slot per frame: a body-declared local
// (and every compiler temp) must not grow the stack per iteration, so
// million-iteration loops run in constant stack. Covers body locals,
// nested loops (the inner loop's hidden index slot), and element reads.
// Regression (issue 0109): allocas were emitted at their use site, so each
// iteration re-executed them — LLVM only reclaims allocas at `ret`, and
// these loops segfaulted on stack exhaustion.
#import "modules/std.sx";
main :: () -> s32 {
sum := 0;
for 0..1000000: (i) {
buf : [128]s64 = ---;
buf[0] = i;
sum += buf[0];
}
print("sum={}\n", sum);
n := 0;
for 0..3000000: (i) {
for 0..1: (j) { n += 1; }
}
print("n={}\n", n);
0
}

View File

@@ -458,6 +458,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -469,15 +474,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -489,7 +490,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -547,6 +547,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -558,18 +569,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -577,9 +584,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -594,7 +599,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -607,7 +611,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -620,7 +623,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -641,12 +643,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -699,6 +699,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -718,11 +730,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -730,7 +740,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -745,19 +754,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -770,20 +775,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -819,7 +820,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -847,6 +847,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -870,7 +871,6 @@ while.hdr.241: ; preds = %if.merge.246, %entr
while.body.242: ; preds = %while.hdr.241
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -911,6 +911,13 @@ if.merge.246: ; preds = %if.else.245, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -931,11 +938,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -952,11 +957,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -973,11 +976,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -990,7 +991,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1012,6 +1012,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1023,40 +1030,33 @@ if.then.239: ; preds = %entry
if.merge.240: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.247
@@ -1167,6 +1167,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.40, i64 3 }, ptr %allocaN, align 8
@@ -1256,7 +1263,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1276,7 +1282,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1285,7 +1290,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1305,7 +1309,6 @@ match.arm.44: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.169 [
i64 37, label %dispatch.case.170
i64 38, label %dispatch.case.171
@@ -1322,7 +1325,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.180 [
i64 35, label %dispatch.case.181
i64 55, label %dispatch.case.182
@@ -1333,7 +1335,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.200 [
i64 36, label %dispatch.case.201
i64 48, label %dispatch.case.202
@@ -1343,7 +1344,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.214 [
i64 18, label %dispatch.case.215
i64 22, label %dispatch.case.216
@@ -2510,6 +2510,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.159, i64 15 }, { ptr, i64 } { ptr @str.160, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2574,7 +2576,6 @@ fv.default: ; preds = %if.merge.112
fv.case: ; preds = %if.merge.112
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2594,7 +2595,6 @@ fv.case20: ; preds = %if.merge.112
fv.case24: ; preds = %if.merge.112
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2889,6 +2889,7 @@ fv.case17: ; preds = %if.merge.132
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.197, i64 5 }, { ptr, i64 } { ptr @str.198, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2963,7 +2964,6 @@ fv.case17: ; preds = %if.merge.137
fv.case20: ; preds = %if.merge.137
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3056,6 +3056,7 @@ fv.case20: ; preds = %if.merge.142
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.215, i64 17 }, { ptr, i64 } { ptr @str.216, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3120,7 +3121,6 @@ fv.default: ; preds = %if.merge.147
fv.case: ; preds = %if.merge.147
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3146,6 +3146,7 @@ fv.case23: ; preds = %if.merge.147
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.225, i64 7 }, { ptr, i64 } { ptr @str.226, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3208,7 +3209,6 @@ fv.default: ; preds = %if.merge.152
fv.case: ; preds = %if.merge.152
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3518,6 +3518,11 @@ if.merge.176: ; preds = %if.then.175, %entry
define internal { ptr, i64 } @enum_to_string__Shape(ptr %0, { i64, [8 x i8] } %1) #0 {
entry:
%alloca = alloca { i64, [8 x i8] }, align 8
%fv.utmp = alloca { i64, [8 x i8] }, align 8
%fv.utmp7 = alloca { i64, [8 x i8] }, align 8
%ba.tmp = alloca { float, float }, align 8
%allocaN = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, [8 x i8] } %1, ptr %alloca, align 8
%load = load { i64, [8 x i8] }, ptr %alloca, align 8
%etag = extractvalue { i64, [8 x i8] } %load, 0
@@ -3552,11 +3557,9 @@ if.merge.178: ; preds = %if.then.177, %fv.me
fv.merge: ; preds = %fv.default, %fv.case11, %fv.case6, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val10, %fv.case6 ], [ { i64 17, i64 0 }, %fv.case11 ], [ undef, %fv.default ]
%allocaN = alloca { i64, i64 }, align 8
store { i64, i64 } %fv.phi, ptr %allocaN, align 8
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
@@ -3567,7 +3570,6 @@ fv.default: ; preds = %entry
br label %fv.merge
fv.case: ; preds = %entry
%fv.utmp = alloca { i64, [8 x i8] }, align 8
store { i64, [8 x i8] } %loadN, ptr %fv.utmp, align 8
%fv.pp = getelementptr inbounds { i64, [8 x i8] }, ptr %fv.utmp, i32 0, i32 1
%fv.field = load float, ptr %fv.pp, align 4
@@ -3577,11 +3579,9 @@ fv.case: ; preds = %entry
br label %fv.merge
fv.case6: ; preds = %entry
%fv.utmp7 = alloca { i64, [8 x i8] }, align 8
store { i64, [8 x i8] } %loadN, ptr %fv.utmp7, align 8
%fv.pp8 = getelementptr inbounds { i64, [8 x i8] }, ptr %fv.utmp7, i32 0, i32 1
%fv.field9 = load { float, float }, ptr %fv.pp8, align 4
%ba.tmp = alloca { float, float }, align 8
store { float, float } %fv.field9, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val10 = insertvalue { i64, i64 } { i64 42, i64 undef }, i64 %ba.p2i, 1
@@ -3595,6 +3595,7 @@ fv.case11: ; preds = %entry
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.282, i64 1 }, ptr %allocaN, align 8
@@ -3627,7 +3628,6 @@ if.merge.188: ; preds = %if.then.187, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3645,6 +3645,8 @@ if.merge.188: ; preds = %if.then.187, %while
define internal { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [2 x { i64, i64 }], align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [2 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.285, i64 1 }, ptr %allocaN, align 8
@@ -3677,11 +3679,9 @@ if.merge.193: ; preds = %if.then.192, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [2 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
store [2 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [2 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3698,6 +3698,8 @@ if.merge.193: ; preds = %if.then.192, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.288, i64 1 }, ptr %allocaN, align 8
@@ -3730,11 +3732,9 @@ if.merge.198: ; preds = %if.then.197, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3751,6 +3751,7 @@ if.merge.198: ; preds = %if.then.197, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.291, i64 1 }, ptr %allocaN, align 8
@@ -3788,7 +3789,6 @@ if.merge.207: ; preds = %if.then.206, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3805,6 +3805,7 @@ if.merge.207: ; preds = %if.then.206, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.294, i64 1 }, ptr %allocaN, align 8
@@ -3842,7 +3843,6 @@ if.merge.212: ; preds = %if.then.211, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -426,6 +426,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -437,15 +442,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -457,7 +458,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -515,6 +515,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -526,18 +537,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -545,9 +552,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -562,7 +567,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -575,7 +579,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -588,7 +591,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -609,12 +611,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -667,6 +667,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -686,11 +698,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -698,7 +708,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -713,19 +722,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -738,20 +743,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -787,7 +788,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -815,6 +815,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -838,7 +839,6 @@ while.hdr.224: ; preds = %if.merge.229, %entr
while.body.225: ; preds = %while.hdr.224
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -879,6 +879,13 @@ if.merge.229: ; preds = %if.else.228, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -899,11 +906,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -920,11 +925,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -941,11 +944,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -958,7 +959,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -980,6 +980,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -991,40 +998,33 @@ if.then.222: ; preds = %entry
if.merge.223: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.230
@@ -1135,6 +1135,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.40, i64 3 }, ptr %allocaN, align 8
@@ -1219,7 +1226,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1239,7 +1245,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1248,7 +1253,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1267,7 +1271,6 @@ match.arm.44: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.163 [
i64 37, label %dispatch.case.164
i64 38, label %dispatch.case.165
@@ -1283,7 +1286,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.171 [
i64 35, label %dispatch.case.172
i64 53, label %dispatch.case.173
@@ -1293,7 +1295,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.185 [
i64 36, label %dispatch.case.186
i64 46, label %dispatch.case.187
@@ -1303,7 +1304,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.199 [
i64 18, label %dispatch.case.200
i64 22, label %dispatch.case.201
@@ -2397,6 +2397,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.151, i64 15 }, { ptr, i64 } { ptr @str.152, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2461,7 +2463,6 @@ fv.default: ; preds = %if.merge.111
fv.case: ; preds = %if.merge.111
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2481,7 +2482,6 @@ fv.case20: ; preds = %if.merge.111
fv.case24: ; preds = %if.merge.111
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2776,6 +2776,7 @@ fv.case17: ; preds = %if.merge.131
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.189, i64 5 }, { ptr, i64 } { ptr @str.190, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2850,7 +2851,6 @@ fv.case17: ; preds = %if.merge.136
fv.case20: ; preds = %if.merge.136
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2943,6 +2943,7 @@ fv.case20: ; preds = %if.merge.141
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.207, i64 17 }, { ptr, i64 } { ptr @str.208, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3007,7 +3008,6 @@ fv.default: ; preds = %if.merge.146
fv.case: ; preds = %if.merge.146
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3033,6 +3033,7 @@ fv.case23: ; preds = %if.merge.146
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.217, i64 7 }, { ptr, i64 } { ptr @str.218, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3095,7 +3096,6 @@ fv.default: ; preds = %if.merge.151
fv.case: ; preds = %if.merge.151
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3326,6 +3326,7 @@ if.merge.169: ; preds = %if.then.168, %entry
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.259, i64 1 }, ptr %allocaN, align 8
@@ -3358,7 +3359,6 @@ if.merge.178: ; preds = %if.then.177, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3376,6 +3376,8 @@ if.merge.178: ; preds = %if.then.177, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.262, i64 1 }, ptr %allocaN, align 8
@@ -3408,11 +3410,9 @@ if.merge.183: ; preds = %if.then.182, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3429,6 +3429,7 @@ if.merge.183: ; preds = %if.then.182, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.265, i64 1 }, ptr %allocaN, align 8
@@ -3466,7 +3467,6 @@ if.merge.192: ; preds = %if.then.191, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3483,6 +3483,7 @@ if.merge.192: ; preds = %if.then.191, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.268, i64 1 }, ptr %allocaN, align 8
@@ -3520,7 +3521,6 @@ if.merge.197: ; preds = %if.then.196, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -390,6 +390,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -401,15 +406,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -421,7 +422,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -479,6 +479,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -490,18 +501,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -509,9 +516,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -526,7 +531,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -539,7 +543,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -552,7 +555,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -573,12 +575,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -631,6 +631,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -650,11 +662,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -662,7 +672,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -677,19 +686,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -702,20 +707,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -751,7 +752,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -779,6 +779,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -802,7 +803,6 @@ while.hdr.210: ; preds = %if.merge.215, %entr
while.body.211: ; preds = %while.hdr.210
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -843,6 +843,13 @@ if.merge.215: ; preds = %if.else.214, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -863,11 +870,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -884,11 +889,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -905,11 +908,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -922,7 +923,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -944,6 +944,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -955,40 +962,33 @@ if.then.208: ; preds = %entry
if.merge.209: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.216
@@ -1099,6 +1099,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1180,7 +1186,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1200,7 +1205,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1209,7 +1213,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1235,7 +1238,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 44, label %dispatch.case.153
@@ -1246,7 +1248,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.171 [
i64 36, label %dispatch.case.172
i64 42, label %dispatch.case.173
@@ -1256,7 +1257,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.185 [
i64 18, label %dispatch.case.186
i64 22, label %dispatch.case.187
@@ -2154,6 +2154,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.114, i64 15 }, { ptr, i64 } { ptr @str.115, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2218,7 +2220,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2238,7 +2239,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2533,6 +2533,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.152, i64 5 }, { ptr, i64 } { ptr @str.153, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2607,7 +2608,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2700,6 +2700,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.170, i64 17 }, { ptr, i64 } { ptr @str.171, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2764,7 +2765,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2790,6 +2790,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.180, i64 7 }, { ptr, i64 } { ptr @str.181, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2852,7 +2853,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2869,6 +2869,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.188, i64 1 }, ptr %allocaN, align 8
@@ -2901,7 +2902,6 @@ if.merge.159: ; preds = %if.then.158, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2919,6 +2919,8 @@ if.merge.159: ; preds = %if.then.158, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.191, i64 1 }, ptr %allocaN, align 8
@@ -2951,11 +2953,9 @@ if.merge.164: ; preds = %if.then.163, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2972,6 +2972,8 @@ if.merge.164: ; preds = %if.then.163, %while
define internal { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [3 x { i64, i64 }], align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [3 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.194, i64 1 }, ptr %allocaN, align 8
@@ -3004,11 +3006,9 @@ if.merge.169: ; preds = %if.then.168, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [3 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
store [3 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [3 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3025,6 +3025,7 @@ if.merge.169: ; preds = %if.then.168, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.197, i64 1 }, ptr %allocaN, align 8
@@ -3062,7 +3063,6 @@ if.merge.178: ; preds = %if.then.177, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3079,6 +3079,7 @@ if.merge.178: ; preds = %if.then.177, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.200, i64 1 }, ptr %allocaN, align 8
@@ -3116,7 +3117,6 @@ if.merge.183: ; preds = %if.then.182, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,2 @@
sum=499999500000
n=3000000

View File

@@ -370,6 +370,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -381,15 +386,11 @@ if.then.19: ; preds = %entry
if.merge.20: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.21
@@ -401,7 +402,6 @@ while.hdr.21: ; preds = %if.merge.25, %if.me
while.body.22: ; preds = %while.hdr.21
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -459,6 +459,17 @@ if.merge.27: ; preds = %if.then.26, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -470,18 +481,14 @@ if.then.61: ; preds = %entry
if.merge.62: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.71
while.hdr.71: ; preds = %while.exit.82, %if.merge.62
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -489,9 +496,7 @@ while.hdr.71: ; preds = %while.exit.82, %if.
br i1 %icmpN, label %or.merge.75, label %or.rhs.74
while.body.72: ; preds = %or.merge.79
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.80
@@ -506,7 +511,6 @@ while.exit.73: ; preds = %or.merge.79
or.rhs.74: ; preds = %while.hdr.71
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -519,7 +523,6 @@ or.merge.75: ; preds = %or.rhs.74, %while.h
or.rhs.76: ; preds = %or.merge.75
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -532,7 +535,6 @@ or.merge.77: ; preds = %or.rhs.76, %or.merg
or.rhs.78: ; preds = %or.merge.77
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -553,12 +555,10 @@ while.body.81: ; preds = %while.hdr.80
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -611,6 +611,18 @@ if.merge.85: ; preds = %if.else.84, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -630,11 +642,9 @@ if.else.90: ; preds = %entry
if.merge.91: ; preds = %if.else.90, %if.then.89
%bp = phi double [ %fsub, %if.then.89 ], [ %loadN, %if.else.90 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -642,7 +652,6 @@ if.merge.91: ; preds = %if.else.90, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -657,19 +666,15 @@ if.then.92: ; preds = %if.merge.91
if.merge.93: ; preds = %if.then.92, %if.merge.91
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.94, label %if.else.95
@@ -682,20 +687,16 @@ if.else.95: ; preds = %if.merge.93
if.merge.96: ; preds = %if.else.95, %if.then.94
%bpN = phi i64 [ 1, %if.then.94 ], [ 0, %if.else.95 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.97, label %if.merge.98
@@ -731,7 +732,6 @@ if.merge.98: ; preds = %if.then.97, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -759,6 +759,7 @@ if.merge.98: ; preds = %if.then.97, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -782,7 +783,6 @@ while.hdr.208: ; preds = %if.merge.213, %entr
while.body.209: ; preds = %while.hdr.208
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -823,6 +823,13 @@ if.merge.213: ; preds = %if.else.212, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -843,11 +850,9 @@ if.merge.64: ; preds = %if.then.63, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -864,11 +869,9 @@ if.merge.66: ; preds = %if.then.65, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -885,11 +888,9 @@ if.merge.68: ; preds = %if.then.67, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -902,7 +903,6 @@ if.then.69: ; preds = %if.merge.68
br label %if.merge.70
if.merge.70: ; preds = %if.then.69, %if.merge.68
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -924,6 +924,13 @@ if.merge.70: ; preds = %if.then.69, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -935,40 +942,33 @@ if.then.206: ; preds = %entry
if.merge.207: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.214
@@ -1079,6 +1079,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1158,7 +1164,6 @@ match.arm.44: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.58, label %if.else.59
match.arm.45: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1178,7 +1183,6 @@ match.arm.46: ; preds = %entry
match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.86, label %fN.unbox.87
@@ -1187,7 +1191,6 @@ match.arm.48: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.100 [
i64 19, label %dispatch.case.101
i64 20, label %dispatch.case.102
@@ -1213,7 +1216,6 @@ match.arm.52: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.156 [
i64 35, label %dispatch.case.157
i64 44, label %dispatch.case.158
@@ -1223,7 +1225,6 @@ match.arm.53: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.170 [
i64 36, label %dispatch.case.171
i64 42, label %dispatch.case.172
@@ -1233,7 +1234,6 @@ match.arm.54: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.184 [
i64 18, label %dispatch.case.185
i64 22, label %dispatch.case.186
@@ -1871,6 +1871,7 @@ if.merge.41: ; preds = %if.then.40, %while.
define i32 @main() #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca float, align 4
store i64 42, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp ne i64 %load, 0
@@ -1881,7 +1882,6 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%allocaN = alloca float, align 4
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp ne i64 %loadN, 0
br i1 %icmpN, label %if.then.2, label %if.else.3
@@ -1973,6 +1973,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.100, i64 15 }, { ptr, i64 } { ptr @str.101, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2037,7 +2039,6 @@ fv.default: ; preds = %if.merge.114
fv.case: ; preds = %if.merge.114
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2057,7 +2058,6 @@ fv.case20: ; preds = %if.merge.114
fv.case24: ; preds = %if.merge.114
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2352,6 +2352,7 @@ fv.case17: ; preds = %if.merge.134
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.138, i64 5 }, { ptr, i64 } { ptr @str.139, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2426,7 +2427,6 @@ fv.case17: ; preds = %if.merge.139
fv.case20: ; preds = %if.merge.139
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2519,6 +2519,7 @@ fv.case20: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.156, i64 17 }, { ptr, i64 } { ptr @str.157, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2583,7 +2584,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2609,6 +2609,7 @@ fv.case23: ; preds = %if.merge.149
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.166, i64 7 }, { ptr, i64 } { ptr @str.167, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2671,7 +2672,6 @@ fv.default: ; preds = %if.merge.154
fv.case: ; preds = %if.merge.154
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2688,6 +2688,7 @@ fv.case17: ; preds = %if.merge.154
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.174, i64 1 }, ptr %allocaN, align 8
@@ -2720,7 +2721,6 @@ if.merge.163: ; preds = %if.then.162, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2738,6 +2738,8 @@ if.merge.163: ; preds = %if.then.162, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.177, i64 1 }, ptr %allocaN, align 8
@@ -2770,11 +2772,9 @@ if.merge.168: ; preds = %if.then.167, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2791,6 +2791,7 @@ if.merge.168: ; preds = %if.then.167, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.180, i64 1 }, ptr %allocaN, align 8
@@ -2828,7 +2829,6 @@ if.merge.177: ; preds = %if.then.176, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2845,6 +2845,7 @@ if.merge.177: ; preds = %if.then.176, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.183, i64 1 }, ptr %allocaN, align 8
@@ -2882,7 +2883,6 @@ if.merge.182: ; preds = %if.then.181, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -371,6 +371,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -382,15 +387,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -402,7 +403,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -460,6 +460,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -471,18 +482,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -490,9 +497,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -507,7 +512,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -520,7 +524,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -533,7 +536,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -554,12 +556,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -612,6 +612,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -631,11 +643,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -643,7 +653,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -658,19 +667,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -683,20 +688,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -732,7 +733,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -760,6 +760,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -783,7 +784,6 @@ while.hdr.203: ; preds = %if.merge.208, %entr
while.body.204: ; preds = %while.hdr.203
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -824,6 +824,13 @@ if.merge.208: ; preds = %if.else.207, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -844,11 +851,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -865,11 +870,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -886,11 +889,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -903,7 +904,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -925,6 +925,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -936,40 +943,33 @@ if.then.201: ; preds = %entry
if.merge.202: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.209
@@ -1080,6 +1080,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1159,7 +1165,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1179,7 +1184,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1188,7 +1192,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1214,7 +1217,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 43, label %dispatch.case.153
@@ -1224,7 +1226,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.165 [
i64 36, label %dispatch.case.166
i64 41, label %dispatch.case.167
@@ -1234,7 +1235,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.179 [
i64 18, label %dispatch.case.180
i64 22, label %dispatch.case.181
@@ -2029,6 +2029,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.101, i64 15 }, { ptr, i64 } { ptr @str.102, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2093,7 +2095,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2113,7 +2114,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2408,6 +2408,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.139, i64 5 }, { ptr, i64 } { ptr @str.140, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2482,7 +2483,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2575,6 +2575,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.157, i64 17 }, { ptr, i64 } { ptr @str.158, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2639,7 +2640,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2665,6 +2665,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.167, i64 7 }, { ptr, i64 } { ptr @str.168, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2727,7 +2728,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2744,6 +2744,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.175, i64 1 }, ptr %allocaN, align 8
@@ -2776,7 +2777,6 @@ if.merge.158: ; preds = %if.then.157, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2794,6 +2794,8 @@ if.merge.158: ; preds = %if.then.157, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.178, i64 1 }, ptr %allocaN, align 8
@@ -2826,11 +2828,9 @@ if.merge.163: ; preds = %if.then.162, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2847,6 +2847,7 @@ if.merge.163: ; preds = %if.then.162, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.181, i64 1 }, ptr %allocaN, align 8
@@ -2884,7 +2885,6 @@ if.merge.172: ; preds = %if.then.171, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2901,6 +2901,7 @@ if.merge.172: ; preds = %if.then.171, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.184, i64 1 }, ptr %allocaN, align 8
@@ -2938,7 +2939,6 @@ if.merge.177: ; preds = %if.then.176, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -508,6 +508,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -519,15 +524,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -539,7 +540,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -597,6 +597,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -608,18 +619,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -627,9 +634,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -644,7 +649,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -657,7 +661,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -670,7 +673,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -691,12 +693,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -749,6 +749,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -768,11 +780,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -780,7 +790,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -795,19 +804,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -820,20 +825,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -869,7 +870,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -897,6 +897,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -920,7 +921,6 @@ while.hdr.270: ; preds = %if.merge.275, %entr
while.body.271: ; preds = %while.hdr.270
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -961,6 +961,13 @@ if.merge.275: ; preds = %if.else.274, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -981,11 +988,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1002,11 +1007,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1023,11 +1026,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1040,7 +1041,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1062,6 +1062,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1073,40 +1080,33 @@ if.then.268: ; preds = %entry
if.merge.269: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.276
@@ -1217,6 +1217,14 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1312,7 +1320,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1332,7 +1339,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1341,7 +1347,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1364,7 +1369,6 @@ match.arm.44: ; preds = %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.187 [
i64 63, label %dispatch.case.188
]
@@ -1376,7 +1380,6 @@ match.arm.46: ; preds = %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.192 [
i64 40, label %dispatch.case.193
]
@@ -1385,7 +1388,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.200 [
i64 35, label %dispatch.case.201
i64 37, label %dispatch.case.202
@@ -1397,7 +1399,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.226 [
i64 36, label %dispatch.case.227
i64 50, label %dispatch.case.228
@@ -1407,7 +1408,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw36 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw36, label %dispatch.default.240 [
i64 18, label %dispatch.case.241
i64 22, label %dispatch.case.242
@@ -3021,6 +3021,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.160, i64 15 }, { ptr, i64 } { ptr @str.161, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3085,7 +3087,6 @@ fv.default: ; preds = %if.merge.115
fv.case: ; preds = %if.merge.115
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3105,7 +3106,6 @@ fv.case20: ; preds = %if.merge.115
fv.case24: ; preds = %if.merge.115
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -3400,6 +3400,7 @@ fv.case17: ; preds = %if.merge.135
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.198, i64 5 }, { ptr, i64 } { ptr @str.199, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3474,7 +3475,6 @@ fv.case17: ; preds = %if.merge.140
fv.case20: ; preds = %if.merge.140
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3567,6 +3567,7 @@ fv.case20: ; preds = %if.merge.145
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.216, i64 17 }, { ptr, i64 } { ptr @str.217, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3631,7 +3632,6 @@ fv.default: ; preds = %if.merge.150
fv.case: ; preds = %if.merge.150
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3657,6 +3657,7 @@ fv.case23: ; preds = %if.merge.150
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.226, i64 7 }, { ptr, i64 } { ptr @str.227, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3719,7 +3720,6 @@ fv.default: ; preds = %if.merge.155
fv.case: ; preds = %if.merge.155
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3736,6 +3736,7 @@ fv.case17: ; preds = %if.merge.155
define internal { ptr, i64 } @struct_to_string__Mat4(ptr %0, { [16 x float] } %1) #0 {
entry:
%alloca = alloca { [16 x float] }, align 8
%ba.tmp = alloca [16 x float], align 4
store { [16 x float] } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.234, i64 4 }, { ptr, i64 } { ptr @str.235, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3797,7 +3798,6 @@ fv.default: ; preds = %if.merge.160
fv.case: ; preds = %if.merge.160
%fv.field = extractvalue { [16 x float] } %loadN, 0
%ba.tmp = alloca [16 x float], align 4
store [16 x float] %fv.field, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i, 1
@@ -3887,6 +3887,7 @@ fv.case17: ; preds = %if.merge.165
define internal { ptr, i64 } @struct_to_string__Vec__3__f32(ptr %0, { <3 x float> } %1) #0 {
entry:
%alloca = alloca { <3 x float> }, align 16
%ba.tmp = alloca <3 x float>, align 16
store { <3 x float> } %1, ptr %alloca, align 16
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.249, i64 11 }, { ptr, i64 } { ptr @str.250, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3948,7 +3949,6 @@ fv.default: ; preds = %if.merge.170
fv.case: ; preds = %if.merge.170
%fv.field = extractvalue { <3 x float> } %loadN, 0
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %fv.field, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
@@ -3959,6 +3959,7 @@ fv.case: ; preds = %if.merge.170
define internal { ptr, i64 } @struct_to_string__Vec3(ptr %0, { <3 x float> } %1) #0 {
entry:
%alloca = alloca { <3 x float> }, align 16
%ba.tmp = alloca <3 x float>, align 16
store { <3 x float> } %1, ptr %alloca, align 16
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.256, i64 4 }, { ptr, i64 } { ptr @str.257, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -4020,7 +4021,6 @@ fv.default: ; preds = %if.merge.175
fv.case: ; preds = %if.merge.175
%fv.field = extractvalue { <3 x float> } %loadN, 0
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %fv.field, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
@@ -4185,6 +4185,10 @@ fv.case17: ; preds = %if.merge.185
define internal { ptr, i64 } @enum_to_string__Sx__f32(ptr %0, { i64, [4 x i8] } %1) #0 {
entry:
%alloca = alloca { i64, [4 x i8] }, align 8
%fv.utmp = alloca { i64, [4 x i8] }, align 8
%fv.utmp7 = alloca { i64, [4 x i8] }, align 8
%allocaN = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, [4 x i8] } %1, ptr %alloca, align 8
%load = load { i64, [4 x i8] }, ptr %alloca, align 8
%etag = extractvalue { i64, [4 x i8] } %load, 0
@@ -4218,11 +4222,9 @@ if.merge.190: ; preds = %if.then.189, %fv.me
fv.merge: ; preds = %fv.default, %fv.case6, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val10, %fv.case6 ], [ undef, %fv.default ]
%allocaN = alloca { i64, i64 }, align 8
store { i64, i64 } %fv.phi, ptr %allocaN, align 8
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
@@ -4233,7 +4235,6 @@ fv.default: ; preds = %entry
br label %fv.merge
fv.case: ; preds = %entry
%fv.utmp = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %loadN, ptr %fv.utmp, align 8
%fv.pp = getelementptr inbounds { i64, [4 x i8] }, ptr %fv.utmp, i32 0, i32 1
%fv.field = load i32, ptr %fv.pp, align 4
@@ -4242,7 +4243,6 @@ fv.case: ; preds = %entry
br label %fv.merge
fv.case6: ; preds = %entry
%fv.utmp7 = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %loadN, ptr %fv.utmp7, align 8
%fv.pp8 = getelementptr inbounds { i64, [4 x i8] }, ptr %fv.utmp7, i32 0, i32 1
%fv.field9 = load float, ptr %fv.pp8, align 4
@@ -4306,6 +4306,7 @@ if.merge.198: ; preds = %if.then.197, %while
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.288, i64 1 }, ptr %allocaN, align 8
@@ -4338,7 +4339,6 @@ if.merge.209: ; preds = %if.then.208, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -4356,6 +4356,7 @@ if.merge.209: ; preds = %if.then.208, %while
define internal { ptr, i64 } @array_to_string__AR_16_f32(ptr %0, [16 x float] %1) #0 {
entry:
%alloca = alloca [16 x float], align 4
%ig.tmp = alloca [16 x float], align 4
store [16 x float] %1, ptr %alloca, align 4
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.291, i64 1 }, ptr %allocaN, align 8
@@ -4388,7 +4389,6 @@ if.merge.214: ; preds = %if.then.213, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [16 x float], ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [16 x float], align 4
store [16 x float] %loadN, ptr %ig.tmp, align 4
%ig.ptr = getelementptr [16 x float], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load float, ptr %ig.ptr, align 4
@@ -4408,6 +4408,8 @@ if.merge.214: ; preds = %if.then.213, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.294, i64 1 }, ptr %allocaN, align 8
@@ -4440,11 +4442,9 @@ if.merge.219: ; preds = %if.then.218, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -4461,6 +4461,7 @@ if.merge.219: ; preds = %if.then.218, %while
define internal { ptr, i64 } @array_to_string__AR_5_f32(ptr %0, [5 x float] %1) #0 {
entry:
%alloca = alloca [5 x float], align 4
%ig.tmp = alloca [5 x float], align 4
store [5 x float] %1, ptr %alloca, align 4
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.297, i64 1 }, ptr %allocaN, align 8
@@ -4493,7 +4494,6 @@ if.merge.224: ; preds = %if.then.223, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [5 x float], ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [5 x float], align 4
store [5 x float] %loadN, ptr %ig.tmp, align 4
%ig.ptr = getelementptr [5 x float], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load float, ptr %ig.ptr, align 4
@@ -4513,6 +4513,7 @@ if.merge.224: ; preds = %if.then.223, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.300, i64 1 }, ptr %allocaN, align 8
@@ -4550,7 +4551,6 @@ if.merge.233: ; preds = %if.then.232, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -4567,6 +4567,7 @@ if.merge.233: ; preds = %if.then.232, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.303, i64 1 }, ptr %allocaN, align 8
@@ -4604,7 +4605,6 @@ if.merge.238: ; preds = %if.then.237, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -381,6 +381,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -392,15 +397,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -412,7 +413,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -470,6 +470,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -481,18 +492,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -500,9 +507,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -517,7 +522,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -530,7 +534,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -543,7 +546,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -564,12 +566,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -622,6 +622,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -641,11 +653,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -653,7 +663,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -668,19 +677,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -693,20 +698,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -742,7 +743,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -770,6 +770,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -793,7 +794,6 @@ while.hdr.204: ; preds = %if.merge.209, %entr
while.body.205: ; preds = %while.hdr.204
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -834,6 +834,13 @@ if.merge.209: ; preds = %if.else.208, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -854,11 +861,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -875,11 +880,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -896,11 +899,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -913,7 +914,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -935,6 +935,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -946,40 +953,33 @@ if.then.202: ; preds = %entry
if.merge.203: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.210
@@ -1090,6 +1090,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1170,7 +1176,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1190,7 +1195,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1199,7 +1203,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1225,7 +1228,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 46, label %dispatch.case.153
@@ -1235,7 +1237,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.165 [
i64 36, label %dispatch.case.166
i64 44, label %dispatch.case.167
@@ -1245,7 +1246,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.179 [
i64 18, label %dispatch.case.180
i64 22, label %dispatch.case.181
@@ -2122,6 +2122,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.108, i64 15 }, { ptr, i64 } { ptr @str.109, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2186,7 +2188,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2206,7 +2207,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2501,6 +2501,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.146, i64 5 }, { ptr, i64 } { ptr @str.147, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2575,7 +2576,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2668,6 +2668,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.164, i64 17 }, { ptr, i64 } { ptr @str.165, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2732,7 +2733,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2758,6 +2758,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.174, i64 7 }, { ptr, i64 } { ptr @str.175, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2820,7 +2821,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2837,6 +2837,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.182, i64 1 }, ptr %allocaN, align 8
@@ -2869,7 +2870,6 @@ if.merge.158: ; preds = %if.then.157, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2887,6 +2887,8 @@ if.merge.158: ; preds = %if.then.157, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.185, i64 1 }, ptr %allocaN, align 8
@@ -2919,11 +2921,9 @@ if.merge.163: ; preds = %if.then.162, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2940,6 +2940,7 @@ if.merge.163: ; preds = %if.then.162, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.188, i64 1 }, ptr %allocaN, align 8
@@ -2977,7 +2978,6 @@ if.merge.172: ; preds = %if.then.171, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2994,6 +2994,7 @@ if.merge.172: ; preds = %if.then.171, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.191, i64 1 }, ptr %allocaN, align 8
@@ -3031,7 +3032,6 @@ if.merge.177: ; preds = %if.then.176, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -456,6 +456,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -467,15 +472,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -487,7 +488,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -545,6 +545,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -556,18 +567,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -575,9 +582,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -592,7 +597,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -605,7 +609,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -618,7 +621,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -639,12 +641,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -697,6 +697,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -716,11 +728,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -728,7 +738,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -743,19 +752,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -768,20 +773,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -817,7 +818,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -845,6 +845,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -868,7 +869,6 @@ while.hdr.211: ; preds = %if.merge.216, %entr
while.body.212: ; preds = %while.hdr.211
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -909,6 +909,13 @@ if.merge.216: ; preds = %if.else.215, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -929,11 +936,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -950,11 +955,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -971,11 +974,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -988,7 +989,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1010,6 +1010,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1021,40 +1028,33 @@ if.then.209: ; preds = %entry
if.merge.210: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.217
@@ -1165,6 +1165,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1247,7 +1253,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1267,7 +1272,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1276,7 +1280,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1303,7 +1306,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.157 [
i64 36, label %dispatch.case.158
i64 45, label %dispatch.case.159
@@ -1313,7 +1315,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.171 [
i64 37, label %dispatch.case.172
i64 43, label %dispatch.case.173
@@ -1323,7 +1324,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.185 [
i64 18, label %dispatch.case.186
i64 23, label %dispatch.case.187
@@ -2195,6 +2195,8 @@ fv.case17: ; preds = %if.merge.110
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.112, i64 15 }, { ptr, i64 } { ptr @str.113, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2259,7 +2261,6 @@ fv.default: ; preds = %if.merge.115
fv.case: ; preds = %if.merge.115
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2279,7 +2280,6 @@ fv.case20: ; preds = %if.merge.115
fv.case24: ; preds = %if.merge.115
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2574,6 +2574,7 @@ fv.case17: ; preds = %if.merge.135
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.152, i64 5 }, { ptr, i64 } { ptr @str.153, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2648,7 +2649,6 @@ fv.case17: ; preds = %if.merge.140
fv.case20: ; preds = %if.merge.140
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 21, i64 undef }, i64 %ba.p2i, 1
@@ -2741,6 +2741,7 @@ fv.case20: ; preds = %if.merge.145
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.170, i64 17 }, { ptr, i64 } { ptr @str.171, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2805,7 +2806,6 @@ fv.default: ; preds = %if.merge.150
fv.case: ; preds = %if.merge.150
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 21, i64 undef }, i64 %ba.p2i, 1
@@ -2831,6 +2831,7 @@ fv.case23: ; preds = %if.merge.150
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.180, i64 7 }, { ptr, i64 } { ptr @str.181, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2893,7 +2894,6 @@ fv.default: ; preds = %if.merge.155
fv.case: ; preds = %if.merge.155
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 21, i64 undef }, i64 %ba.p2i, 1
@@ -2910,6 +2910,7 @@ fv.case17: ; preds = %if.merge.155
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.188, i64 1 }, ptr %allocaN, align 8
@@ -2942,7 +2943,6 @@ if.merge.164: ; preds = %if.then.163, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2960,6 +2960,8 @@ if.merge.164: ; preds = %if.then.163, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.191, i64 1 }, ptr %allocaN, align 8
@@ -2992,11 +2994,9 @@ if.merge.169: ; preds = %if.then.168, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3013,6 +3013,7 @@ if.merge.169: ; preds = %if.then.168, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.194, i64 1 }, ptr %allocaN, align 8
@@ -3050,7 +3051,6 @@ if.merge.178: ; preds = %if.then.177, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3067,6 +3067,7 @@ if.merge.178: ; preds = %if.then.177, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.197, i64 1 }, ptr %allocaN, align 8
@@ -3104,7 +3105,6 @@ if.merge.183: ; preds = %if.then.182, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -458,6 +458,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -469,15 +474,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -489,7 +490,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -547,6 +547,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -558,18 +569,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -577,9 +584,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -594,7 +599,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -607,7 +611,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -620,7 +623,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -641,12 +643,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -699,6 +699,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -718,11 +730,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -730,7 +740,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -745,19 +754,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -770,20 +775,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -819,7 +820,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -847,6 +847,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -870,7 +871,6 @@ while.hdr.246: ; preds = %if.merge.251, %entr
while.body.247: ; preds = %while.hdr.246
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -911,6 +911,13 @@ if.merge.251: ; preds = %if.else.250, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -931,11 +938,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -952,11 +957,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -973,11 +976,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -990,7 +991,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1012,6 +1012,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1023,40 +1030,33 @@ if.then.244: ; preds = %entry
if.merge.245: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.252
@@ -1167,6 +1167,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1259,7 +1265,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1279,7 +1284,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1288,7 +1292,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1320,7 +1323,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.187 [
i64 35, label %dispatch.case.188
i64 52, label %dispatch.case.189
@@ -1330,7 +1332,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.201 [
i64 36, label %dispatch.case.202
i64 50, label %dispatch.case.203
@@ -1340,7 +1341,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.215 [
i64 18, label %dispatch.case.216
i64 22, label %dispatch.case.217
@@ -2282,6 +2282,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.121, i64 15 }, { ptr, i64 } { ptr @str.122, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2346,7 +2348,6 @@ fv.default: ; preds = %if.merge.115
fv.case: ; preds = %if.merge.115
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2366,7 +2367,6 @@ fv.case20: ; preds = %if.merge.115
fv.case24: ; preds = %if.merge.115
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2661,6 +2661,7 @@ fv.case17: ; preds = %if.merge.135
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.159, i64 5 }, { ptr, i64 } { ptr @str.160, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2735,7 +2736,6 @@ fv.case17: ; preds = %if.merge.140
fv.case20: ; preds = %if.merge.140
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2828,6 +2828,7 @@ fv.case20: ; preds = %if.merge.145
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.177, i64 17 }, { ptr, i64 } { ptr @str.178, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2892,7 +2893,6 @@ fv.default: ; preds = %if.merge.150
fv.case: ; preds = %if.merge.150
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2918,6 +2918,7 @@ fv.case23: ; preds = %if.merge.150
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.187, i64 7 }, { ptr, i64 } { ptr @str.188, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2980,7 +2981,6 @@ fv.default: ; preds = %if.merge.155
fv.case: ; preds = %if.merge.155
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3066,6 +3066,7 @@ fv.case: ; preds = %if.merge.160
define internal { ptr, i64 } @struct_to_string__StrCell(ptr %0, { { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.202, i64 7 }, { ptr, i64 } { ptr @str.203, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3127,7 +3128,6 @@ fv.default: ; preds = %if.merge.165
fv.case: ; preds = %if.merge.165
%fv.field = extractvalue { { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3432,6 +3432,7 @@ fv.case: ; preds = %if.merge.185
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.239, i64 1 }, ptr %allocaN, align 8
@@ -3464,7 +3465,6 @@ if.merge.194: ; preds = %if.then.193, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3482,6 +3482,8 @@ if.merge.194: ; preds = %if.then.193, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.242, i64 1 }, ptr %allocaN, align 8
@@ -3514,11 +3516,9 @@ if.merge.199: ; preds = %if.then.198, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3535,6 +3535,7 @@ if.merge.199: ; preds = %if.then.198, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.245, i64 1 }, ptr %allocaN, align 8
@@ -3572,7 +3573,6 @@ if.merge.208: ; preds = %if.then.207, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3589,6 +3589,7 @@ if.merge.208: ; preds = %if.then.207, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.248, i64 1 }, ptr %allocaN, align 8
@@ -3626,7 +3627,6 @@ if.merge.213: ; preds = %if.then.212, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -463,6 +463,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -474,15 +479,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -494,7 +495,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -552,6 +552,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -563,18 +574,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -582,9 +589,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -599,7 +604,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -612,7 +616,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -625,7 +628,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -646,12 +648,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -704,6 +704,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -723,11 +735,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -735,7 +745,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -750,19 +759,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -775,20 +780,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -824,7 +825,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -852,6 +852,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -875,7 +876,6 @@ while.hdr.257: ; preds = %if.merge.262, %entr
while.body.258: ; preds = %while.hdr.257
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -916,6 +916,13 @@ if.merge.262: ; preds = %if.else.261, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -936,11 +943,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -957,11 +962,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -978,11 +981,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -995,7 +996,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1017,6 +1017,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1028,40 +1035,33 @@ if.then.255: ; preds = %entry
if.merge.256: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.263
@@ -1172,6 +1172,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1265,7 +1271,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1285,7 +1290,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1294,7 +1298,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1327,7 +1330,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.193 [
i64 35, label %dispatch.case.194
i64 50, label %dispatch.case.195
@@ -1337,7 +1339,6 @@ match.arm.48: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.207 [
i64 36, label %dispatch.case.208
i64 44, label %dispatch.case.209
@@ -1348,7 +1349,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.227 [
i64 18, label %dispatch.case.228
i64 22, label %dispatch.case.229
@@ -2247,6 +2247,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.122, i64 15 }, { ptr, i64 } { ptr @str.123, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2311,7 +2313,6 @@ fv.default: ; preds = %if.merge.116
fv.case: ; preds = %if.merge.116
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2331,7 +2332,6 @@ fv.case20: ; preds = %if.merge.116
fv.case24: ; preds = %if.merge.116
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2626,6 +2626,7 @@ fv.case17: ; preds = %if.merge.136
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.160, i64 5 }, { ptr, i64 } { ptr @str.161, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2700,7 +2701,6 @@ fv.case17: ; preds = %if.merge.141
fv.case20: ; preds = %if.merge.141
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2793,6 +2793,7 @@ fv.case20: ; preds = %if.merge.146
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.178, i64 17 }, { ptr, i64 } { ptr @str.179, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2857,7 +2858,6 @@ fv.default: ; preds = %if.merge.151
fv.case: ; preds = %if.merge.151
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2883,6 +2883,7 @@ fv.case23: ; preds = %if.merge.151
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.188, i64 7 }, { ptr, i64 } { ptr @str.189, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2945,7 +2946,6 @@ fv.default: ; preds = %if.merge.156
fv.case: ; preds = %if.merge.156
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3343,6 +3343,7 @@ if.merge.186: ; preds = %if.then.185, %while
define internal { ptr, i64 } @struct_to_string__Combined__s64__s64(ptr %0, { { { ptr, ptr } }, i64 } %1) #0 {
entry:
%alloca = alloca { { { ptr, ptr } }, i64 }, align 8
%ba.tmp = alloca { { ptr, ptr } }, align 8
store { { { ptr, ptr } }, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.236, i64 18 }, { ptr, i64 } { ptr @str.237, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3405,7 +3406,6 @@ fv.default: ; preds = %if.merge.191
fv.case: ; preds = %if.merge.191
%fv.field = extractvalue { { { ptr, ptr } }, i64 } %loadN, 0
%ba.tmp = alloca { { ptr, ptr } }, align 8
store { { ptr, ptr } } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 53, i64 undef }, i64 %ba.p2i, 1
@@ -3421,6 +3421,7 @@ fv.case17: ; preds = %if.merge.191
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.244, i64 1 }, ptr %allocaN, align 8
@@ -3453,7 +3454,6 @@ if.merge.200: ; preds = %if.then.199, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3471,6 +3471,8 @@ if.merge.200: ; preds = %if.then.199, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.247, i64 1 }, ptr %allocaN, align 8
@@ -3503,11 +3505,9 @@ if.merge.205: ; preds = %if.then.204, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3524,6 +3524,7 @@ if.merge.205: ; preds = %if.then.204, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.250, i64 1 }, ptr %allocaN, align 8
@@ -3561,7 +3562,6 @@ if.merge.215: ; preds = %if.then.214, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3578,6 +3578,7 @@ if.merge.215: ; preds = %if.then.214, %while
define internal { ptr, i64 } @slice_to_string__VL(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca {}, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.253, i64 1 }, ptr %allocaN, align 8
@@ -3615,7 +3616,6 @@ if.merge.220: ; preds = %if.then.219, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr {}, ptr %ig.data, i64 %loadN
%ig.val = load {}, ptr %ig.ptr, align 1
%ba.tmp = alloca {}, align 8
store {} %ig.val, ptr %ba.tmp, align 1
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 43, i64 undef }, i64 %ba.p2i, 1
@@ -3632,6 +3632,7 @@ if.merge.220: ; preds = %if.then.219, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.256, i64 1 }, ptr %allocaN, align 8
@@ -3669,7 +3670,6 @@ if.merge.225: ; preds = %if.then.224, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -532,6 +532,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -543,15 +548,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -563,7 +564,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -621,6 +621,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -632,18 +643,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -651,9 +658,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -668,7 +673,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -681,7 +685,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -694,7 +697,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -715,12 +717,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -773,6 +773,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -792,11 +804,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -804,7 +814,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -819,19 +828,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -844,20 +849,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -893,7 +894,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -921,6 +921,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -944,7 +945,6 @@ while.hdr.273: ; preds = %if.merge.278, %entr
while.body.274: ; preds = %while.hdr.273
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -985,6 +985,13 @@ if.merge.278: ; preds = %if.else.277, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -1005,11 +1012,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1026,11 +1031,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1047,11 +1050,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1064,7 +1065,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1086,6 +1086,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1097,40 +1104,33 @@ if.then.271: ; preds = %entry
if.merge.272: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.279
@@ -1241,6 +1241,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.41, i64 3 }, ptr %allocaN, align 8
@@ -1339,7 +1346,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1359,7 +1365,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1368,7 +1373,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1394,7 +1398,6 @@ match.arm.44: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.205 [
i64 37, label %dispatch.case.206
i64 38, label %dispatch.case.207
@@ -1410,7 +1413,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.213 [
i64 35, label %dispatch.case.214
i64 65, label %dispatch.case.215
@@ -1420,7 +1422,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.227 [
i64 36, label %dispatch.case.228
i64 56, label %dispatch.case.229
@@ -1430,7 +1431,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.241 [
i64 18, label %dispatch.case.242
i64 22, label %dispatch.case.243
@@ -3021,6 +3021,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.182, i64 15 }, { ptr, i64 } { ptr @str.183, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3085,7 +3087,6 @@ fv.default: ; preds = %if.merge.118
fv.case: ; preds = %if.merge.118
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3105,7 +3106,6 @@ fv.case20: ; preds = %if.merge.118
fv.case24: ; preds = %if.merge.118
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -3400,6 +3400,7 @@ fv.case17: ; preds = %if.merge.138
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.220, i64 5 }, { ptr, i64 } { ptr @str.221, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3474,7 +3475,6 @@ fv.case17: ; preds = %if.merge.143
fv.case20: ; preds = %if.merge.143
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3567,6 +3567,7 @@ fv.case20: ; preds = %if.merge.148
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.238, i64 17 }, { ptr, i64 } { ptr @str.239, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3631,7 +3632,6 @@ fv.default: ; preds = %if.merge.153
fv.case: ; preds = %if.merge.153
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3657,6 +3657,7 @@ fv.case23: ; preds = %if.merge.153
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.248, i64 7 }, { ptr, i64 } { ptr @str.249, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3719,7 +3720,6 @@ fv.default: ; preds = %if.merge.158
fv.case: ; preds = %if.merge.158
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -4475,6 +4475,7 @@ if.merge.211: ; preds = %if.then.210, %entry
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.344, i64 1 }, ptr %allocaN, align 8
@@ -4507,7 +4508,6 @@ if.merge.220: ; preds = %if.then.219, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -4525,6 +4525,8 @@ if.merge.220: ; preds = %if.then.219, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.347, i64 1 }, ptr %allocaN, align 8
@@ -4557,11 +4559,9 @@ if.merge.225: ; preds = %if.then.224, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -4578,6 +4578,7 @@ if.merge.225: ; preds = %if.then.224, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.350, i64 1 }, ptr %allocaN, align 8
@@ -4615,7 +4616,6 @@ if.merge.234: ; preds = %if.then.233, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -4632,6 +4632,7 @@ if.merge.234: ; preds = %if.then.233, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.353, i64 1 }, ptr %allocaN, align 8
@@ -4669,7 +4670,6 @@ if.merge.239: ; preds = %if.then.238, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -392,6 +392,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -403,15 +408,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -423,7 +424,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -481,6 +481,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -492,18 +503,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -511,9 +518,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -528,7 +533,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -541,7 +545,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -554,7 +557,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -575,12 +577,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -633,6 +633,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -652,11 +664,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -664,7 +674,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -679,19 +688,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -704,20 +709,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -753,7 +754,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -781,6 +781,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -804,7 +805,6 @@ while.hdr.223: ; preds = %if.merge.228, %entr
while.body.224: ; preds = %while.hdr.223
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -845,6 +845,13 @@ if.merge.228: ; preds = %if.else.227, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -865,11 +872,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -886,11 +891,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -907,11 +910,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -924,7 +925,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -946,6 +946,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -957,40 +964,33 @@ if.then.221: ; preds = %entry
if.merge.222: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.229
@@ -1101,6 +1101,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1185,7 +1191,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1205,7 +1210,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1214,7 +1218,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1240,7 +1243,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 43, label %dispatch.case.153
@@ -1253,7 +1255,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.183 [
i64 36, label %dispatch.case.184
i64 40, label %dispatch.case.185
@@ -1263,7 +1264,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.197 [
i64 18, label %dispatch.case.198
i64 22, label %dispatch.case.199
@@ -2185,6 +2185,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.107, i64 15 }, { ptr, i64 } { ptr @str.108, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2249,7 +2251,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2269,7 +2270,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2564,6 +2564,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.145, i64 5 }, { ptr, i64 } { ptr @str.146, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2638,7 +2639,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2731,6 +2731,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.163, i64 17 }, { ptr, i64 } { ptr @str.164, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2795,7 +2796,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2821,6 +2821,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.173, i64 7 }, { ptr, i64 } { ptr @str.174, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2883,7 +2884,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2900,6 +2900,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.181, i64 1 }, ptr %allocaN, align 8
@@ -2932,7 +2933,6 @@ if.merge.161: ; preds = %if.then.160, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2950,6 +2950,8 @@ if.merge.161: ; preds = %if.then.160, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.184, i64 1 }, ptr %allocaN, align 8
@@ -2982,11 +2984,9 @@ if.merge.166: ; preds = %if.then.165, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3003,6 +3003,8 @@ if.merge.166: ; preds = %if.then.165, %while
define internal { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [3 x { i64, i64 }], align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [3 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.187, i64 1 }, ptr %allocaN, align 8
@@ -3035,11 +3037,9 @@ if.merge.171: ; preds = %if.then.170, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [3 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
store [3 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [3 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3056,6 +3056,8 @@ if.merge.171: ; preds = %if.then.170, %while
define internal { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [2 x { i64, i64 }], align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [2 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.190, i64 1 }, ptr %allocaN, align 8
@@ -3088,11 +3090,9 @@ if.merge.176: ; preds = %if.then.175, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [2 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
store [2 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [2 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3109,6 +3109,8 @@ if.merge.176: ; preds = %if.then.175, %while
define internal { ptr, i64 } @array_to_string__AR_5_Any(ptr %0, [5 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [5 x { i64, i64 }], align 8
%ig.tmp = alloca [5 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [5 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.193, i64 1 }, ptr %allocaN, align 8
@@ -3141,11 +3143,9 @@ if.merge.181: ; preds = %if.then.180, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [5 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [5 x { i64, i64 }], align 8
store [5 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [5 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3162,6 +3162,7 @@ if.merge.181: ; preds = %if.then.180, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.196, i64 1 }, ptr %allocaN, align 8
@@ -3199,7 +3200,6 @@ if.merge.190: ; preds = %if.then.189, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3216,6 +3216,7 @@ if.merge.190: ; preds = %if.then.189, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.199, i64 1 }, ptr %allocaN, align 8
@@ -3253,7 +3254,6 @@ if.merge.195: ; preds = %if.then.194, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -373,6 +373,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -384,15 +389,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -404,7 +405,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -462,6 +462,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -473,18 +484,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -492,9 +499,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -509,7 +514,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -522,7 +526,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -535,7 +538,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -556,12 +558,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -614,6 +614,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -633,11 +645,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -645,7 +655,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -660,19 +669,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -685,20 +690,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -734,7 +735,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -762,6 +762,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -785,7 +786,6 @@ while.hdr.209: ; preds = %if.merge.214, %entr
while.body.210: ; preds = %while.hdr.209
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -826,6 +826,13 @@ if.merge.214: ; preds = %if.else.213, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -846,11 +853,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -867,11 +872,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -888,11 +891,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -905,7 +906,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -927,6 +927,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -938,40 +945,33 @@ if.then.207: ; preds = %entry
if.merge.208: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.215
@@ -1082,6 +1082,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1162,7 +1168,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1182,7 +1187,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1191,7 +1195,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1217,7 +1220,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 42, label %dispatch.case.153
@@ -1228,7 +1230,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.171 [
i64 36, label %dispatch.case.172
i64 40, label %dispatch.case.173
@@ -1238,7 +1239,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.185 [
i64 18, label %dispatch.case.186
i64 22, label %dispatch.case.187
@@ -2005,6 +2005,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.100, i64 15 }, { ptr, i64 } { ptr @str.101, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2069,7 +2071,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2089,7 +2090,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2384,6 +2384,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.138, i64 5 }, { ptr, i64 } { ptr @str.139, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2458,7 +2459,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2551,6 +2551,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.156, i64 17 }, { ptr, i64 } { ptr @str.157, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2615,7 +2616,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2641,6 +2641,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.166, i64 7 }, { ptr, i64 } { ptr @str.167, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2703,7 +2704,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2720,6 +2720,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.174, i64 1 }, ptr %allocaN, align 8
@@ -2752,7 +2753,6 @@ if.merge.159: ; preds = %if.then.158, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2770,6 +2770,8 @@ if.merge.159: ; preds = %if.then.158, %while
define internal { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [3 x { i64, i64 }], align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [3 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.177, i64 1 }, ptr %allocaN, align 8
@@ -2802,11 +2804,9 @@ if.merge.164: ; preds = %if.then.163, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [3 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
store [3 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [3 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2823,6 +2823,8 @@ if.merge.164: ; preds = %if.then.163, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.180, i64 1 }, ptr %allocaN, align 8
@@ -2855,11 +2857,9 @@ if.merge.169: ; preds = %if.then.168, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2876,6 +2876,7 @@ if.merge.169: ; preds = %if.then.168, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.183, i64 1 }, ptr %allocaN, align 8
@@ -2913,7 +2914,6 @@ if.merge.178: ; preds = %if.then.177, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2930,6 +2930,7 @@ if.merge.178: ; preds = %if.then.177, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.186, i64 1 }, ptr %allocaN, align 8
@@ -2967,7 +2968,6 @@ if.merge.183: ; preds = %if.then.182, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -377,6 +377,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -388,15 +393,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -408,7 +409,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -466,6 +466,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -477,18 +488,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -496,9 +503,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -513,7 +518,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -526,7 +530,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -539,7 +542,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -560,12 +562,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -618,6 +618,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -637,11 +649,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -649,7 +659,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -664,19 +673,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -689,20 +694,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -738,7 +739,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -766,6 +766,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -789,7 +790,6 @@ while.hdr.203: ; preds = %if.merge.208, %entr
while.body.204: ; preds = %while.hdr.203
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -830,6 +830,13 @@ if.merge.208: ; preds = %if.else.207, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -850,11 +857,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -871,11 +876,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -892,11 +895,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -909,7 +910,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -931,6 +931,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -942,40 +949,33 @@ if.then.201: ; preds = %entry
if.merge.202: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.209
@@ -1086,6 +1086,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1165,7 +1171,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1185,7 +1190,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1194,7 +1198,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1220,7 +1223,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 42, label %dispatch.case.153
@@ -1230,7 +1232,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.165 [
i64 36, label %dispatch.case.166
i64 40, label %dispatch.case.167
@@ -1240,7 +1241,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.179 [
i64 18, label %dispatch.case.180
i64 22, label %dispatch.case.181
@@ -2105,6 +2105,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.107, i64 15 }, { ptr, i64 } { ptr @str.108, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2169,7 +2171,6 @@ fv.default: ; preds = %if.merge.109
fv.case: ; preds = %if.merge.109
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2189,7 +2190,6 @@ fv.case20: ; preds = %if.merge.109
fv.case24: ; preds = %if.merge.109
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2484,6 +2484,7 @@ fv.case17: ; preds = %if.merge.129
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.145, i64 5 }, { ptr, i64 } { ptr @str.146, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2558,7 +2559,6 @@ fv.case17: ; preds = %if.merge.134
fv.case20: ; preds = %if.merge.134
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2651,6 +2651,7 @@ fv.case20: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.163, i64 17 }, { ptr, i64 } { ptr @str.164, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2715,7 +2716,6 @@ fv.default: ; preds = %if.merge.144
fv.case: ; preds = %if.merge.144
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2741,6 +2741,7 @@ fv.case23: ; preds = %if.merge.144
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.173, i64 7 }, { ptr, i64 } { ptr @str.174, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2803,7 +2804,6 @@ fv.default: ; preds = %if.merge.149
fv.case: ; preds = %if.merge.149
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2820,6 +2820,7 @@ fv.case17: ; preds = %if.merge.149
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.181, i64 1 }, ptr %allocaN, align 8
@@ -2852,7 +2853,6 @@ if.merge.158: ; preds = %if.then.157, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2870,6 +2870,8 @@ if.merge.158: ; preds = %if.then.157, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.184, i64 1 }, ptr %allocaN, align 8
@@ -2902,11 +2904,9 @@ if.merge.163: ; preds = %if.then.162, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2923,6 +2923,7 @@ if.merge.163: ; preds = %if.then.162, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.187, i64 1 }, ptr %allocaN, align 8
@@ -2960,7 +2961,6 @@ if.merge.172: ; preds = %if.then.171, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2977,6 +2977,7 @@ if.merge.172: ; preds = %if.then.171, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.190, i64 1 }, ptr %allocaN, align 8
@@ -3014,7 +3015,6 @@ if.merge.177: ; preds = %if.then.176, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -437,6 +437,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -448,15 +453,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -468,7 +469,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -526,6 +526,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -537,18 +548,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -556,9 +563,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -573,7 +578,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -586,7 +590,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -599,7 +602,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -620,12 +622,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -678,6 +678,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -697,11 +709,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -709,7 +719,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -724,19 +733,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -749,20 +754,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -798,7 +799,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -826,6 +826,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -849,7 +850,6 @@ while.hdr.243: ; preds = %if.merge.248, %entr
while.body.244: ; preds = %while.hdr.243
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -890,6 +890,13 @@ if.merge.248: ; preds = %if.else.247, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -910,11 +917,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -931,11 +936,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -952,11 +955,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -969,7 +970,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -991,6 +991,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1002,40 +1009,33 @@ if.then.241: ; preds = %entry
if.merge.242: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.249
@@ -1146,6 +1146,12 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1235,7 +1241,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1255,7 +1260,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1264,7 +1268,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1294,7 +1297,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.175 [
i64 35, label %dispatch.case.176
i64 49, label %dispatch.case.177
@@ -1305,7 +1307,6 @@ match.arm.48: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.195 [
i64 36, label %dispatch.case.196
i64 43, label %dispatch.case.197
@@ -1316,7 +1317,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.215 [
i64 18, label %dispatch.case.216
i64 22, label %dispatch.case.217
@@ -2365,6 +2365,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.120, i64 15 }, { ptr, i64 } { ptr @str.121, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2429,7 +2431,6 @@ fv.default: ; preds = %if.merge.113
fv.case: ; preds = %if.merge.113
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2449,7 +2450,6 @@ fv.case20: ; preds = %if.merge.113
fv.case24: ; preds = %if.merge.113
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2744,6 +2744,7 @@ fv.case17: ; preds = %if.merge.133
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.158, i64 5 }, { ptr, i64 } { ptr @str.159, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2818,7 +2819,6 @@ fv.case17: ; preds = %if.merge.138
fv.case20: ; preds = %if.merge.138
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2911,6 +2911,7 @@ fv.case20: ; preds = %if.merge.143
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.176, i64 17 }, { ptr, i64 } { ptr @str.177, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2975,7 +2976,6 @@ fv.default: ; preds = %if.merge.148
fv.case: ; preds = %if.merge.148
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3001,6 +3001,7 @@ fv.case23: ; preds = %if.merge.148
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.186, i64 7 }, { ptr, i64 } { ptr @str.187, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3063,7 +3064,6 @@ fv.default: ; preds = %if.merge.153
fv.case: ; preds = %if.merge.153
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3365,6 +3365,7 @@ fv.case: ; preds = %if.merge.173
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.223, i64 1 }, ptr %allocaN, align 8
@@ -3397,7 +3398,6 @@ if.merge.183: ; preds = %if.then.182, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3415,6 +3415,8 @@ if.merge.183: ; preds = %if.then.182, %while
define internal { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [2 x { i64, i64 }], align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [2 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.226, i64 1 }, ptr %allocaN, align 8
@@ -3447,11 +3449,9 @@ if.merge.188: ; preds = %if.then.187, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [2 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [2 x { i64, i64 }], align 8
store [2 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [2 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3468,6 +3468,8 @@ if.merge.188: ; preds = %if.then.187, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.229, i64 1 }, ptr %allocaN, align 8
@@ -3500,11 +3502,9 @@ if.merge.193: ; preds = %if.then.192, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3521,6 +3521,7 @@ if.merge.193: ; preds = %if.then.192, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.232, i64 1 }, ptr %allocaN, align 8
@@ -3558,7 +3559,6 @@ if.merge.203: ; preds = %if.then.202, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3575,6 +3575,7 @@ if.merge.203: ; preds = %if.then.202, %while
define internal { ptr, i64 } @slice_to_string__Greeter(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, ptr }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.235, i64 1 }, ptr %allocaN, align 8
@@ -3612,7 +3613,6 @@ if.merge.208: ; preds = %if.then.207, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, ptr }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, ptr }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, ptr }, align 8
store { ptr, ptr } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i, 1
@@ -3629,6 +3629,7 @@ if.merge.208: ; preds = %if.then.207, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.238, i64 1 }, ptr %allocaN, align 8
@@ -3666,7 +3667,6 @@ if.merge.213: ; preds = %if.then.212, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -462,6 +462,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -473,15 +478,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -493,7 +494,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -551,6 +551,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -562,18 +573,14 @@ if.then.68: ; preds = %entry
if.merge.69: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.78
while.hdr.78: ; preds = %while.exit.89, %if.merge.69
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -581,9 +588,7 @@ while.hdr.78: ; preds = %while.exit.89, %if.
br i1 %icmpN, label %or.merge.82, label %or.rhs.81
while.body.79: ; preds = %or.merge.86
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.87
@@ -598,7 +603,6 @@ while.exit.80: ; preds = %or.merge.86
or.rhs.81: ; preds = %while.hdr.78
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -611,7 +615,6 @@ or.merge.82: ; preds = %or.rhs.81, %while.h
or.rhs.83: ; preds = %or.merge.82
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -624,7 +627,6 @@ or.merge.84: ; preds = %or.rhs.83, %or.merg
or.rhs.85: ; preds = %or.merge.84
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -645,12 +647,10 @@ while.body.88: ; preds = %while.hdr.87
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -703,6 +703,18 @@ if.merge.92: ; preds = %if.else.91, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -722,11 +734,9 @@ if.else.97: ; preds = %entry
if.merge.98: ; preds = %if.else.97, %if.then.96
%bp = phi double [ %fsub, %if.then.96 ], [ %loadN, %if.else.97 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -734,7 +744,6 @@ if.merge.98: ; preds = %if.else.97, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -749,19 +758,15 @@ if.then.99: ; preds = %if.merge.98
if.merge.100: ; preds = %if.then.99, %if.merge.98
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.101, label %if.else.102
@@ -774,20 +779,16 @@ if.else.102: ; preds = %if.merge.100
if.merge.103: ; preds = %if.else.102, %if.then.101
%bpN = phi i64 [ 1, %if.then.101 ], [ 0, %if.else.102 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.104, label %if.merge.105
@@ -823,7 +824,6 @@ if.merge.105: ; preds = %if.then.104, %if.me
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -851,6 +851,7 @@ if.merge.105: ; preds = %if.then.104, %if.me
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -874,7 +875,6 @@ while.hdr.245: ; preds = %if.merge.250, %entr
while.body.246: ; preds = %while.hdr.245
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -915,6 +915,13 @@ if.merge.250: ; preds = %if.else.249, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -935,11 +942,9 @@ if.merge.71: ; preds = %if.then.70, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -956,11 +961,9 @@ if.merge.73: ; preds = %if.then.72, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -977,11 +980,9 @@ if.merge.75: ; preds = %if.then.74, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -994,7 +995,6 @@ if.then.76: ; preds = %if.merge.75
br label %if.merge.77
if.merge.77: ; preds = %if.then.76, %if.merge.75
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1016,6 +1016,13 @@ if.merge.77: ; preds = %if.then.76, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1027,40 +1034,33 @@ if.then.243: ; preds = %entry
if.merge.244: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.251
@@ -1171,6 +1171,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1261,7 +1268,6 @@ match.arm.51: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.65, label %if.else.66
match.arm.52: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1281,7 +1287,6 @@ match.arm.53: ; preds = %entry
match.arm.54: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.93, label %fN.unbox.94
@@ -1290,7 +1295,6 @@ match.arm.55: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.107 [
i64 19, label %dispatch.case.108
i64 20, label %dispatch.case.109
@@ -1320,7 +1324,6 @@ match.arm.59: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.187 [
i64 35, label %dispatch.case.188
i64 55, label %dispatch.case.189
@@ -1330,7 +1333,6 @@ match.arm.60: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.201 [
i64 36, label %dispatch.case.202
i64 47, label %dispatch.case.203
@@ -1340,7 +1342,6 @@ match.arm.61: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.215 [
i64 18, label %dispatch.case.216
i64 22, label %dispatch.case.217
@@ -1372,7 +1373,6 @@ match.arm.62: ; preds = %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.326 [
i64 37, label %dispatch.case.327
]
@@ -2081,6 +2081,10 @@ if.merge.36: ; preds = %if.then.35, %while.
define internal float @direct_size(ptr %0, { { float, i1 }, { float, i1 } } %1) #0 {
entry:
%alloca = alloca { { float, i1 }, { float, i1 } }, align 8
%allocaN = alloca float, align 4
%allocaN = alloca double, align 8
%allocaN = alloca float, align 4
%allocaN = alloca double, align 8
store { { float, i1 }, { float, i1 } } %1, ptr %alloca, align 4
%load = load { { float, i1 }, { float, i1 } }, ptr %alloca, align 4
%sg = extractvalue { { float, i1 }, { float, i1 } } %load, 0
@@ -2089,7 +2093,6 @@ entry:
if.then.37: ; preds = %entry
%ou.val = extractvalue { float, i1 } %sg, 0
%allocaN = alloca float, align 4
store float %ou.val, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
%fpext = fpext float %loadN to double
@@ -2100,7 +2103,6 @@ if.else.38: ; preds = %entry
if.merge.39: ; preds = %if.else.38, %if.then.37
%bp = phi double [ %fpext, %if.then.37 ], [ 1.000000e+02, %if.else.38 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load { { float, i1 }, { float, i1 } }, ptr %alloca, align 4
%sgN = extractvalue { { float, i1 }, { float, i1 } } %loadN, 1
@@ -2109,7 +2111,6 @@ if.merge.39: ; preds = %if.else.38, %if.the
if.then.40: ; preds = %if.merge.39
%ou.val7 = extractvalue { float, i1 } %sgN, 0
%allocaN = alloca float, align 4
store float %ou.val7, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
%fpextN = fpext float %loadN to double
@@ -2120,7 +2121,6 @@ if.else.41: ; preds = %if.merge.39
if.merge.42: ; preds = %if.else.41, %if.then.40
%bpN = phi double [ %fpextN, %if.then.40 ], [ 1.000000e+02, %if.else.41 ]
%allocaN = alloca double, align 8
store double %bpN, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
@@ -2133,6 +2133,10 @@ if.merge.42: ; preds = %if.else.41, %if.the
define internal float @Widget.size(ptr %0, ptr %1, { { float, i1 }, { float, i1 } } %2) #0 {
entry:
%alloca = alloca ptr, align 8
%allocaN = alloca float, align 4
%allocaN = alloca double, align 8
%allocaN = alloca float, align 4
%allocaN = alloca double, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca { { float, i1 }, { float, i1 } }, align 8
store { { float, i1 }, { float, i1 } } %2, ptr %allocaN, align 4
@@ -2143,7 +2147,6 @@ entry:
if.then.43: ; preds = %entry
%ou.val = extractvalue { float, i1 } %sg, 0
%allocaN = alloca float, align 4
store float %ou.val, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
%fpext = fpext float %loadN to double
@@ -2154,7 +2157,6 @@ if.else.44: ; preds = %entry
if.merge.45: ; preds = %if.else.44, %if.then.43
%bp = phi double [ %fpext, %if.then.43 ], [ 1.000000e+02, %if.else.44 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load { { float, i1 }, { float, i1 } }, ptr %allocaN, align 4
%sgN = extractvalue { { float, i1 }, { float, i1 } } %loadN, 1
@@ -2163,7 +2165,6 @@ if.merge.45: ; preds = %if.else.44, %if.the
if.then.46: ; preds = %if.merge.45
%ou.val8 = extractvalue { float, i1 } %sgN, 0
%allocaN = alloca float, align 4
store float %ou.val8, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
%fpextN = fpext float %loadN to double
@@ -2174,7 +2175,6 @@ if.else.47: ; preds = %if.merge.45
if.merge.48: ; preds = %if.else.47, %if.then.46
%bpN = phi double [ %fpextN, %if.then.46 ], [ 1.000000e+02, %if.else.47 ]
%allocaN = alloca double, align 8
store double %bpN, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
@@ -2777,6 +2777,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.143, i64 15 }, { ptr, i64 } { ptr @str.144, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2841,7 +2843,6 @@ fv.default: ; preds = %if.merge.125
fv.case: ; preds = %if.merge.125
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2861,7 +2862,6 @@ fv.case20: ; preds = %if.merge.125
fv.case24: ; preds = %if.merge.125
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -3156,6 +3156,7 @@ fv.case17: ; preds = %if.merge.145
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.181, i64 5 }, { ptr, i64 } { ptr @str.182, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3230,7 +3231,6 @@ fv.case17: ; preds = %if.merge.150
fv.case20: ; preds = %if.merge.150
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3323,6 +3323,7 @@ fv.case20: ; preds = %if.merge.155
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.199, i64 17 }, { ptr, i64 } { ptr @str.200, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3387,7 +3388,6 @@ fv.default: ; preds = %if.merge.160
fv.case: ; preds = %if.merge.160
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3413,6 +3413,7 @@ fv.case23: ; preds = %if.merge.160
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.209, i64 7 }, { ptr, i64 } { ptr @str.210, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3475,7 +3476,6 @@ fv.default: ; preds = %if.merge.165
fv.case: ; preds = %if.merge.165
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3492,6 +3492,8 @@ fv.case17: ; preds = %if.merge.165
define internal { ptr, i64 } @struct_to_string__ProposedSize(ptr %0, { { float, i1 }, { float, i1 } } %1) #0 {
entry:
%alloca = alloca { { float, i1 }, { float, i1 } }, align 8
%ba.tmp = alloca { float, i1 }, align 8
%ba.tmp19 = alloca { float, i1 }, align 8
store { { float, i1 }, { float, i1 } } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.217, i64 12 }, { ptr, i64 } { ptr @str.218, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3554,7 +3556,6 @@ fv.default: ; preds = %if.merge.170
fv.case: ; preds = %if.merge.170
%fv.field = extractvalue { { float, i1 }, { float, i1 } } %loadN, 0
%ba.tmp = alloca { float, i1 }, align 8
store { float, i1 } %fv.field, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i, 1
@@ -3562,7 +3563,6 @@ fv.case: ; preds = %if.merge.170
fv.case17: ; preds = %if.merge.170
%fv.field18 = extractvalue { { float, i1 }, { float, i1 } } %loadN, 1
%ba.tmp19 = alloca { float, i1 }, align 8
store { float, i1 } %fv.field18, ptr %ba.tmp19, align 4
%ba.p2i20 = ptrtoint ptr %ba.tmp19 to i64
%fv.val21 = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i20, 1
@@ -3775,6 +3775,7 @@ if.merge.185: ; preds = %if.then.184, %while
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.246, i64 1 }, ptr %allocaN, align 8
@@ -3807,7 +3808,6 @@ if.merge.194: ; preds = %if.then.193, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3825,6 +3825,8 @@ if.merge.194: ; preds = %if.then.193, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.249, i64 1 }, ptr %allocaN, align 8
@@ -3857,11 +3859,9 @@ if.merge.199: ; preds = %if.then.198, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3878,6 +3878,7 @@ if.merge.199: ; preds = %if.then.198, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.252, i64 1 }, ptr %allocaN, align 8
@@ -3915,7 +3916,6 @@ if.merge.208: ; preds = %if.then.207, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3932,6 +3932,7 @@ if.merge.208: ; preds = %if.then.207, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.255, i64 1 }, ptr %allocaN, align 8
@@ -3969,7 +3970,6 @@ if.merge.213: ; preds = %if.then.212, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -390,6 +390,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -401,15 +406,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -421,7 +422,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -479,6 +479,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -490,18 +501,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -509,9 +516,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -526,7 +531,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -539,7 +543,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -552,7 +555,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -573,12 +575,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -631,6 +631,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -650,11 +662,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -662,7 +672,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -677,19 +686,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -702,20 +707,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -751,7 +752,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -779,6 +779,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -802,7 +803,6 @@ while.hdr.209: ; preds = %if.merge.214, %entr
while.body.210: ; preds = %while.hdr.209
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -843,6 +843,13 @@ if.merge.214: ; preds = %if.else.213, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -863,11 +870,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -884,11 +889,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -905,11 +908,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -922,7 +923,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -944,6 +944,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -955,40 +962,33 @@ if.then.207: ; preds = %entry
if.merge.208: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.215
@@ -1099,6 +1099,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1182,7 +1189,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1202,7 +1208,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1211,7 +1216,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1238,7 +1242,6 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.157 [
i64 35, label %dispatch.case.158
i64 48, label %dispatch.case.159
@@ -1248,7 +1251,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.171 [
i64 36, label %dispatch.case.172
i64 46, label %dispatch.case.173
@@ -1258,7 +1260,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.185 [
i64 18, label %dispatch.case.186
i64 22, label %dispatch.case.187
@@ -1284,7 +1285,6 @@ match.arm.50: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.272 [
i64 37, label %dispatch.case.273
i64 38, label %dispatch.case.274
@@ -2024,6 +2024,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.108, i64 15 }, { ptr, i64 } { ptr @str.109, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2088,7 +2090,6 @@ fv.default: ; preds = %if.merge.110
fv.case: ; preds = %if.merge.110
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2108,7 +2109,6 @@ fv.case20: ; preds = %if.merge.110
fv.case24: ; preds = %if.merge.110
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2403,6 +2403,7 @@ fv.case17: ; preds = %if.merge.130
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.146, i64 5 }, { ptr, i64 } { ptr @str.147, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2477,7 +2478,6 @@ fv.case17: ; preds = %if.merge.135
fv.case20: ; preds = %if.merge.135
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2570,6 +2570,7 @@ fv.case20: ; preds = %if.merge.140
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.164, i64 17 }, { ptr, i64 } { ptr @str.165, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2634,7 +2635,6 @@ fv.default: ; preds = %if.merge.145
fv.case: ; preds = %if.merge.145
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2660,6 +2660,7 @@ fv.case23: ; preds = %if.merge.145
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.174, i64 7 }, { ptr, i64 } { ptr @str.175, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2722,7 +2723,6 @@ fv.default: ; preds = %if.merge.150
fv.case: ; preds = %if.merge.150
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2739,6 +2739,9 @@ fv.case17: ; preds = %if.merge.150
define internal { ptr, i64 } @struct_to_string__S(ptr %0, { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %1) #0 {
entry:
%alloca = alloca { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } }, align 8
%ba.tmp = alloca { i64, i1 }, align 8
%ba.tmp19 = alloca { { ptr, i64 }, i1 }, align 8
%ba.tmp24 = alloca { i1, i1 }, align 8
store { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.182, i64 1 }, { ptr, i64 } { ptr @str.183, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2802,7 +2805,6 @@ fv.default: ; preds = %if.merge.155
fv.case: ; preds = %if.merge.155
%fv.field = extractvalue { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %loadN, 0
%ba.tmp = alloca { i64, i1 }, align 8
store { i64, i1 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i, 1
@@ -2810,7 +2812,6 @@ fv.case: ; preds = %if.merge.155
fv.case17: ; preds = %if.merge.155
%fv.field18 = extractvalue { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %loadN, 1
%ba.tmp19 = alloca { { ptr, i64 }, i1 }, align 8
store { { ptr, i64 }, i1 } %fv.field18, ptr %ba.tmp19, align 8
%ba.p2i20 = ptrtoint ptr %ba.tmp19 to i64
%fv.val21 = insertvalue { i64, i64 } { i64 38, i64 undef }, i64 %ba.p2i20, 1
@@ -2818,7 +2819,6 @@ fv.case17: ; preds = %if.merge.155
fv.case22: ; preds = %if.merge.155
%fv.field23 = extractvalue { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %loadN, 2
%ba.tmp24 = alloca { i1, i1 }, align 8
store { i1, i1 } %fv.field23, ptr %ba.tmp24, align 1
%ba.p2i25 = ptrtoint ptr %ba.tmp24 to i64
%fv.val26 = insertvalue { i64, i64 } { i64 39, i64 undef }, i64 %ba.p2i25, 1
@@ -2829,6 +2829,7 @@ fv.case22: ; preds = %if.merge.155
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.191, i64 1 }, ptr %allocaN, align 8
@@ -2861,7 +2862,6 @@ if.merge.164: ; preds = %if.then.163, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2879,6 +2879,8 @@ if.merge.164: ; preds = %if.then.163, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.194, i64 1 }, ptr %allocaN, align 8
@@ -2911,11 +2913,9 @@ if.merge.169: ; preds = %if.then.168, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2932,6 +2932,7 @@ if.merge.169: ; preds = %if.then.168, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.197, i64 1 }, ptr %allocaN, align 8
@@ -2969,7 +2970,6 @@ if.merge.178: ; preds = %if.then.177, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2986,6 +2986,7 @@ if.merge.178: ; preds = %if.then.177, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.200, i64 1 }, ptr %allocaN, align 8
@@ -3023,7 +3024,6 @@ if.merge.183: ; preds = %if.then.182, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3564,6 +3564,7 @@ if.merge.277: ; preds = %entry
define internal { ptr, i64 } @optional_to_string__opt_string(ptr %0, { { ptr, i64 }, i1 } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i1 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i1 } %1, ptr %alloca, align 8
%load = load { { ptr, i64 }, i1 }, ptr %alloca, align 8
%oh.has = extractvalue { { ptr, i64 }, i1 } %load, 1
@@ -3576,7 +3577,6 @@ if.then.278: ; preds = %entry
if.merge.279: ; preds = %entry
%loadN = load { { ptr, i64 }, i1 }, ptr %alloca, align 8
%ou.val = extractvalue { { ptr, i64 }, i1 } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ou.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1

View File

@@ -387,6 +387,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -398,15 +403,11 @@ if.then.24: ; preds = %entry
if.merge.25: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.26
@@ -418,7 +419,6 @@ while.hdr.26: ; preds = %if.merge.30, %if.me
while.body.27: ; preds = %while.hdr.26
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -476,6 +476,17 @@ if.merge.32: ; preds = %if.then.31, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -487,18 +498,14 @@ if.then.66: ; preds = %entry
if.merge.67: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.76
while.hdr.76: ; preds = %while.exit.87, %if.merge.67
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -506,9 +513,7 @@ while.hdr.76: ; preds = %while.exit.87, %if.
br i1 %icmpN, label %or.merge.80, label %or.rhs.79
while.body.77: ; preds = %or.merge.84
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.85
@@ -523,7 +528,6 @@ while.exit.78: ; preds = %or.merge.84
or.rhs.79: ; preds = %while.hdr.76
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -536,7 +540,6 @@ or.merge.80: ; preds = %or.rhs.79, %while.h
or.rhs.81: ; preds = %or.merge.80
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -549,7 +552,6 @@ or.merge.82: ; preds = %or.rhs.81, %or.merg
or.rhs.83: ; preds = %or.merge.82
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -570,12 +572,10 @@ while.body.86: ; preds = %while.hdr.85
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -628,6 +628,18 @@ if.merge.90: ; preds = %if.else.89, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -647,11 +659,9 @@ if.else.95: ; preds = %entry
if.merge.96: ; preds = %if.else.95, %if.then.94
%bp = phi double [ %fsub, %if.then.94 ], [ %loadN, %if.else.95 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -659,7 +669,6 @@ if.merge.96: ; preds = %if.else.95, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -674,19 +683,15 @@ if.then.97: ; preds = %if.merge.96
if.merge.98: ; preds = %if.then.97, %if.merge.96
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.99, label %if.else.100
@@ -699,20 +704,16 @@ if.else.100: ; preds = %if.merge.98
if.merge.101: ; preds = %if.else.100, %if.then.99
%bpN = phi i64 [ 1, %if.then.99 ], [ 0, %if.else.100 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.102, label %if.merge.103
@@ -748,7 +749,6 @@ if.merge.103: ; preds = %if.then.102, %if.me
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -776,6 +776,7 @@ if.merge.103: ; preds = %if.then.102, %if.me
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -799,7 +800,6 @@ while.hdr.214: ; preds = %if.merge.219, %entr
while.body.215: ; preds = %while.hdr.214
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -840,6 +840,13 @@ if.merge.219: ; preds = %if.else.218, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -860,11 +867,9 @@ if.merge.69: ; preds = %if.then.68, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -881,11 +886,9 @@ if.merge.71: ; preds = %if.then.70, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -902,11 +905,9 @@ if.merge.73: ; preds = %if.then.72, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -919,7 +920,6 @@ if.then.74: ; preds = %if.merge.73
br label %if.merge.75
if.merge.75: ; preds = %if.then.74, %if.merge.73
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -941,6 +941,13 @@ if.merge.75: ; preds = %if.then.74, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -952,40 +959,33 @@ if.then.212: ; preds = %entry
if.merge.213: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.220
@@ -1096,6 +1096,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i32, align 4
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1177,7 +1184,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.63, label %if.else.64
match.arm.50: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1197,7 +1203,6 @@ match.arm.51: ; preds = %entry
match.arm.52: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.91, label %fN.unbox.92
@@ -1206,7 +1211,6 @@ match.arm.53: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.105 [
i64 19, label %dispatch.case.106
i64 20, label %dispatch.case.107
@@ -1223,7 +1227,6 @@ match.arm.54: ; No predecessors!
unreachable
match.arm.55: ; preds = %entry
%allocaN = alloca i32, align 4
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw21 = extractvalue { i64, i64 } %loadN, 1
%trN = trunc i64 %ua.raw21 to i32
@@ -1242,7 +1245,6 @@ match.arm.57: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw25 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw25, label %dispatch.default.161 [
i64 35, label %dispatch.case.162
i64 46, label %dispatch.case.163
@@ -1252,7 +1254,6 @@ match.arm.58: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw29 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw29, label %dispatch.default.175 [
i64 36, label %dispatch.case.176
i64 44, label %dispatch.case.177
@@ -1262,7 +1263,6 @@ match.arm.59: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw33 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw33, label %dispatch.default.189 [
i64 18, label %dispatch.case.190
i64 22, label %dispatch.case.191
@@ -2058,6 +2058,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.110, i64 15 }, { ptr, i64 } { ptr @str.111, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2122,7 +2124,6 @@ fv.default: ; preds = %if.merge.119
fv.case: ; preds = %if.merge.119
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2142,7 +2143,6 @@ fv.case20: ; preds = %if.merge.119
fv.case24: ; preds = %if.merge.119
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2437,6 +2437,7 @@ fv.case17: ; preds = %if.merge.139
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.148, i64 5 }, { ptr, i64 } { ptr @str.149, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2511,7 +2512,6 @@ fv.case17: ; preds = %if.merge.144
fv.case20: ; preds = %if.merge.144
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2604,6 +2604,7 @@ fv.case20: ; preds = %if.merge.149
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.166, i64 17 }, { ptr, i64 } { ptr @str.167, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2668,7 +2669,6 @@ fv.default: ; preds = %if.merge.154
fv.case: ; preds = %if.merge.154
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2694,6 +2694,7 @@ fv.case23: ; preds = %if.merge.154
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.176, i64 7 }, { ptr, i64 } { ptr @str.177, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2756,7 +2757,6 @@ fv.default: ; preds = %if.merge.159
fv.case: ; preds = %if.merge.159
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2773,6 +2773,7 @@ fv.case17: ; preds = %if.merge.159
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.184, i64 1 }, ptr %allocaN, align 8
@@ -2805,7 +2806,6 @@ if.merge.168: ; preds = %if.then.167, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2823,6 +2823,8 @@ if.merge.168: ; preds = %if.then.167, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.187, i64 1 }, ptr %allocaN, align 8
@@ -2855,11 +2857,9 @@ if.merge.173: ; preds = %if.then.172, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2876,6 +2876,7 @@ if.merge.173: ; preds = %if.then.172, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.190, i64 1 }, ptr %allocaN, align 8
@@ -2913,7 +2914,6 @@ if.merge.182: ; preds = %if.then.181, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2930,6 +2930,7 @@ if.merge.182: ; preds = %if.then.181, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.193, i64 1 }, ptr %allocaN, align 8
@@ -2967,7 +2968,6 @@ if.merge.187: ; preds = %if.then.186, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -393,6 +393,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -404,15 +409,11 @@ if.then.26: ; preds = %entry
if.merge.27: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.28
@@ -424,7 +425,6 @@ while.hdr.28: ; preds = %if.merge.32, %if.me
while.body.29: ; preds = %while.hdr.28
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -482,6 +482,17 @@ if.merge.34: ; preds = %if.then.33, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -493,18 +504,14 @@ if.then.68: ; preds = %entry
if.merge.69: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.78
while.hdr.78: ; preds = %while.exit.89, %if.merge.69
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -512,9 +519,7 @@ while.hdr.78: ; preds = %while.exit.89, %if.
br i1 %icmpN, label %or.merge.82, label %or.rhs.81
while.body.79: ; preds = %or.merge.86
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.87
@@ -529,7 +534,6 @@ while.exit.80: ; preds = %or.merge.86
or.rhs.81: ; preds = %while.hdr.78
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -542,7 +546,6 @@ or.merge.82: ; preds = %or.rhs.81, %while.h
or.rhs.83: ; preds = %or.merge.82
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -555,7 +558,6 @@ or.merge.84: ; preds = %or.rhs.83, %or.merg
or.rhs.85: ; preds = %or.merge.84
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -576,12 +578,10 @@ while.body.88: ; preds = %while.hdr.87
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -634,6 +634,18 @@ if.merge.92: ; preds = %if.else.91, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -653,11 +665,9 @@ if.else.97: ; preds = %entry
if.merge.98: ; preds = %if.else.97, %if.then.96
%bp = phi double [ %fsub, %if.then.96 ], [ %loadN, %if.else.97 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -665,7 +675,6 @@ if.merge.98: ; preds = %if.else.97, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -680,19 +689,15 @@ if.then.99: ; preds = %if.merge.98
if.merge.100: ; preds = %if.then.99, %if.merge.98
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.101, label %if.else.102
@@ -705,20 +710,16 @@ if.else.102: ; preds = %if.merge.100
if.merge.103: ; preds = %if.else.102, %if.then.101
%bpN = phi i64 [ 1, %if.then.101 ], [ 0, %if.else.102 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.104, label %if.merge.105
@@ -754,7 +755,6 @@ if.merge.105: ; preds = %if.then.104, %if.me
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -782,6 +782,7 @@ if.merge.105: ; preds = %if.then.104, %if.me
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -805,7 +806,6 @@ while.hdr.216: ; preds = %if.merge.221, %entr
while.body.217: ; preds = %while.hdr.216
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -846,6 +846,13 @@ if.merge.221: ; preds = %if.else.220, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -866,11 +873,9 @@ if.merge.71: ; preds = %if.then.70, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -887,11 +892,9 @@ if.merge.73: ; preds = %if.then.72, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -908,11 +911,9 @@ if.merge.75: ; preds = %if.then.74, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -925,7 +926,6 @@ if.then.76: ; preds = %if.merge.75
br label %if.merge.77
if.merge.77: ; preds = %if.then.76, %if.merge.75
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -947,6 +947,13 @@ if.merge.77: ; preds = %if.then.76, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -958,40 +965,33 @@ if.then.214: ; preds = %entry
if.merge.215: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.222
@@ -1102,6 +1102,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i32, align 4
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1184,7 +1191,6 @@ match.arm.51: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.65, label %if.else.66
match.arm.52: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1204,7 +1210,6 @@ match.arm.53: ; preds = %entry
match.arm.54: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.93, label %fN.unbox.94
@@ -1213,7 +1218,6 @@ match.arm.55: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.107 [
i64 19, label %dispatch.case.108
i64 20, label %dispatch.case.109
@@ -1230,7 +1234,6 @@ match.arm.56: ; No predecessors!
unreachable
match.arm.57: ; preds = %entry, %entry
%allocaN = alloca i32, align 4
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw21 = extractvalue { i64, i64 } %loadN, 1
%trN = trunc i64 %ua.raw21 to i32
@@ -1249,7 +1252,6 @@ match.arm.59: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw25 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw25, label %dispatch.default.163 [
i64 35, label %dispatch.case.164
i64 47, label %dispatch.case.165
@@ -1259,7 +1261,6 @@ match.arm.60: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw29 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw29, label %dispatch.default.177 [
i64 36, label %dispatch.case.178
i64 45, label %dispatch.case.179
@@ -1269,7 +1270,6 @@ match.arm.61: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw33 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw33, label %dispatch.default.191 [
i64 18, label %dispatch.case.192
i64 22, label %dispatch.case.193
@@ -2077,6 +2077,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.116, i64 15 }, { ptr, i64 } { ptr @str.117, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2141,7 +2143,6 @@ fv.default: ; preds = %if.merge.121
fv.case: ; preds = %if.merge.121
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2161,7 +2162,6 @@ fv.case20: ; preds = %if.merge.121
fv.case24: ; preds = %if.merge.121
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2456,6 +2456,7 @@ fv.case17: ; preds = %if.merge.141
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.154, i64 5 }, { ptr, i64 } { ptr @str.155, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2530,7 +2531,6 @@ fv.case17: ; preds = %if.merge.146
fv.case20: ; preds = %if.merge.146
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2623,6 +2623,7 @@ fv.case20: ; preds = %if.merge.151
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.172, i64 17 }, { ptr, i64 } { ptr @str.173, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2687,7 +2688,6 @@ fv.default: ; preds = %if.merge.156
fv.case: ; preds = %if.merge.156
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2713,6 +2713,7 @@ fv.case23: ; preds = %if.merge.156
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.182, i64 7 }, { ptr, i64 } { ptr @str.183, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2775,7 +2776,6 @@ fv.default: ; preds = %if.merge.161
fv.case: ; preds = %if.merge.161
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2792,6 +2792,7 @@ fv.case17: ; preds = %if.merge.161
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.190, i64 1 }, ptr %allocaN, align 8
@@ -2824,7 +2825,6 @@ if.merge.170: ; preds = %if.then.169, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2842,6 +2842,8 @@ if.merge.170: ; preds = %if.then.169, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.193, i64 1 }, ptr %allocaN, align 8
@@ -2874,11 +2876,9 @@ if.merge.175: ; preds = %if.then.174, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2895,6 +2895,7 @@ if.merge.175: ; preds = %if.then.174, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.196, i64 1 }, ptr %allocaN, align 8
@@ -2932,7 +2933,6 @@ if.merge.184: ; preds = %if.then.183, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2949,6 +2949,7 @@ if.merge.184: ; preds = %if.then.183, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.199, i64 1 }, ptr %allocaN, align 8
@@ -2986,7 +2987,6 @@ if.merge.189: ; preds = %if.then.188, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -389,6 +389,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -400,15 +405,11 @@ if.then.44: ; preds = %entry
if.merge.45: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.46
@@ -420,7 +421,6 @@ while.hdr.46: ; preds = %if.merge.50, %if.me
while.body.47: ; preds = %while.hdr.46
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -478,6 +478,17 @@ if.merge.52: ; preds = %if.then.51, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -489,18 +500,14 @@ if.then.86: ; preds = %entry
if.merge.87: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.96
while.hdr.96: ; preds = %while.exit.107, %if.merge.87
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -508,9 +515,7 @@ while.hdr.96: ; preds = %while.exit.107, %if
br i1 %icmpN, label %or.merge.100, label %or.rhs.99
while.body.97: ; preds = %or.merge.104
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.105
@@ -525,7 +530,6 @@ while.exit.98: ; preds = %or.merge.104
or.rhs.99: ; preds = %while.hdr.96
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -538,7 +542,6 @@ or.merge.100: ; preds = %or.rhs.99, %while.h
or.rhs.101: ; preds = %or.merge.100
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -551,7 +554,6 @@ or.merge.102: ; preds = %or.rhs.101, %or.mer
or.rhs.103: ; preds = %or.merge.102
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -572,12 +574,10 @@ while.body.106: ; preds = %while.hdr.105
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -630,6 +630,18 @@ if.merge.110: ; preds = %if.else.109, %if.th
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -649,11 +661,9 @@ if.else.115: ; preds = %entry
if.merge.116: ; preds = %if.else.115, %if.then.114
%bp = phi double [ %fsub, %if.then.114 ], [ %loadN, %if.else.115 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -661,7 +671,6 @@ if.merge.116: ; preds = %if.else.115, %if.th
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -676,19 +685,15 @@ if.then.117: ; preds = %if.merge.116
if.merge.118: ; preds = %if.then.117, %if.merge.116
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.119, label %if.else.120
@@ -701,20 +706,16 @@ if.else.120: ; preds = %if.merge.118
if.merge.121: ; preds = %if.else.120, %if.then.119
%bpN = phi i64 [ 1, %if.then.119 ], [ 0, %if.else.120 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.122, label %if.merge.123
@@ -750,7 +751,6 @@ if.merge.123: ; preds = %if.then.122, %if.me
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -778,6 +778,7 @@ if.merge.123: ; preds = %if.then.122, %if.me
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -801,7 +802,6 @@ while.hdr.234: ; preds = %if.merge.239, %entr
while.body.235: ; preds = %while.hdr.234
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -842,6 +842,13 @@ if.merge.239: ; preds = %if.else.238, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -862,11 +869,9 @@ if.merge.89: ; preds = %if.then.88, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -883,11 +888,9 @@ if.merge.91: ; preds = %if.then.90, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -904,11 +907,9 @@ if.merge.93: ; preds = %if.then.92, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -921,7 +922,6 @@ if.then.94: ; preds = %if.merge.93
br label %if.merge.95
if.merge.95: ; preds = %if.then.94, %if.merge.93
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -943,6 +943,13 @@ if.merge.95: ; preds = %if.then.94, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -954,40 +961,33 @@ if.then.232: ; preds = %entry
if.merge.233: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.240
@@ -1098,6 +1098,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i32, align 4
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1179,7 +1186,6 @@ match.arm.69: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.83, label %if.else.84
match.arm.70: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1199,7 +1205,6 @@ match.arm.71: ; preds = %entry
match.arm.72: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.111, label %fN.unbox.112
@@ -1208,7 +1213,6 @@ match.arm.73: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.125 [
i64 19, label %dispatch.case.126
i64 20, label %dispatch.case.127
@@ -1225,7 +1229,6 @@ match.arm.74: ; No predecessors!
unreachable
match.arm.75: ; preds = %entry
%allocaN = alloca i32, align 4
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw21 = extractvalue { i64, i64 } %loadN, 1
%trN = trunc i64 %ua.raw21 to i32
@@ -1244,7 +1247,6 @@ match.arm.77: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw25 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw25, label %dispatch.default.181 [
i64 35, label %dispatch.case.182
i64 46, label %dispatch.case.183
@@ -1254,7 +1256,6 @@ match.arm.78: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw29 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw29, label %dispatch.default.195 [
i64 36, label %dispatch.case.196
i64 44, label %dispatch.case.197
@@ -1264,7 +1265,6 @@ match.arm.79: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw33 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw33, label %dispatch.default.209 [
i64 18, label %dispatch.case.210
i64 22, label %dispatch.case.211
@@ -2023,6 +2023,8 @@ if.merge.19: ; preds = %catch.handle.16
define i32 @main() #0 {
entry:
%alloca = alloca i32, align 4
%allocaN = alloca i32, align 4
%allocaN = alloca i32, align 4
store i32 0, ptr %alloca, align 4
%call = call i32 @must(ptr @__sx_default_context, i32 -1)
%icmp = icmp ne i32 %call, 0
@@ -2062,7 +2064,6 @@ catch.merge.9: ; preds = %catch.handle.8, %ca
%addN = add i32 %loadN, %callN
store i32 %addN, ptr %alloca, align 4
%callN = call i32 @handle_some(ptr @__sx_default_context, i32 0)
%allocaN = alloca i32, align 4
store i32 %callN, ptr %allocaN, align 4
%loadN = load i32, ptr %allocaN, align 4
%icmpN = icmp eq i32 %loadN, 2
@@ -2076,7 +2077,6 @@ if.then.20: ; preds = %catch.merge.9
if.merge.21: ; preds = %if.then.20, %catch.merge.9
%callN = call i32 @handle_some(ptr @__sx_default_context, i32 -1)
%allocaN = alloca i32, align 4
store i32 %callN, ptr %allocaN, align 4
%loadN = load i32, ptr %allocaN, align 4
%icmpN = icmp eq i32 %loadN, 1
@@ -2169,6 +2169,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.112, i64 15 }, { ptr, i64 } { ptr @str.113, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2233,7 +2235,6 @@ fv.default: ; preds = %if.merge.139
fv.case: ; preds = %if.merge.139
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2253,7 +2254,6 @@ fv.case20: ; preds = %if.merge.139
fv.case24: ; preds = %if.merge.139
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2548,6 +2548,7 @@ fv.case17: ; preds = %if.merge.159
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.150, i64 5 }, { ptr, i64 } { ptr @str.151, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2622,7 +2623,6 @@ fv.case17: ; preds = %if.merge.164
fv.case20: ; preds = %if.merge.164
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2715,6 +2715,7 @@ fv.case20: ; preds = %if.merge.169
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.168, i64 17 }, { ptr, i64 } { ptr @str.169, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2779,7 +2780,6 @@ fv.default: ; preds = %if.merge.174
fv.case: ; preds = %if.merge.174
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2805,6 +2805,7 @@ fv.case23: ; preds = %if.merge.174
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.178, i64 7 }, { ptr, i64 } { ptr @str.179, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2867,7 +2868,6 @@ fv.default: ; preds = %if.merge.179
fv.case: ; preds = %if.merge.179
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2884,6 +2884,7 @@ fv.case17: ; preds = %if.merge.179
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.186, i64 1 }, ptr %allocaN, align 8
@@ -2916,7 +2917,6 @@ if.merge.188: ; preds = %if.then.187, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -2934,6 +2934,8 @@ if.merge.188: ; preds = %if.then.187, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.189, i64 1 }, ptr %allocaN, align 8
@@ -2966,11 +2968,9 @@ if.merge.193: ; preds = %if.then.192, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -2987,6 +2987,7 @@ if.merge.193: ; preds = %if.then.192, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.192, i64 1 }, ptr %allocaN, align 8
@@ -3024,7 +3025,6 @@ if.merge.202: ; preds = %if.then.201, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3041,6 +3041,7 @@ if.merge.202: ; preds = %if.then.201, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.195, i64 1 }, ptr %allocaN, align 8
@@ -3078,7 +3079,6 @@ if.merge.207: ; preds = %if.then.206, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -160,6 +160,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -171,15 +176,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -191,7 +192,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0

View File

@@ -176,6 +176,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -187,15 +192,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -207,7 +208,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -831,6 +831,14 @@ define i32 @main() #0 {
entry:
call void @__sx_objc_defined_class_init()
%alloca = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%call = call ptr @objc_getClass(ptr @str.16)
store ptr %call, ptr %alloca, align 8
%load = load ptr, ptr %alloca, align 8
@@ -842,10 +850,8 @@ if.then.0: ; preds = %entry
ret i32 1
if.merge.1: ; preds = %entry
%allocaN = alloca ptr, align 8
%callN = call ptr @sel_registerName(ptr @str.17)
store ptr %callN, ptr %allocaN, align 8
%allocaN = alloca ptr, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @class_getMethodImplementation(ptr %loadN, ptr %loadN)
@@ -859,12 +865,9 @@ if.then.39: ; preds = %if.merge.1
ret i32 1
if.merge.40: ; preds = %if.merge.1
%allocaN = alloca ptr, align 8
%callN = call ptr @sel_registerName(ptr @str.18)
store ptr %callN, ptr %allocaN, align 8
%allocaN = alloca ptr, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%allocaN = alloca ptr, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -879,16 +882,13 @@ if.then.41: ; preds = %if.merge.40
ret i32 1
if.merge.42: ; preds = %if.merge.40
%allocaN = alloca ptr, align 8
%callN = call ptr @sel_registerName(ptr @str.19)
store ptr %callN, ptr %allocaN, align 8
%allocaN = alloca ptr, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
call void %loadN(ptr %loadN, ptr %loadN)
%allocaN = alloca ptr, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8

View File

@@ -506,6 +506,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -517,15 +522,11 @@ if.then.18: ; preds = %entry
if.merge.19: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.20
@@ -537,7 +538,6 @@ while.hdr.20: ; preds = %if.merge.24, %if.me
while.body.21: ; preds = %while.hdr.20
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -595,6 +595,17 @@ if.merge.26: ; preds = %if.then.25, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -606,18 +617,14 @@ if.then.64: ; preds = %entry
if.merge.65: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.74
while.hdr.74: ; preds = %while.exit.85, %if.merge.65
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -625,9 +632,7 @@ while.hdr.74: ; preds = %while.exit.85, %if.
br i1 %icmpN, label %or.merge.78, label %or.rhs.77
while.body.75: ; preds = %or.merge.82
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.83
@@ -642,7 +647,6 @@ while.exit.76: ; preds = %or.merge.82
or.rhs.77: ; preds = %while.hdr.74
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -655,7 +659,6 @@ or.merge.78: ; preds = %or.rhs.77, %while.h
or.rhs.79: ; preds = %or.merge.78
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -668,7 +671,6 @@ or.merge.80: ; preds = %or.rhs.79, %or.merg
or.rhs.81: ; preds = %or.merge.80
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -689,12 +691,10 @@ while.body.84: ; preds = %while.hdr.83
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -747,6 +747,18 @@ if.merge.88: ; preds = %if.else.87, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -766,11 +778,9 @@ if.else.93: ; preds = %entry
if.merge.94: ; preds = %if.else.93, %if.then.92
%bp = phi double [ %fsub, %if.then.92 ], [ %loadN, %if.else.93 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -778,7 +788,6 @@ if.merge.94: ; preds = %if.else.93, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -793,19 +802,15 @@ if.then.95: ; preds = %if.merge.94
if.merge.96: ; preds = %if.then.95, %if.merge.94
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.97, label %if.else.98
@@ -818,20 +823,16 @@ if.else.98: ; preds = %if.merge.96
if.merge.99: ; preds = %if.else.98, %if.then.97
%bpN = phi i64 [ 1, %if.then.97 ], [ 0, %if.else.98 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.100, label %if.merge.101
@@ -867,7 +868,6 @@ if.merge.101: ; preds = %if.then.100, %if.me
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -895,6 +895,7 @@ if.merge.101: ; preds = %if.then.100, %if.me
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -918,7 +919,6 @@ while.hdr.253: ; preds = %if.merge.258, %entr
while.body.254: ; preds = %while.hdr.253
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -959,6 +959,13 @@ if.merge.258: ; preds = %if.else.257, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -979,11 +986,9 @@ if.merge.67: ; preds = %if.then.66, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1000,11 +1005,9 @@ if.merge.69: ; preds = %if.then.68, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1021,11 +1024,9 @@ if.merge.71: ; preds = %if.then.70, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -1038,7 +1039,6 @@ if.then.72: ; preds = %if.merge.71
br label %if.merge.73
if.merge.73: ; preds = %if.then.72, %if.merge.71
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1060,6 +1060,13 @@ if.merge.73: ; preds = %if.then.72, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1071,40 +1078,33 @@ if.then.251: ; preds = %entry
if.merge.252: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.259
@@ -1215,6 +1215,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1305,7 +1312,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.61, label %if.else.62
match.arm.48: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1325,7 +1331,6 @@ match.arm.49: ; preds = %entry
match.arm.50: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.89, label %fN.unbox.90
@@ -1334,7 +1339,6 @@ match.arm.51: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.103 [
i64 19, label %dispatch.case.104
i64 20, label %dispatch.case.105
@@ -1355,7 +1359,6 @@ match.arm.52: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.183 [
i64 37, label %dispatch.case.184
i64 38, label %dispatch.case.185
@@ -1371,7 +1374,6 @@ match.arm.55: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.191 [
i64 35, label %dispatch.case.192
i64 58, label %dispatch.case.193
@@ -1382,7 +1384,6 @@ match.arm.56: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.211 [
i64 36, label %dispatch.case.212
i64 53, label %dispatch.case.213
@@ -1392,7 +1393,6 @@ match.arm.57: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.225 [
i64 18, label %dispatch.case.226
i64 22, label %dispatch.case.227
@@ -2290,6 +2290,10 @@ entry:
call void @__sx_objc_selector_init()
call void @__sx_objc_defined_class_init()
call void @__sx_objc_class_init()
%allocaN = alloca i32, align 4
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%load = load ptr, ptr @OBJC_CLASSLIST_REFERENCES_SxBox, align 8
%call = call ptr @class_createInstance(ptr %load, i64 0)
%loadN = load { { ptr, ptr, ptr }, ptr }, ptr @__sx_default_context, align 8
@@ -2345,7 +2349,6 @@ if.merge.3: ; preds = %or.merge.1
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr @OBJC_SELECTOR_REFERENCES_area, align 8
%objc.msg25 = call i32 @objc_msgSend(ptr %loadN, ptr %loadN)
%allocaN = alloca i32, align 4
store i32 %objc.msg25, ptr %allocaN, align 4
%loadN = load i32, ptr %allocaN, align 4
%cmp.ext28 = sext i32 %loadN to i64
@@ -2358,16 +2361,13 @@ if.then.41: ; preds = %if.merge.3
ret i32 1
if.merge.42: ; preds = %if.merge.3
%allocaN = alloca ptr, align 8
%callN = call ptr @objc_getClass(ptr @str.120)
store ptr %callN, ptr %allocaN, align 8
%allocaN = alloca ptr, align 8
%callN = call ptr @sel_registerName(ptr @str.121)
store ptr %callN, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @class_getInstanceMethod(ptr %loadN, ptr %loadN)
%allocaN = alloca ptr, align 8
store ptr %callN, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%icmpN = icmp ne ptr %loadN, null
@@ -2607,6 +2607,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.134, i64 15 }, { ptr, i64 } { ptr @str.135, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2671,7 +2673,6 @@ fv.default: ; preds = %if.merge.121
fv.case: ; preds = %if.merge.121
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2691,7 +2692,6 @@ fv.case20: ; preds = %if.merge.121
fv.case24: ; preds = %if.merge.121
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2986,6 +2986,7 @@ fv.case17: ; preds = %if.merge.141
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.172, i64 5 }, { ptr, i64 } { ptr @str.173, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3060,7 +3061,6 @@ fv.case17: ; preds = %if.merge.146
fv.case20: ; preds = %if.merge.146
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3153,6 +3153,7 @@ fv.case20: ; preds = %if.merge.151
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 17 }, { ptr, i64 } { ptr @str.191, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3217,7 +3218,6 @@ fv.default: ; preds = %if.merge.156
fv.case: ; preds = %if.merge.156
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3243,6 +3243,7 @@ fv.case23: ; preds = %if.merge.156
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.200, i64 7 }, { ptr, i64 } { ptr @str.201, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3305,7 +3306,6 @@ fv.default: ; preds = %if.merge.161
fv.case: ; preds = %if.merge.161
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3487,6 +3487,7 @@ if.merge.176: ; preds = %if.then.175, %while
define internal { ptr, i64 } @struct_to_string____SxBoxState(ptr %0, { { ptr, ptr, ptr }, i32, i32, i32 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i32, i32, i32 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i32, i32, i32 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.226, i64 12 }, { ptr, i64 } { ptr @str.227, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3551,7 +3552,6 @@ fv.default: ; preds = %if.merge.181
fv.case: ; preds = %if.merge.181
%fv.field = extractvalue { { ptr, ptr, ptr }, i32, i32, i32 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3662,6 +3662,7 @@ if.merge.189: ; preds = %if.then.188, %entry
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.256, i64 1 }, ptr %allocaN, align 8
@@ -3694,7 +3695,6 @@ if.merge.199: ; preds = %if.then.198, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3712,6 +3712,8 @@ if.merge.199: ; preds = %if.then.198, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.259, i64 1 }, ptr %allocaN, align 8
@@ -3744,11 +3746,9 @@ if.merge.204: ; preds = %if.then.203, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3765,6 +3765,8 @@ if.merge.204: ; preds = %if.then.203, %while
define internal { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [3 x { i64, i64 }], align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [3 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.262, i64 1 }, ptr %allocaN, align 8
@@ -3797,11 +3799,9 @@ if.merge.209: ; preds = %if.then.208, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [3 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
store [3 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [3 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3818,6 +3818,7 @@ if.merge.209: ; preds = %if.then.208, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.265, i64 1 }, ptr %allocaN, align 8
@@ -3855,7 +3856,6 @@ if.merge.218: ; preds = %if.then.217, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3872,6 +3872,7 @@ if.merge.218: ; preds = %if.then.217, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.268, i64 1 }, ptr %allocaN, align 8
@@ -3909,7 +3910,6 @@ if.merge.223: ; preds = %if.then.222, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -152,6 +152,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -163,15 +168,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -183,7 +184,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0

View File

@@ -448,6 +448,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -459,15 +464,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -479,7 +480,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -537,6 +537,17 @@ if.merge.22: ; preds = %if.then.21, %while.
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -548,18 +559,14 @@ if.then.56: ; preds = %entry
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -567,9 +574,7 @@ while.hdr.66: ; preds = %while.exit.77, %if.
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
@@ -584,7 +589,6 @@ while.exit.68: ; preds = %or.merge.74
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp15 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
@@ -597,7 +601,6 @@ or.merge.70: ; preds = %or.rhs.69, %while.h
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp20 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
@@ -610,7 +613,6 @@ or.merge.72: ; preds = %or.rhs.71, %or.merg
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp26 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
@@ -631,12 +633,10 @@ while.body.76: ; preds = %while.hdr.75
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp36 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
@@ -689,6 +689,18 @@ if.merge.80: ; preds = %if.else.79, %if.the
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
@@ -708,11 +720,9 @@ if.else.85: ; preds = %entry
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
%allocaN = alloca double, align 8
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
%allocaN = alloca i64, align 8
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -720,7 +730,6 @@ if.merge.86: ; preds = %if.else.85, %if.the
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
%allocaN = alloca i64, align 8
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
@@ -735,19 +744,15 @@ if.then.87: ; preds = %if.merge.86
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
@@ -760,20 +765,16 @@ if.else.90: ; preds = %if.merge.88
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
%allocaN = alloca i64, align 8
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
%allocaN = alloca i64, align 8
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
@@ -809,7 +810,6 @@ if.merge.93: ; preds = %if.then.92, %if.mer
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
%allocaN = alloca i64, align 8
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
@@ -837,6 +837,7 @@ if.merge.93: ; preds = %if.then.92, %if.mer
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
@@ -860,7 +861,6 @@ while.hdr.237: ; preds = %if.merge.242, %entr
while.body.238: ; preds = %while.hdr.237
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
@@ -901,6 +901,13 @@ if.merge.242: ; preds = %if.else.241, %if.th
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
@@ -921,11 +928,9 @@ if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
%allocaN = alloca i64, align 8
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -942,11 +947,9 @@ if.merge.61: ; preds = %if.then.60, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -963,11 +966,9 @@ if.merge.63: ; preds = %if.then.62, %if.mer
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
%allocaN = alloca i64, align 8
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
%allocaN = alloca i64, align 8
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -980,7 +981,6 @@ if.then.64: ; preds = %if.merge.63
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
%allocaN = alloca [4 x i64], align 8
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
@@ -1002,6 +1002,13 @@ if.merge.65: ; preds = %if.then.64, %if.mer
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -1013,40 +1020,33 @@ if.then.235: ; preds = %entry
if.merge.236: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
%allocaN = alloca [4 x i64], align 8
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp9 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp14 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
%ig.tmp19 = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.243
@@ -1157,6 +1157,13 @@ declare ptr @path_join(ptr, ptr) #0
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
@@ -1244,7 +1251,6 @@ match.arm.39: ; preds = %entry, %entry, %ent
br i1 %tiu.load, label %if.then.53, label %if.else.54
match.arm.40: ; preds = %entry
%allocaN = alloca { ptr, i64 }, align 8
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
@@ -1264,7 +1270,6 @@ match.arm.41: ; preds = %entry
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
@@ -1273,7 +1278,6 @@ match.arm.43: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
@@ -1293,7 +1297,6 @@ match.arm.44: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw20, label %dispatch.default.169 [
i64 37, label %dispatch.case.170
i64 38, label %dispatch.case.171
@@ -1309,7 +1312,6 @@ match.arm.47: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw24, label %dispatch.default.177 [
i64 35, label %dispatch.case.178
i64 52, label %dispatch.case.179
@@ -1320,7 +1322,6 @@ match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw28, label %dispatch.default.197 [
i64 36, label %dispatch.case.198
i64 50, label %dispatch.case.199
@@ -1330,7 +1331,6 @@ match.arm.49: ; preds = %entry, %entry, %ent
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %ua.raw32, label %dispatch.default.211 [
i64 18, label %dispatch.case.212
i64 22, label %dispatch.case.213
@@ -2404,6 +2404,8 @@ entry:
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.122, i64 15 }, { ptr, i64 } { ptr @str.123, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2468,7 +2470,6 @@ fv.default: ; preds = %if.merge.112
fv.case: ; preds = %if.merge.112
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -2488,7 +2489,6 @@ fv.case20: ; preds = %if.merge.112
fv.case24: ; preds = %if.merge.112
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
@@ -2783,6 +2783,7 @@ fv.case17: ; preds = %if.merge.132
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.160, i64 5 }, { ptr, i64 } { ptr @str.161, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -2857,7 +2858,6 @@ fv.case17: ; preds = %if.merge.137
fv.case20: ; preds = %if.merge.137
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -2950,6 +2950,7 @@ fv.case20: ; preds = %if.merge.142
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.178, i64 17 }, { ptr, i64 } { ptr @str.179, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3014,7 +3015,6 @@ fv.default: ; preds = %if.merge.147
fv.case: ; preds = %if.merge.147
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3040,6 +3040,7 @@ fv.case23: ; preds = %if.merge.147
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.188, i64 7 }, { ptr, i64 } { ptr @str.189, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
@@ -3102,7 +3103,6 @@ fv.default: ; preds = %if.merge.152
fv.case: ; preds = %if.merge.152
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
@@ -3392,6 +3392,7 @@ if.merge.175: ; preds = %if.then.174, %entry
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.237, i64 1 }, ptr %allocaN, align 8
@@ -3424,7 +3425,6 @@ if.merge.185: ; preds = %if.then.184, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
@@ -3442,6 +3442,8 @@ if.merge.185: ; preds = %if.then.184, %while
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.240, i64 1 }, ptr %allocaN, align 8
@@ -3474,11 +3476,9 @@ if.merge.190: ; preds = %if.then.189, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3495,6 +3495,8 @@ if.merge.190: ; preds = %if.then.189, %while
define internal { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [3 x { i64, i64 }], align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [3 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.243, i64 1 }, ptr %allocaN, align 8
@@ -3527,11 +3529,9 @@ if.merge.195: ; preds = %if.then.194, %while
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [3 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.tmp = alloca [3 x { i64, i64 }], align 8
store [3 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [3 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
@@ -3548,6 +3548,7 @@ if.merge.195: ; preds = %if.then.194, %while
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.246, i64 1 }, ptr %allocaN, align 8
@@ -3585,7 +3586,6 @@ if.merge.204: ; preds = %if.then.203, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
@@ -3602,6 +3602,7 @@ if.merge.204: ; preds = %if.then.203, %while
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.249, i64 1 }, ptr %allocaN, align 8
@@ -3639,7 +3640,6 @@ if.merge.209: ; preds = %if.then.208, %while
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1

View File

@@ -178,6 +178,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -189,15 +194,11 @@ if.then.14: ; preds = %entry
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
@@ -209,7 +210,6 @@ while.hdr.16: ; preds = %if.merge.20, %if.me
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0

View File

@@ -151,6 +151,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -162,15 +167,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -182,7 +183,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -658,12 +658,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca i32, align 4
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call i32 @read_int(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca i32, align 4
store i32 %call, ptr %alloca, align 4
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -658,12 +658,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca i64, align 8
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call i64 @read_long(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca i64, align 8
store i64 %call, ptr %alloca, align 8
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -658,12 +658,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca double, align 8
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call double @read_double(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca double, align 8
store double %call, ptr %alloca, align 8
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -658,12 +658,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca i1, align 1
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call i1 @read_bool(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca i1, align 1
store i1 %call, ptr %alloca, align 1
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -658,12 +658,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca ptr, align 8
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call ptr @get_window(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca ptr, align 8
store ptr %call, ptr %alloca, align 8
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -655,12 +655,12 @@ jni.cont: ; preds = %jni.miss, %entry
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca i32, align 4
%gload = load i1, ptr @g_should_call, align 1
br i1 %gload, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
%call = call i32 @call_static_max(ptr @__sx_default_context, ptr null, ptr null)
%alloca = alloca i32, align 4
store i32 %call, ptr %alloca, align 4
br label %if.merge.1

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
@@ -620,6 +620,7 @@ if.merge.38: ; preds = %if.then.37, %while.
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry:
%alloca = alloca ptr, align 8
%allocaN = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca ptr, align 8
store ptr %2, ptr %allocaN, align 8
@@ -651,7 +652,6 @@ jni.cont: ; preds = %jni.miss, %entry
%6 = getelementptr inbounds ptr, ptr %jni.ifs, i32 34
%jni.callfn = load ptr, ptr %6, align 8
%jni.ret = call ptr %jni.callfn(ptr %load, ptr %loadN, ptr %jni.mid)
%allocaN = alloca ptr, align 8
store ptr %jni.ret, ptr %allocaN, align 8
call void @sx_jni_env_tl_set(ptr %call)
ret void

View File

@@ -149,6 +149,11 @@ entry:
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
@@ -160,15 +165,11 @@ if.then.16: ; preds = %entry
if.merge.17: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
%allocaN = alloca i1, align 1
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.18
@@ -180,7 +181,6 @@ while.hdr.18: ; preds = %if.merge.22, %if.me
while.body.19: ; preds = %while.hdr.18
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0

View File

@@ -0,0 +1,136 @@
# RESOLVED — 0109: allocas inside loop bodies accumulate stack per iteration
**Root cause:** `emitAlloca` (and ~18 sibling `LLVMBuildAlloca` temp sites in the
LLVM backend) built allocas at the builder's current position. An alloca inside a
loop body re-executes per iteration and LLVM reclaims allocas only at `ret`, so
the frame grew with the trip count — body locals, nested-loop index slots, and
spill temps (`ig.tmp` etc.) all segfaulted long loops on stack exhaustion.
**Fix:** new `LLVMEmitter.buildEntryAlloca` (src/ir/emit_llvm.zig) builds every
per-instruction alloca in the function's entry block (after existing entry
allocas, builder position restored); all `LLVMBuildAlloca` sites reachable
during instruction emission in src/backend/llvm/ops.zig, src/backend/llvm/abi.zig
and src/ir/emit_llvm.zig route through it. Initialization stores stay at the
use site, so per-iteration re-init semantics are unchanged; entry-block slots
are also mem2reg-promotable. ~35 `.ir` snapshots churned (pure alloca position
moves — verified type-multiset-identical per file).
**Regression test:** `examples/0047-basic-loop-local-stack-reuse.sx` (1M-iteration
body-local loop prints `sum=499999500000`; 3M-iteration nested loop prints
`n=3000000`; both segfaulted pre-fix).
---
# 0109 — allocas inside loop bodies accumulate stack per iteration → segfault on long loops
**Symptom.** Any `alloca` that lands inside a loop's body block executes anew
on every iteration, and LLVM stack allocas are only reclaimed at function
return — so the frame grows monotonically with the trip count. Observed: a
1M-iteration loop with a body-local array segfaults (stack overflow, fault
address at the guard page); so does a 3M-iteration nested loop with **no user
locals at all** (the inner loop's hidden index slot is itself a body-block
alloca of the outer loop). Expected: loop-local storage is reused across
iterations; stack usage is static per frame regardless of trip count.
This hits three shapes, all confirmed:
1. user locals declared in a loop body (`buf : [128]s64 = ---;`),
2. nested loops (inner `for`'s `idx_slot` alloca sits in the outer body),
3. compiler temporaries spilled in the body (e.g. `index_get`'s `ig.tmp`
see issue 0110 for the for-over-array case specifically).
## Reproduction
Repro A — body local (`issues/0109-loop-body-alloca-stack-growth.sx`):
```sx
#import "modules/std.sx";
main :: () -> s32 {
sum := 0;
for 0..1000000: (i) {
buf : [128]s64 = ---;
buf[0] = i;
sum += buf[0];
}
print("sum={}\n", sum);
0
}
```
- **Observed**: `Segmentation fault at address 0x16e70ffd0` (guard page).
With `0..1000` instead it prints `sum=499500` and exits 0 — the program is
correct, only the stack accumulation kills it.
- **Expected**: prints `sum=499999500000`, exit 0, at any trip count.
Repro B — pure nested loops, zero user locals:
```sx
#import "modules/std.sx";
main :: () -> s32 {
n := 0;
for 0..3000000: (i) {
for 0..1: (j) { n += 1; }
}
print("n={}\n", n);
0
}
```
- **Observed**: segfault. **Expected**: `n=3000000`, exit 0.
The emitted IR shows the cause directly (`sx ir`, body of repro A):
```llvm
for.body.1:
%alloca2 = alloca [128 x i64], align 8 ; fresh 1KB every iteration
...
%ig.tmp = alloca [128 x i64], align 8 ; plus a 1KB spill temp
```
## Root cause (suspected area)
`Builder.alloca` (`src/ir/module.zig` ~474) emits the `.alloca` instruction
into the current block, and the LLVM emitter (`src/backend/llvm/ops.zig`
`emitAlloca` ~327) builds `LLVMBuildAlloca` at the current insertion point —
so loop-body allocas are *executed* per iteration. LLVM only treats
entry-block allocas as static frame slots (and mem2reg/SROA only promote
those); a non-entry alloca re-executes and grows the stack each time, until
`ret`.
The standard fix (what clang does): emit **all** static allocas into the
function's entry block. Least-invasive locus is the emitter — in
`emitAlloca`, save the current insertion point, position the builder at the
entry block's first non-alloca instruction (or end of entry if empty), build
the alloca there, restore the position, `mapRef` as before. The IR shape and
the interpreter are untouched. All sx allocas are statically sized (TypeId),
so every one is hoistable.
## Investigation prompt (paste into a fresh session)
> Fix issue 0109: loop-body allocas grow the stack per iteration and long
> loops segfault. In `src/backend/llvm/ops.zig` `emitAlloca` (~327), hoist the
> alloca to the current function's entry block: get the function via the
> current insert block's parent, position the builder before the entry
> block's first non-alloca instruction (`LLVMGetEntryBasicBlock` +
> `LLVMGetFirstInstruction` walk past `LLVMAlloca` opcodes — same positioning
> pattern as `injectCtorIntoMain` in `src/ir/emit_llvm.zig` ~466), build the
> alloca + `mapRef`, then restore the previous insertion point
> (`LLVMGetInsertBlock` before / `LLVMPositionBuilderAtEnd` after). Audit the
> other in-place `LLVMBuildAlloca` temporaries in `src/ir/emit_llvm.zig`
> (`ba.tmp`, `abi.tmp`, `ig.tmp`, etc. — grep `BuildAlloca`) and route the
> ones reachable inside loops through the same hoist helper.
>
> Semantics note: per-iteration re-zeroing must not regress — initialization
> stores (e.g. `store undef` / `= .{...}` inits) stay where the decl was, in
> the body block; only the `alloca` itself moves to entry.
>
> Verify: both repros in `issues/0109-loop-body-alloca-stack-growth.md` (A is
> `issues/0109-loop-body-alloca-stack-growth.sx`) now print
> `sum=499999500000` / `n=3000000` and exit 0; `sx ir` on repro A shows no
> `alloca` inside `for.body.*`. Then `zig build && zig build test && bash
> tests/run_examples.sh` — any `.ir` snapshot churn from alloca placement must
> be reviewed (`git diff examples/expected/`) before `--update`. Promote a
> trip-count-bounded variant (e.g. 200k iterations, small buf) to
> `examples/00xx-basic-loop-local-stack-reuse.sx` as the pinned regression.

View File

@@ -116,7 +116,7 @@ pub const AbiLowering = struct {
}
pub fn materializeByvalArg(self: AbiLowering, val: c.LLVMValueRef, struct_ty: c.LLVMTypeRef) c.LLVMValueRef {
const tmp = c.LLVMBuildAlloca(self.e.builder, struct_ty, "byval.tmp");
const tmp = self.e.buildEntryAlloca(struct_ty, "byval.tmp");
_ = c.LLVMBuildStore(self.e.builder, val, tmp);
return tmp;
}

View File

@@ -326,7 +326,7 @@ pub const Ops = struct {
// ── Memory ────────────────────────────────────────────
pub fn emitAlloca(self: Ops, elem_ty: TypeId) void {
const llvm_ty = self.e.toLLVMType(elem_ty);
const result = c.LLVMBuildAlloca(self.e.builder, llvm_ty, "alloca");
const result = self.e.buildEntryAlloca(llvm_ty, "alloca");
self.e.mapRef(result);
}
@@ -503,7 +503,7 @@ pub const Ops = struct {
var sret_slot: c.LLVMValueRef = null;
if (uses_sret) {
sret_slot = c.LLVMBuildAlloca(self.e.builder, raw_ret_ty, "objc.sret");
sret_slot = self.e.buildEntryAlloca(raw_ret_ty, "objc.sret");
param_types[0] = self.e.cached_ptr;
call_args[0] = sret_slot;
}
@@ -710,7 +710,7 @@ pub const Ops = struct {
// outer phi shape. Instead, return both via tuple
// through an auxiliary local — simplest is to attach
// `cls` to a per-invocation slot. Use a stack alloca.
const cls_slot = c.LLVMBuildAlloca(self.e.builder, self.e.cached_ptr, "jni.parent.cls.slot");
const cls_slot = self.e.buildEntryAlloca(self.e.cached_ptr, "jni.parent.cls.slot");
_ = c.LLVMBuildStore(self.e.builder, cls, cls_slot);
// Tag the slot pointer onto the phi result via the
// generated metadata: we'll re-extract by re-running
@@ -814,7 +814,7 @@ pub const Ops = struct {
defer self.e.alloc.free(args);
var sret_slot: c.LLVMValueRef = null;
if (callee_uses_sret) {
sret_slot = c.LLVMBuildAlloca(self.e.builder, callee_raw_ret, "sret.slot");
sret_slot = self.e.buildEntryAlloca(callee_raw_ret, "sret.slot");
args[0] = sret_slot;
}
for (call_op.args, 0..) |arg_ref, j| {
@@ -1345,7 +1345,7 @@ pub const Ops = struct {
const payload_val = self.e.resolveRef(ei.payload);
// alloca union, store tag, bitcast payload area, store payload
const tmp = c.LLVMBuildAlloca(self.e.builder, union_ty, "ei.tmp");
const tmp = self.e.buildEntryAlloca(union_ty, "ei.tmp");
// Store tag at field 0
const tag_ptr = c.LLVMBuildStructGEP2(self.e.builder, union_ty, tmp, 0, "ei.tagp");
_ = c.LLVMBuildStore(self.e.builder, tag_val, tag_ptr);
@@ -1389,7 +1389,7 @@ pub const Ops = struct {
const base_kind = c.LLVMGetTypeKind(base_ty);
if (base_kind == c.LLVMStructTypeKind) {
// Tagged union: alloca, store, GEP field 1 (payload area), bitcast, load
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "ep.tmp");
const tmp = self.e.buildEntryAlloca(base_ty, "ep.tmp");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
const payload_ptr = c.LLVMBuildStructGEP2(self.e.builder, base_ty, tmp, 1, "ep.pp");
const typed_ptr = c.LLVMBuildBitCast(self.e.builder, payload_ptr, self.e.cached_ptr, "ep.cast");
@@ -1408,13 +1408,13 @@ pub const Ops = struct {
const kind = c.LLVMGetTypeKind(base_ty);
if (kind == c.LLVMStructTypeKind) {
// Tagged union { header, payload_bytes } — access payload at field 1
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "ug.tmp");
const tmp = self.e.buildEntryAlloca(base_ty, "ug.tmp");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
const payload_ptr = c.LLVMBuildStructGEP2(self.e.builder, base_ty, tmp, 1, "ug.pp");
self.e.mapRef(c.LLVMBuildLoad2(self.e.builder, result_ty, payload_ptr, "ug.val"));
} else {
// Untagged union [N x i8] — alloca, store, reinterpret-load
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "ug.tmp");
const tmp = self.e.buildEntryAlloca(base_ty, "ug.tmp");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
self.e.mapRef(c.LLVMBuildLoad2(self.e.builder, result_ty, tmp, "ug.val"));
}
@@ -1455,7 +1455,7 @@ pub const Ops = struct {
self.e.mapRef(c.LLVMBuildExtractElement(self.e.builder, base, idx32, "ve"));
} else if (kind == c.LLVMArrayTypeKind) {
// Fixed-size array value — alloca, store, GEP, load
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "ig.tmp");
const tmp = self.e.buildEntryAlloca(base_ty, "ig.tmp");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
const elem_ty = self.e.toLLVMType(instruction.ty);
var indices = [_]c.LLVMValueRef{ c.LLVMConstInt(self.e.cached_i64, 0, 0), idx };
@@ -1487,7 +1487,7 @@ pub const Ops = struct {
const kind = c.LLVMGetTypeKind(base_ty);
if (kind == c.LLVMArrayTypeKind) {
// Fixed-size array value — alloca, store, GEP
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "igp.tmp");
const tmp = self.e.buildEntryAlloca(base_ty, "igp.tmp");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
var indices = [_]c.LLVMValueRef{ c.LLVMConstInt(self.e.cached_i64, 0, 0), idx };
self.e.mapRef(c.LLVMBuildGEP2(self.e.builder, base_ty, tmp, &indices, 2, "igp.ptr"));
@@ -1587,7 +1587,7 @@ pub const Ops = struct {
self.e.mapRef(result);
} else if (base_kind == c.LLVMArrayTypeKind) {
// Array: alloca, GEP to element at lo, compute len
const tmp = c.LLVMBuildAlloca(self.e.builder, base_ty, "ss.arr");
const tmp = self.e.buildEntryAlloca(base_ty, "ss.arr");
_ = c.LLVMBuildStore(self.e.builder, base, tmp);
var indices = [_]c.LLVMValueRef{ c.LLVMConstInt(self.e.cached_i64, 0, 0), lo };
const new_ptr = c.LLVMBuildGEP2(self.e.builder, base_ty, tmp, &indices, 2, "ss.ptr");
@@ -1611,7 +1611,7 @@ pub const Ops = struct {
const arr_kind = c.LLVMGetTypeKind(arr_ty);
if (arr_kind == c.LLVMArrayTypeKind) {
const len = c.LLVMGetArrayLength2(arr_ty);
const tmp = c.LLVMBuildAlloca(self.e.builder, arr_ty, "a2s.tmp");
const tmp = self.e.buildEntryAlloca(arr_ty, "a2s.tmp");
_ = c.LLVMBuildStore(self.e.builder, arr, tmp);
var indices = [_]c.LLVMValueRef{ c.LLVMConstInt(self.e.cached_i64, 0, 0), c.LLVMConstInt(self.e.cached_i64, 0, 0) };
const elem_ptr = c.LLVMBuildGEP2(self.e.builder, arr_ty, tmp, &indices, 2, "a2s.ptr");

View File

@@ -1386,6 +1386,33 @@ pub const LLVMEmitter = struct {
self.debugInfo().endFunctionDebug();
}
/// Build an alloca in the current function's ENTRY block, not at the
/// builder's position. An alloca executed inside a loop body allocates
/// fresh stack on every iteration (LLVM only reclaims at `ret`), so any
/// alloca reachable per-instruction must be hoisted here; only entry-block
/// allocas are static frame slots (and mem2reg-promotable). Insertion goes
/// after existing entry allocas; the builder position is restored.
pub fn buildEntryAlloca(self: *LLVMEmitter, ty: c.LLVMTypeRef, name: [*:0]const u8) c.LLVMValueRef {
const cur_bb = c.LLVMGetInsertBlock(self.builder);
const func = c.LLVMGetBasicBlockParent(cur_bb);
const entry_bb = c.LLVMGetEntryBasicBlock(func);
if (entry_bb == cur_bb) {
return c.LLVMBuildAlloca(self.builder, ty, name);
}
var insert_before = c.LLVMGetFirstInstruction(entry_bb);
while (insert_before != null) : (insert_before = c.LLVMGetNextInstruction(insert_before)) {
if (c.LLVMGetInstructionOpcode(insert_before) != c.LLVMAlloca) break;
}
if (insert_before != null) {
c.LLVMPositionBuilderBefore(self.builder, insert_before);
} else {
c.LLVMPositionBuilderAtEnd(self.builder, entry_bb);
}
const result = c.LLVMBuildAlloca(self.builder, ty, name);
c.LLVMPositionBuilderAtEnd(self.builder, cur_bb);
return result;
}
/// After emitting all blocks, fill in PHI incoming values from branch args.
fn fixupPhiNodes(self: *LLVMEmitter, func: *const Function, func_idx: u32) void {
if (self.pending_phis.items.len == 0) return;
@@ -2101,7 +2128,7 @@ pub const LLVMEmitter = struct {
}
// Struct/Array/Vector types: store to alloca, ptrtoint for the pointer
if (kind == c.LLVMStructTypeKind or kind == c.LLVMArrayTypeKind or kind == c.LLVMVectorTypeKind or kind == c.LLVMScalableVectorTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, ty, "ba.tmp");
const tmp = self.buildEntryAlloca(ty, "ba.tmp");
_ = c.LLVMBuildStore(self.builder, val, tmp);
return c.LLVMBuildPtrToInt(self.builder, tmp, self.cached_i64, "ba.p2i");
}
@@ -2279,14 +2306,14 @@ pub const LLVMEmitter = struct {
}
// Struct → Integer (C ABI coercion: store struct to memory, load as integer)
if (val_kind == c.LLVMStructTypeKind and param_kind == c.LLVMIntegerTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, param_ty, "abi.tmp");
const tmp = self.buildEntryAlloca(param_ty, "abi.tmp");
_ = c.LLVMBuildStore(self.builder, c.LLVMConstNull(param_ty), tmp);
_ = c.LLVMBuildStore(self.builder, val, tmp);
return c.LLVMBuildLoad2(self.builder, param_ty, tmp, "abi.coerce");
}
// Integer → Struct (C ABI return coercion: store integer to memory, load as struct)
if (val_kind == c.LLVMIntegerTypeKind and param_kind == c.LLVMStructTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, val_ty, "abi.ret.tmp");
const tmp = self.buildEntryAlloca(val_ty, "abi.ret.tmp");
_ = c.LLVMBuildStore(self.builder, val, tmp);
return c.LLVMBuildLoad2(self.builder, param_ty, tmp, "abi.ret.coerce");
}
@@ -2295,19 +2322,19 @@ pub const LLVMEmitter = struct {
// memory-bitcast pattern as the integer case; the array type carries
// 16 bytes of storage so we alloca with param_ty to guarantee size.
if (val_kind == c.LLVMStructTypeKind and param_kind == c.LLVMArrayTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, param_ty, "abi.struct2arr");
const tmp = self.buildEntryAlloca(param_ty, "abi.struct2arr");
_ = c.LLVMBuildStore(self.builder, val, tmp);
return c.LLVMBuildLoad2(self.builder, param_ty, tmp, "abi.coerce.arr");
}
// Array → Struct (return-side counterpart for 9..16-byte structs)
if (val_kind == c.LLVMArrayTypeKind and param_kind == c.LLVMStructTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, val_ty, "abi.arr2struct");
const tmp = self.buildEntryAlloca(val_ty, "abi.arr2struct");
_ = c.LLVMBuildStore(self.builder, val, tmp);
return c.LLVMBuildLoad2(self.builder, param_ty, tmp, "abi.ret.coerce.arr");
}
// Array → Ptr (array decay: alloca + GEP to first element)
if (val_kind == c.LLVMArrayTypeKind and param_kind == c.LLVMPointerTypeKind) {
const tmp = c.LLVMBuildAlloca(self.builder, val_ty, "ca.arr");
const tmp = self.buildEntryAlloca(val_ty, "ca.arr");
_ = c.LLVMBuildStore(self.builder, val, tmp);
const zero = c.LLVMConstInt(self.cached_i64, 0, 0);
var indices = [_]c.LLVMValueRef{ zero, zero };
@@ -2720,7 +2747,7 @@ pub const LLVMEmitter = struct {
field_val = c.LLVMConstInt(self.cached_i64, 0, 0);
} else {
const base_ty = c.LLVMTypeOf(base_val);
const tmp = c.LLVMBuildAlloca(self.builder, base_ty, "fv.utmp");
const tmp = self.buildEntryAlloca(base_ty, "fv.utmp");
_ = c.LLVMBuildStore(self.builder, base_val, tmp);
const payload_ptr = c.LLVMBuildStructGEP2(self.builder, base_ty, tmp, 1, "fv.pp");
const field_llvm_ty = self.toLLVMType(field.ty);