diff --git a/examples/0047-basic-loop-local-stack-reuse.sx b/examples/0047-basic-loop-local-stack-reuse.sx new file mode 100644 index 0000000..e980fed --- /dev/null +++ b/examples/0047-basic-loop-local-stack-reuse.sx @@ -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 +} diff --git a/examples/expected/0031-basic-local-fn-return.ir b/examples/expected/0031-basic-local-fn-return.ir index 129c088..ae058c2 100644 --- a/examples/expected/0031-basic-local-fn-return.ir +++ b/examples/expected/0031-basic-local-fn-return.ir @@ -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 diff --git a/examples/expected/0032-basic-ufcs-return-type.ir b/examples/expected/0032-basic-ufcs-return-type.ir index 9a2934a..c1de814 100644 --- a/examples/expected/0032-basic-ufcs-return-type.ir +++ b/examples/expected/0032-basic-ufcs-return-type.ir @@ -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 diff --git a/examples/expected/0044-basic-default-arg-expansion.ir b/examples/expected/0044-basic-default-arg-expansion.ir index 23aca2b..64d3f26 100644 --- a/examples/expected/0044-basic-default-arg-expansion.ir +++ b/examples/expected/0044-basic-default-arg-expansion.ir @@ -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 diff --git a/examples/expected/0047-basic-loop-local-stack-reuse.exit b/examples/expected/0047-basic-loop-local-stack-reuse.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/0047-basic-loop-local-stack-reuse.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/0047-basic-loop-local-stack-reuse.stderr b/examples/expected/0047-basic-loop-local-stack-reuse.stderr new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/expected/0047-basic-loop-local-stack-reuse.stderr @@ -0,0 +1 @@ + diff --git a/examples/expected/0047-basic-loop-local-stack-reuse.stdout b/examples/expected/0047-basic-loop-local-stack-reuse.stdout new file mode 100644 index 0000000..96f2053 --- /dev/null +++ b/examples/expected/0047-basic-loop-local-stack-reuse.stdout @@ -0,0 +1,2 @@ +sum=499999500000 +n=3000000 diff --git a/examples/expected/0107-types-int-cmp-in-float-ternary.ir b/examples/expected/0107-types-int-cmp-in-float-ternary.ir index 1c1b3d0..95cae72 100644 --- a/examples/expected/0107-types-int-cmp-in-float-ternary.ir +++ b/examples/expected/0107-types-int-cmp-in-float-ternary.ir @@ -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 diff --git a/examples/expected/0200-generics-generic.ir b/examples/expected/0200-generics-generic.ir index 9d2221b..e1105fb 100644 --- a/examples/expected/0200-generics-generic.ir +++ b/examples/expected/0200-generics-generic.ir @@ -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 diff --git a/examples/expected/0201-generics-generic-struct.ir b/examples/expected/0201-generics-generic-struct.ir index 2d35d53..4c333e8 100644 --- a/examples/expected/0201-generics-generic-struct.ir +++ b/examples/expected/0201-generics-generic-struct.ir @@ -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 diff --git a/examples/expected/0301-closures-fn-pointers.ir b/examples/expected/0301-closures-fn-pointers.ir index 8e5cbcf..33fa96c 100644 --- a/examples/expected/0301-closures-fn-pointers.ir +++ b/examples/expected/0301-closures-fn-pointers.ir @@ -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 diff --git a/examples/expected/0400-protocols-impl-for-builtin.ir b/examples/expected/0400-protocols-impl-for-builtin.ir index f4b164d..f1a3c48 100644 --- a/examples/expected/0400-protocols-impl-for-builtin.ir +++ b/examples/expected/0400-protocols-impl-for-builtin.ir @@ -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 diff --git a/examples/expected/0413-protocols-parameterized-protocol-value.ir b/examples/expected/0413-protocols-parameterized-protocol-value.ir index b2e672c..5744d00 100644 --- a/examples/expected/0413-protocols-parameterized-protocol-value.ir +++ b/examples/expected/0413-protocols-parameterized-protocol-value.ir @@ -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 diff --git a/examples/expected/0414-protocols-generic-struct-protocol-erase.ir b/examples/expected/0414-protocols-generic-struct-protocol-erase.ir index 3f9e0d9..6c93e30 100644 --- a/examples/expected/0414-protocols-generic-struct-protocol-erase.ir +++ b/examples/expected/0414-protocols-generic-struct-protocol-erase.ir @@ -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 diff --git a/examples/expected/0416-protocols-auto-type-erasure.ir b/examples/expected/0416-protocols-auto-type-erasure.ir index f148656..f940fb8 100644 --- a/examples/expected/0416-protocols-auto-type-erasure.ir +++ b/examples/expected/0416-protocols-auto-type-erasure.ir @@ -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 diff --git a/examples/expected/0507-packs-pack-mono-dedup.ir b/examples/expected/0507-packs-pack-mono-dedup.ir index 3ba37e7..b4a27b2 100644 --- a/examples/expected/0507-packs-pack-mono-dedup.ir +++ b/examples/expected/0507-packs-pack-mono-dedup.ir @@ -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 diff --git a/examples/expected/0513-packs-pack-mixed-comptime.ir b/examples/expected/0513-packs-pack-mixed-comptime.ir index b8e9f89..4aaea75 100644 --- a/examples/expected/0513-packs-pack-mixed-comptime.ir +++ b/examples/expected/0513-packs-pack-mixed-comptime.ir @@ -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 diff --git a/examples/expected/0518-packs-pack-value-dispatch.ir b/examples/expected/0518-packs-pack-value-dispatch.ir index 465fcab..734785a 100644 --- a/examples/expected/0518-packs-pack-value-dispatch.ir +++ b/examples/expected/0518-packs-pack-value-dispatch.ir @@ -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 diff --git a/examples/expected/0528-packs-protocol-pack-methods.ir b/examples/expected/0528-packs-protocol-pack-methods.ir index ccffde8..e8c5d1e 100644 --- a/examples/expected/0528-packs-protocol-pack-methods.ir +++ b/examples/expected/0528-packs-protocol-pack-methods.ir @@ -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 diff --git a/examples/expected/0903-optionals-optional-roundtrip.ir b/examples/expected/0903-optionals-optional-roundtrip.ir index af13535..9166f49 100644 --- a/examples/expected/0903-optionals-optional-roundtrip.ir +++ b/examples/expected/0903-optionals-optional-roundtrip.ir @@ -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 diff --git a/examples/expected/0904-optionals-any-to-string-optional.ir b/examples/expected/0904-optionals-any-to-string-optional.ir index e2a465f..6571adc 100644 --- a/examples/expected/0904-optionals-any-to-string-optional.ir +++ b/examples/expected/0904-optionals-any-to-string-optional.ir @@ -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 diff --git a/examples/expected/1004-errors-try.ir b/examples/expected/1004-errors-try.ir index d091a5b..8cfbd70 100644 --- a/examples/expected/1004-errors-try.ir +++ b/examples/expected/1004-errors-try.ir @@ -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 diff --git a/examples/expected/1006-errors-inferred-error-sets.ir b/examples/expected/1006-errors-inferred-error-sets.ir index 33a164b..e197571 100644 --- a/examples/expected/1006-errors-inferred-error-sets.ir +++ b/examples/expected/1006-errors-inferred-error-sets.ir @@ -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 diff --git a/examples/expected/1009-errors-catch.ir b/examples/expected/1009-errors-catch.ir index 72ef893..9a44a9e 100644 --- a/examples/expected/1009-errors-catch.ir +++ b/examples/expected/1009-errors-catch.ir @@ -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 diff --git a/examples/expected/1309-ffi-objc-class-method-lowering.ir b/examples/expected/1309-ffi-objc-class-method-lowering.ir index 54b3dbf..c04d484 100644 --- a/examples/expected/1309-ffi-objc-class-method-lowering.ir +++ b/examples/expected/1309-ffi-objc-class-method-lowering.ir @@ -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 diff --git a/examples/expected/1314-ffi-objc-class-dealloc-roundtrip.ir b/examples/expected/1314-ffi-objc-class-dealloc-roundtrip.ir index 4b28bd2..a15ad93 100644 --- a/examples/expected/1314-ffi-objc-class-dealloc-roundtrip.ir +++ b/examples/expected/1314-ffi-objc-class-dealloc-roundtrip.ir @@ -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 diff --git a/examples/expected/1319-ffi-objc-property-sx-defined.ir b/examples/expected/1319-ffi-objc-property-sx-defined.ir index d682c2b..38eb321 100644 --- a/examples/expected/1319-ffi-objc-property-sx-defined.ir +++ b/examples/expected/1319-ffi-objc-property-sx-defined.ir @@ -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 diff --git a/examples/expected/1329-ffi-objc-call-03-selector-sharing.ir b/examples/expected/1329-ffi-objc-call-03-selector-sharing.ir index 0bd7302..1efd580 100644 --- a/examples/expected/1329-ffi-objc-call-03-selector-sharing.ir +++ b/examples/expected/1329-ffi-objc-call-03-selector-sharing.ir @@ -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 diff --git a/examples/expected/1332-ffi-objc-call-06-sret-return.ir b/examples/expected/1332-ffi-objc-call-06-sret-return.ir index 85a0636..31a5f68 100644 --- a/examples/expected/1332-ffi-objc-call-06-sret-return.ir +++ b/examples/expected/1332-ffi-objc-call-06-sret-return.ir @@ -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 diff --git a/examples/expected/1347-ffi-objc-dsl-07-mangling-table.ir b/examples/expected/1347-ffi-objc-dsl-07-mangling-table.ir index e2f8750..3355369 100644 --- a/examples/expected/1347-ffi-objc-dsl-07-mangling-table.ir +++ b/examples/expected/1347-ffi-objc-dsl-07-mangling-table.ir @@ -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 diff --git a/examples/expected/1402-ffi-jni-call-03-methodid-sharing.ir b/examples/expected/1402-ffi-jni-call-03-methodid-sharing.ir index 086ecfc..82ae255 100644 --- a/examples/expected/1402-ffi-jni-call-03-methodid-sharing.ir +++ b/examples/expected/1402-ffi-jni-call-03-methodid-sharing.ir @@ -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 diff --git a/examples/expected/1403-ffi-jni-call-04-jint-return.ir b/examples/expected/1403-ffi-jni-call-04-jint-return.ir index f0965d4..4cabccf 100644 --- a/examples/expected/1403-ffi-jni-call-04-jint-return.ir +++ b/examples/expected/1403-ffi-jni-call-04-jint-return.ir @@ -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 diff --git a/examples/expected/1404-ffi-jni-call-05-jlong-return.ir b/examples/expected/1404-ffi-jni-call-05-jlong-return.ir index 0344725..dbc0bb0 100644 --- a/examples/expected/1404-ffi-jni-call-05-jlong-return.ir +++ b/examples/expected/1404-ffi-jni-call-05-jlong-return.ir @@ -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 diff --git a/examples/expected/1405-ffi-jni-call-06-jdouble-return.ir b/examples/expected/1405-ffi-jni-call-06-jdouble-return.ir index 26558b7..5c28303 100644 --- a/examples/expected/1405-ffi-jni-call-06-jdouble-return.ir +++ b/examples/expected/1405-ffi-jni-call-06-jdouble-return.ir @@ -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 diff --git a/examples/expected/1406-ffi-jni-call-07-jboolean-return.ir b/examples/expected/1406-ffi-jni-call-07-jboolean-return.ir index aca6390..e3eb6be 100644 --- a/examples/expected/1406-ffi-jni-call-07-jboolean-return.ir +++ b/examples/expected/1406-ffi-jni-call-07-jboolean-return.ir @@ -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 diff --git a/examples/expected/1407-ffi-jni-call-08-jobject-return.ir b/examples/expected/1407-ffi-jni-call-08-jobject-return.ir index 65ca09b..4a2d4b2 100644 --- a/examples/expected/1407-ffi-jni-call-08-jobject-return.ir +++ b/examples/expected/1407-ffi-jni-call-08-jobject-return.ir @@ -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 diff --git a/examples/expected/1408-ffi-jni-call-09-static.ir b/examples/expected/1408-ffi-jni-call-09-static.ir index 5e92c38..4309382 100644 --- a/examples/expected/1408-ffi-jni-call-09-static.ir +++ b/examples/expected/1408-ffi-jni-call-09-static.ir @@ -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 diff --git a/examples/expected/1418-ffi-jni-class-08-call.ir b/examples/expected/1418-ffi-jni-class-08-call.ir index 20eb039..33220cf 100644 --- a/examples/expected/1418-ffi-jni-class-08-call.ir +++ b/examples/expected/1418-ffi-jni-class-08-call.ir @@ -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 diff --git a/examples/expected/1421-ffi-jni-env-02-lexical-direct.ir b/examples/expected/1421-ffi-jni-env-02-lexical-direct.ir index ad00e91..7b18dfd 100644 --- a/examples/expected/1421-ffi-jni-env-02-lexical-direct.ir +++ b/examples/expected/1421-ffi-jni-env-02-lexical-direct.ir @@ -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 diff --git a/issues/0109-loop-body-alloca-stack-growth.md b/issues/0109-loop-body-alloca-stack-growth.md new file mode 100644 index 0000000..98e4059 --- /dev/null +++ b/issues/0109-loop-body-alloca-stack-growth.md @@ -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. diff --git a/src/backend/llvm/abi.zig b/src/backend/llvm/abi.zig index e02ca48..7247917 100644 --- a/src/backend/llvm/abi.zig +++ b/src/backend/llvm/abi.zig @@ -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; } diff --git a/src/backend/llvm/ops.zig b/src/backend/llvm/ops.zig index f7865bd..a22b8b6 100644 --- a/src/backend/llvm/ops.zig +++ b/src/backend/llvm/ops.zig @@ -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"); diff --git a/src/ir/emit_llvm.zig b/src/ir/emit_llvm.zig index 48a68b8..966c34d 100644 --- a/src/ir/emit_llvm.zig +++ b/src/ir/emit_llvm.zig @@ -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);