diff --git a/examples/0164-types-reflection-any-tag.sx b/examples/0164-types-reflection-any-tag.sx new file mode 100644 index 0000000..f343c5f --- /dev/null +++ b/examples/0164-types-reflection-any-tag.sx @@ -0,0 +1,43 @@ +// Reflection builtins on an `Any` consult the Any's runtime TYPE-TAG, +// not its raw payload. +// +// An `Any` is both a type AND a value: it can hold a runtime *value* +// (whose runtime tag names the value's type) or a *Type value* (the +// `{ .any, tid }` shape `type_of` / a `Type` literal produce). A +// reflection builtin must branch on the tag: +// - holds a value → report the type OF that value (the tag). +// - holds a Type → name the held type (the payload). +// +// Regression (issue 0090, attempt 3): `type_name` / `type_is_unsigned` +// used to read an Any's payload as a TypeId index unconditionally, so +// `type_name(av)` for `av : Any = 6` returned `u8` (types[6]) and +// `type_is_unsigned(av)` returned true. Both now read the runtime tag. + +#import "modules/std.sx"; + +main :: () { + // Any holding a VALUE — reflection names the value's type. + av : Any = 6; // 6 is s64 + print("type_name(av)={}\n", type_name(av)); + print("type_is_unsigned(av)={}\n", type_is_unsigned(av)); + print("print(av)={}\n", av); // formatter already used the tag + + u : u32 = 7; + au : Any = u; + print("type_name(au)={}\n", type_name(au)); + print("type_is_unsigned(au)={}\n", type_is_unsigned(au)); + print("print(au)={}\n", au); + + sv : Any = "hi"; + print("type_name(sv)={}\n", type_name(sv)); + + // Any holding a TYPE value — reflection names the held type. + x : u64 = 9; + at : Any = type_of(x); + print("type_name(at)={}\n", type_name(at)); + print("type_is_unsigned(at)={}\n", type_is_unsigned(at)); + print("print(at)={}\n", at); + + // A direct runtime Type value is unchanged. + print("type_is_unsigned(type_of(x))={}\n", type_is_unsigned(type_of(x))); +} diff --git a/examples/expected/0031-basic-local-fn-return.ir b/examples/expected/0031-basic-local-fn-return.ir index 51870d4..129c088 100644 --- a/examples/expected/0031-basic-local-fn-return.ir +++ b/examples/expected/0031-basic-local-fn-return.ir @@ -1247,8 +1247,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [89 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [89 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1370,8 +1373,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [89 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [89 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1381,15 +1387,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1397,16 +1403,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1426,98 +1432,98 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { i32, i32 }, ptr %ua.ptr88, align 4 - %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { i32, i32 }, ptr %ua.ptr92, align 4 + %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { float, float }, ptr %ua.ptr92, align 4 - %callN = call { ptr, i64 } @struct_to_string__Shape.rect(ptr %0, { float, float } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { float, float }, ptr %ua.ptr96, align 4 + %callN = call { ptr, i64 } @struct_to_string__Shape.rect(ptr %0, { float, float } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1531,22 +1537,22 @@ dispatch.default.169: ; preds = %match.arm.44 br label %dispatch.merge.168 dispatch.case.170: ; preds = %match.arm.44 - %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw96) + %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw100) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.168 dispatch.case.171: ; preds = %match.arm.44 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw98) + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw102) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.168 dispatch.case.172: ; preds = %match.arm.44 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr101 = inttoptr i64 %ua.raw100 to ptr - %ua.load102 = load { i64, [8 x i8] }, ptr %ua.ptr101, align 8 - %callN = call { ptr, i64 } @enum_to_string__Shape(ptr %0, { i64, [8 x i8] } %ua.load102) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr + %ua.load106 = load { i64, [8 x i8] }, ptr %ua.ptr105, align 8 + %callN = call { ptr, i64 } @enum_to_string__Shape(ptr %0, { i64, [8 x i8] } %ua.load106) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.168 @@ -1560,26 +1566,26 @@ dispatch.default.180: ; preds = %match.arm.47 br label %dispatch.merge.179 dispatch.case.181: ; preds = %match.arm.47 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr - %ua.load107 = load [4 x i64], ptr %ua.ptr106, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load107) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr + %ua.load111 = load [4 x i64], ptr %ua.ptr110, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.179 dispatch.case.182: ; preds = %match.arm.47 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr - %ua.load111 = load [2 x { i64, i64 }], ptr %ua.ptr110, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load111) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr + %ua.load115 = load [2 x { i64, i64 }], ptr %ua.ptr114, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.179 dispatch.case.183: ; preds = %match.arm.47 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr - %ua.load115 = load [1 x { i64, i64 }], ptr %ua.ptr114, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load115) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr + %ua.load119 = load [1 x { i64, i64 }], ptr %ua.ptr118, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.179 @@ -1593,18 +1599,18 @@ dispatch.default.200: ; preds = %match.arm.48 br label %dispatch.merge.199 dispatch.case.201: ; preds = %match.arm.48 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr119 = inttoptr i64 %ua.raw118 to ptr - %ua.load120 = load { ptr, i64 }, ptr %ua.ptr119, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load120) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr + %ua.load124 = load { ptr, i64 }, ptr %ua.ptr123, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 dispatch.case.202: ; preds = %match.arm.48 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr - %ua.load124 = load { ptr, i64 }, ptr %ua.ptr123, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load124) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr127 = inttoptr i64 %ua.raw126 to ptr + %ua.load128 = load { ptr, i64 }, ptr %ua.ptr127, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 @@ -1618,149 +1624,149 @@ dispatch.default.214: ; preds = %match.arm.49 br label %dispatch.merge.213 dispatch.case.215: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw127 to ptr + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw131 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.218: ; preds = %match.arm.49 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.219: ; preds = %match.arm.49 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.220: ; preds = %match.arm.49 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.221: ; preds = %match.arm.49 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.222: ; preds = %match.arm.49 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.223: ; preds = %match.arm.49 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.224: ; preds = %match.arm.49 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.225: ; preds = %match.arm.49 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.226: ; preds = %match.arm.49 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.227: ; preds = %match.arm.49 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.228: ; preds = %match.arm.49 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.229: ; preds = %match.arm.49 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.230: ; preds = %match.arm.49 - %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 - %iNp172 = inttoptr i64 %ua.raw171 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp172) + %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 + %iNp176 = inttoptr i64 %ua.raw175 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp176) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.231: ; preds = %match.arm.49 - %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 - %iNp175 = inttoptr i64 %ua.raw174 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp175) + %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 + %iNp179 = inttoptr i64 %ua.raw178 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp179) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.232: ; preds = %match.arm.49 - %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 - %iNp178 = inttoptr i64 %ua.raw177 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp178) + %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 + %iNp182 = inttoptr i64 %ua.raw181 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp182) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.233: ; preds = %match.arm.49 - %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 - %iNp181 = inttoptr i64 %ua.raw180 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp181) + %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 + %iNp185 = inttoptr i64 %ua.raw184 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp185) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.234: ; preds = %match.arm.49 - %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 - %iNp184 = inttoptr i64 %ua.raw183 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Shape(ptr %0, ptr %iNp184) + %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 + %iNp188 = inttoptr i64 %ua.raw187 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Shape(ptr %0, ptr %iNp188) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 dispatch.case.235: ; preds = %match.arm.49 - %ua.raw186 = extractvalue { i64, i64 } %loadN, 1 - %iNp187 = inttoptr i64 %ua.raw186 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp187) + %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 + %iNp191 = inttoptr i64 %ua.raw190 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp191) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.213 } diff --git a/examples/expected/0032-basic-ufcs-return-type.ir b/examples/expected/0032-basic-ufcs-return-type.ir index 47f1b10..9a2934a 100644 --- a/examples/expected/0032-basic-ufcs-return-type.ir +++ b/examples/expected/0032-basic-ufcs-return-type.ir @@ -1210,8 +1210,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [81 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [81 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1328,8 +1331,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [81 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [81 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1339,15 +1345,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1355,16 +1361,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1384,90 +1390,90 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { i32, i32 }, ptr %ua.ptr88, align 4 - %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { i32, i32 }, ptr %ua.ptr92, align 4 + %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1481,14 +1487,14 @@ dispatch.default.163: ; preds = %match.arm.44 br label %dispatch.merge.162 dispatch.case.164: ; preds = %match.arm.44 - %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw92) + %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw96) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.162 dispatch.case.165: ; preds = %match.arm.44 - %ua.raw94 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw94) + %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw98) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.162 @@ -1502,18 +1508,18 @@ dispatch.default.171: ; preds = %match.arm.47 br label %dispatch.merge.170 dispatch.case.172: ; preds = %match.arm.47 - %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr - %ua.load99 = load [4 x i64], ptr %ua.ptr98, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load99) + %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr + %ua.load103 = load [4 x i64], ptr %ua.ptr102, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load103) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 dispatch.case.173: ; preds = %match.arm.47 - %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr - %ua.load103 = load [1 x { i64, i64 }], ptr %ua.ptr102, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load103) + %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr + %ua.load107 = load [1 x { i64, i64 }], ptr %ua.ptr106, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load107) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 @@ -1527,18 +1533,18 @@ dispatch.default.185: ; preds = %match.arm.48 br label %dispatch.merge.184 dispatch.case.186: ; preds = %match.arm.48 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr107 = inttoptr i64 %ua.raw106 to ptr - %ua.load108 = load { ptr, i64 }, ptr %ua.ptr107, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load108) + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr111 = inttoptr i64 %ua.raw110 to ptr + %ua.load112 = load { ptr, i64 }, ptr %ua.ptr111, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load112) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.187: ; preds = %match.arm.48 - %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr111 = inttoptr i64 %ua.raw110 to ptr - %ua.load112 = load { ptr, i64 }, ptr %ua.ptr111, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load112) + %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr115 = inttoptr i64 %ua.raw114 to ptr + %ua.load116 = load { ptr, i64 }, ptr %ua.ptr115, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load116) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 @@ -1552,135 +1558,135 @@ dispatch.default.199: ; preds = %match.arm.49 br label %dispatch.merge.198 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw115 to ptr + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw119 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %iNp118 = inttoptr i64 %ua.raw117 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp118) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %iNp122 = inttoptr i64 %ua.raw121 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp122) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.204: ; preds = %match.arm.49 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.205: ; preds = %match.arm.49 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.206: ; preds = %match.arm.49 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.207: ; preds = %match.arm.49 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.208: ; preds = %match.arm.49 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.209: ; preds = %match.arm.49 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.210: ; preds = %match.arm.49 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.211: ; preds = %match.arm.49 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.212: ; preds = %match.arm.49 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.213: ; preds = %match.arm.49 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.214: ; preds = %match.arm.49 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.215: ; preds = %match.arm.49 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 dispatch.case.218: ; preds = %match.arm.49 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.198 } diff --git a/examples/expected/0044-basic-default-arg-expansion.ir b/examples/expected/0044-basic-default-arg-expansion.ir index 844e197..23aca2b 100644 --- a/examples/expected/0044-basic-default-arg-expansion.ir +++ b/examples/expected/0044-basic-default-arg-expansion.ir @@ -1171,8 +1171,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [74 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [74 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1281,8 +1284,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [74 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [74 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1292,15 +1298,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1308,16 +1314,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1337,74 +1343,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1418,26 +1424,26 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.154: ; preds = %match.arm.47 - %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr - %ua.load90 = load [3 x { i64, i64 }], ptr %ua.ptr89, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load90) + %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr + %ua.load94 = load [3 x { i64, i64 }], ptr %ua.ptr93, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load94) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1451,18 +1457,18 @@ dispatch.default.171: ; preds = %match.arm.48 br label %dispatch.merge.170 dispatch.case.172: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 dispatch.case.173: ; preds = %match.arm.48 - %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr - %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) + %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr + %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load103) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 @@ -1476,135 +1482,135 @@ dispatch.default.185: ; preds = %match.arm.49 br label %dispatch.merge.184 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw102 to ptr + %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw106 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %iNp105 = inttoptr i64 %ua.raw104 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %iNp109 = inttoptr i64 %ua.raw108 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 - %iNp108 = inttoptr i64 %ua.raw107 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) + %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 + %iNp112 = inttoptr i64 %ua.raw111 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp112) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 - %iNp111 = inttoptr i64 %ua.raw110 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) + %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 + %iNp115 = inttoptr i64 %ua.raw114 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %iNp114 = inttoptr i64 %ua.raw113 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %iNp118 = inttoptr i64 %ua.raw117 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp118) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 - %iNp117 = inttoptr i64 %ua.raw116 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) + %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 + %iNp121 = inttoptr i64 %ua.raw120 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp121) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 - %iNp120 = inttoptr i64 %ua.raw119 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) + %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 + %iNp124 = inttoptr i64 %ua.raw123 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %iNp123 = inttoptr i64 %ua.raw122 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %iNp127 = inttoptr i64 %ua.raw126 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp127) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %iNp126 = inttoptr i64 %ua.raw125 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %iNp130 = inttoptr i64 %ua.raw129 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp130) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 - %iNp129 = inttoptr i64 %ua.raw128 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) + %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 + %iNp133 = inttoptr i64 %ua.raw132 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp133) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 - %iNp132 = inttoptr i64 %ua.raw131 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) + %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 + %iNp136 = inttoptr i64 %ua.raw135 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp136) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %iNp135 = inttoptr i64 %ua.raw134 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp135) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %iNp139 = inttoptr i64 %ua.raw138 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp139) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 - %iNp138 = inttoptr i64 %ua.raw137 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp138) + %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 + %iNp142 = inttoptr i64 %ua.raw141 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.199: ; preds = %match.arm.49 - %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 - %iNp141 = inttoptr i64 %ua.raw140 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp141) + %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 + %iNp145 = inttoptr i64 %ua.raw144 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %iNp144 = inttoptr i64 %ua.raw143 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp144) + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %iNp148 = inttoptr i64 %ua.raw147 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 - %iNp147 = inttoptr i64 %ua.raw146 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp147) + %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 + %iNp151 = inttoptr i64 %ua.raw150 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 - %iNp150 = inttoptr i64 %ua.raw149 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp150) + %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 + %iNp154 = inttoptr i64 %ua.raw153 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 - %iNp153 = inttoptr i64 %ua.raw152 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp153) + %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 + %iNp157 = inttoptr i64 %ua.raw156 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.204: ; preds = %match.arm.49 - %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 - %iNp156 = inttoptr i64 %ua.raw155 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp156) + %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 + %iNp160 = inttoptr i64 %ua.raw159 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp160) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 } 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 8c06300..1c1b3d0 100644 --- a/examples/expected/0107-types-int-cmp-in-float-ternary.ir +++ b/examples/expected/0107-types-int-cmp-in-float-ternary.ir @@ -1149,8 +1149,11 @@ match.arm.43: ; preds = %entry match.arm.44: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [71 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [71 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.58, label %if.else.59 @@ -1257,8 +1260,11 @@ match.arm.55: ; No predecessors! match.arm.56: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [71 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [71 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.42 @@ -1268,15 +1274,15 @@ match.unr.57: ; preds = %entry if.then.58: ; preds = %match.arm.44 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.60 if.else.59: ; preds = %match.arm.44 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.60 @@ -1284,16 +1290,16 @@ if.merge.60: ; preds = %if.else.59, %if.the br label %match.merge.42 f32.unbox.86: ; preds = %match.arm.47 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.88 f64.unbox.87: ; preds = %match.arm.47 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.88 @@ -1313,74 +1319,74 @@ dispatch.default.100: ; preds = %match.arm.48 br label %dispatch.merge.99 dispatch.case.101: ; preds = %match.arm.48 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.102: ; preds = %match.arm.48 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.103: ; preds = %match.arm.48 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.104: ; preds = %match.arm.48 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.105: ; preds = %match.arm.48 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.106: ; preds = %match.arm.48 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.107: ; preds = %match.arm.48 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.108: ; preds = %match.arm.48 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 dispatch.case.109: ; preds = %match.arm.48 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.99 @@ -1394,18 +1400,18 @@ dispatch.default.156: ; preds = %match.arm.52 br label %dispatch.merge.155 dispatch.case.157: ; preds = %match.arm.52 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.155 dispatch.case.158: ; preds = %match.arm.52 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.155 @@ -1419,18 +1425,18 @@ dispatch.default.170: ; preds = %match.arm.53 br label %dispatch.merge.169 dispatch.case.171: ; preds = %match.arm.53 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load { ptr, i64 }, ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.169 dispatch.case.172: ; preds = %match.arm.53 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.169 @@ -1444,128 +1450,128 @@ dispatch.default.184: ; preds = %match.arm.54 br label %dispatch.merge.183 dispatch.case.185: ; preds = %match.arm.54 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw98 to ptr + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw102 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.186: ; preds = %match.arm.54 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %iNp101 = inttoptr i64 %ua.raw100 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp101) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %iNp105 = inttoptr i64 %ua.raw104 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.187: ; preds = %match.arm.54 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp104 = inttoptr i64 %ua.raw103 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp104) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp108 = inttoptr i64 %ua.raw107 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.188: ; preds = %match.arm.54 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %iNp107 = inttoptr i64 %ua.raw106 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp107) + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %iNp111 = inttoptr i64 %ua.raw110 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.189: ; preds = %match.arm.54 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %iNp110 = inttoptr i64 %ua.raw109 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp110) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %iNp114 = inttoptr i64 %ua.raw113 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.190: ; preds = %match.arm.54 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %iNp113 = inttoptr i64 %ua.raw112 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp113) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %iNp117 = inttoptr i64 %ua.raw116 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.191: ; preds = %match.arm.54 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp116 = inttoptr i64 %ua.raw115 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp116) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp120 = inttoptr i64 %ua.raw119 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.192: ; preds = %match.arm.54 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp119 = inttoptr i64 %ua.raw118 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp119) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp123 = inttoptr i64 %ua.raw122 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.193: ; preds = %match.arm.54 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %iNp122 = inttoptr i64 %ua.raw121 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp122) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %iNp126 = inttoptr i64 %ua.raw125 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.194: ; preds = %match.arm.54 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.195: ; preds = %match.arm.54 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.196: ; preds = %match.arm.54 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.197: ; preds = %match.arm.54 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.198: ; preds = %match.arm.54 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.199: ; preds = %match.arm.54 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.200: ; preds = %match.arm.54 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.201: ; preds = %match.arm.54 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 dispatch.case.202: ; preds = %match.arm.54 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.183 } diff --git a/examples/expected/0164-types-reflection-any-tag.exit b/examples/expected/0164-types-reflection-any-tag.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/0164-types-reflection-any-tag.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/0164-types-reflection-any-tag.stderr b/examples/expected/0164-types-reflection-any-tag.stderr new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/expected/0164-types-reflection-any-tag.stderr @@ -0,0 +1 @@ + diff --git a/examples/expected/0164-types-reflection-any-tag.stdout b/examples/expected/0164-types-reflection-any-tag.stdout new file mode 100644 index 0000000..4eafff9 --- /dev/null +++ b/examples/expected/0164-types-reflection-any-tag.stdout @@ -0,0 +1,11 @@ +type_name(av)=s64 +type_is_unsigned(av)=false +print(av)=6 +type_name(au)=u32 +type_is_unsigned(au)=true +print(au)=7 +type_name(sv)=string +type_name(at)=u64 +type_is_unsigned(at)=true +print(at)=u64 +type_is_unsigned(type_of(x))=true diff --git a/examples/expected/0200-generics-generic.ir b/examples/expected/0200-generics-generic.ir index a776d64..9d2221b 100644 --- a/examples/expected/0200-generics-generic.ir +++ b/examples/expected/0200-generics-generic.ir @@ -1150,8 +1150,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [70 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [70 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1258,8 +1261,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [70 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [70 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1269,15 +1275,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1285,16 +1291,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1314,74 +1320,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1395,18 +1401,18 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1420,18 +1426,18 @@ dispatch.default.165: ; preds = %match.arm.48 br label %dispatch.merge.164 dispatch.case.166: ; preds = %match.arm.48 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load { ptr, i64 }, ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 dispatch.case.167: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 @@ -1445,128 +1451,128 @@ dispatch.default.179: ; preds = %match.arm.49 br label %dispatch.merge.178 dispatch.case.180: ; preds = %match.arm.49 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw98 to ptr + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw102 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.181: ; preds = %match.arm.49 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %iNp101 = inttoptr i64 %ua.raw100 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp101) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %iNp105 = inttoptr i64 %ua.raw104 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.182: ; preds = %match.arm.49 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp104 = inttoptr i64 %ua.raw103 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp104) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp108 = inttoptr i64 %ua.raw107 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.183: ; preds = %match.arm.49 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %iNp107 = inttoptr i64 %ua.raw106 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp107) + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %iNp111 = inttoptr i64 %ua.raw110 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.184: ; preds = %match.arm.49 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %iNp110 = inttoptr i64 %ua.raw109 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp110) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %iNp114 = inttoptr i64 %ua.raw113 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.185: ; preds = %match.arm.49 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %iNp113 = inttoptr i64 %ua.raw112 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp113) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %iNp117 = inttoptr i64 %ua.raw116 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp116 = inttoptr i64 %ua.raw115 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp116) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp120 = inttoptr i64 %ua.raw119 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp119 = inttoptr i64 %ua.raw118 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp119) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp123 = inttoptr i64 %ua.raw122 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %iNp122 = inttoptr i64 %ua.raw121 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp122) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %iNp126 = inttoptr i64 %ua.raw125 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 } diff --git a/examples/expected/0201-generics-generic-struct.ir b/examples/expected/0201-generics-generic-struct.ir index db6deaf..2d35d53 100644 --- a/examples/expected/0201-generics-generic-struct.ir +++ b/examples/expected/0201-generics-generic-struct.ir @@ -1303,8 +1303,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [97 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [97 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1437,8 +1440,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [97 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag40 = extractvalue { i64, i64 } %loadN, 0 + %refl.val41 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype42 = icmp eq i64 %refl.tag40, 13 + %refl.tid43 = select i1 %refl.istype42, i64 %refl.val41, i64 %refl.tag40 + %tn.gep = getelementptr inbounds [97 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid43 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1448,15 +1454,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) + %ua.raw45 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw45) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) + %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw48) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1464,16 +1470,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw46 to i32 + %ua.raw50 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw50 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw47 to double + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw51 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1493,122 +1499,122 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { ptr, ptr, ptr }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load {}, ptr %ua.ptr60, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load {}, ptr %ua.ptr64, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { ptr, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr88, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { [16 x float] }, ptr %ua.ptr88, align 4 - %callN = call { ptr, i64 } @struct_to_string__Mat4(ptr %0, { [16 x float] } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { [16 x float] }, ptr %ua.ptr92, align 4 + %callN = call { ptr, i64 } @struct_to_string__Mat4(ptr %0, { [16 x float] } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { float, float }, ptr %ua.ptr92, align 4 - %callN = call { ptr, i64 } @struct_to_string__Vec2(ptr %0, { float, float } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { float, float }, ptr %ua.ptr96, align 4 + %callN = call { ptr, i64 } @struct_to_string__Vec2(ptr %0, { float, float } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load { <3 x float> }, ptr %ua.ptr96, align 16 - %callN = call { ptr, i64 } @struct_to_string__Vec__3__f32(ptr %0, { <3 x float> } %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load { <3 x float> }, ptr %ua.ptr100, align 16 + %callN = call { ptr, i64 } @struct_to_string__Vec__3__f32(ptr %0, { <3 x float> } %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.108: ; preds = %match.arm.43 - %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr - %ua.load101 = load { <3 x float> }, ptr %ua.ptr100, align 16 - %callN = call { ptr, i64 } @struct_to_string__Vec3(ptr %0, { <3 x float> } %ua.load101) + %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr + %ua.load105 = load { <3 x float> }, ptr %ua.ptr104, align 16 + %callN = call { ptr, i64 } @struct_to_string__Vec3(ptr %0, { <3 x float> } %ua.load105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.109: ; preds = %match.arm.43 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr - %ua.load105 = load { i32, i32 }, ptr %ua.ptr104, align 4 - %callN = call { ptr, i64 } @struct_to_string__Complex__u32(ptr %0, { i32, i32 } %ua.load105) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr108 = inttoptr i64 %ua.raw107 to ptr + %ua.load109 = load { i32, i32 }, ptr %ua.ptr108, align 4 + %callN = call { ptr, i64 } @struct_to_string__Complex__u32(ptr %0, { i32, i32 } %ua.load109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.110: ; preds = %match.arm.43 - %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr108 = inttoptr i64 %ua.raw107 to ptr - %ua.load109 = load { i32, i32 }, ptr %ua.ptr108, align 4 - %callN = call { ptr, i64 } @struct_to_string__Foo(ptr %0, { i32, i32 } %ua.load109) + %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr112 = inttoptr i64 %ua.raw111 to ptr + %ua.load113 = load { i32, i32 }, ptr %ua.ptr112, align 4 + %callN = call { ptr, i64 } @struct_to_string__Foo(ptr %0, { i32, i32 } %ua.load113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1622,10 +1628,10 @@ dispatch.default.187: ; preds = %match.arm.44 br label %dispatch.merge.186 dispatch.case.188: ; preds = %match.arm.44 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr113 = inttoptr i64 %ua.raw112 to ptr - %ua.load114 = load { i64, [4 x i8] }, ptr %ua.ptr113, align 8 - %callN = call { ptr, i64 } @enum_to_string__Sx__f32(ptr %0, { i64, [4 x i8] } %ua.load114) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr117 = inttoptr i64 %ua.raw116 to ptr + %ua.load118 = load { i64, [4 x i8] }, ptr %ua.ptr117, align 8 + %callN = call { ptr, i64 } @enum_to_string__Sx__f32(ptr %0, { i64, [4 x i8] } %ua.load118) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.186 @@ -1639,10 +1645,10 @@ dispatch.default.192: ; preds = %match.arm.46 br label %dispatch.merge.191 dispatch.case.193: ; preds = %match.arm.46 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr - %ua.load119 = load <3 x float>, ptr %ua.ptr118, align 16 - %callN = call { ptr, i64 } @vector_to_string__vec_3_f32(ptr %0, <3 x float> %ua.load119) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr122 = inttoptr i64 %ua.raw121 to ptr + %ua.load123 = load <3 x float>, ptr %ua.ptr122, align 16 + %callN = call { ptr, i64 } @vector_to_string__vec_3_f32(ptr %0, <3 x float> %ua.load123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.191 @@ -1656,34 +1662,34 @@ dispatch.default.200: ; preds = %match.arm.47 br label %dispatch.merge.199 dispatch.case.201: ; preds = %match.arm.47 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr - %ua.load124 = load [4 x i64], ptr %ua.ptr123, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load124) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr127 = inttoptr i64 %ua.raw126 to ptr + %ua.load128 = load [4 x i64], ptr %ua.ptr127, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 dispatch.case.202: ; preds = %match.arm.47 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr127 = inttoptr i64 %ua.raw126 to ptr - %ua.load128 = load [16 x float], ptr %ua.ptr127, align 4 - %callN = call { ptr, i64 } @array_to_string__AR_16_f32(ptr %0, [16 x float] %ua.load128) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr131 = inttoptr i64 %ua.raw130 to ptr + %ua.load132 = load [16 x float], ptr %ua.ptr131, align 4 + %callN = call { ptr, i64 } @array_to_string__AR_16_f32(ptr %0, [16 x float] %ua.load132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 dispatch.case.203: ; preds = %match.arm.47 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr131 = inttoptr i64 %ua.raw130 to ptr - %ua.load132 = load [1 x { i64, i64 }], ptr %ua.ptr131, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load132) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr135 = inttoptr i64 %ua.raw134 to ptr + %ua.load136 = load [1 x { i64, i64 }], ptr %ua.ptr135, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load136) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 dispatch.case.204: ; preds = %match.arm.47 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr135 = inttoptr i64 %ua.raw134 to ptr - %ua.load136 = load [5 x float], ptr %ua.ptr135, align 4 - %callN = call { ptr, i64 } @array_to_string__AR_5_f32(ptr %0, [5 x float] %ua.load136) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr139 = inttoptr i64 %ua.raw138 to ptr + %ua.load140 = load [5 x float], ptr %ua.ptr139, align 4 + %callN = call { ptr, i64 } @array_to_string__AR_5_f32(ptr %0, [5 x float] %ua.load140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.199 @@ -1697,18 +1703,18 @@ dispatch.default.226: ; preds = %match.arm.48 br label %dispatch.merge.225 dispatch.case.227: ; preds = %match.arm.48 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr140 = inttoptr i64 %ua.raw139 to ptr - %ua.load141 = load { ptr, i64 }, ptr %ua.ptr140, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load141) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr144 = inttoptr i64 %ua.raw143 to ptr + %ua.load145 = load { ptr, i64 }, ptr %ua.ptr144, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load145) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.225 dispatch.case.228: ; preds = %match.arm.48 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr144 = inttoptr i64 %ua.raw143 to ptr - %ua.load145 = load { ptr, i64 }, ptr %ua.ptr144, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load145) + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr148 = inttoptr i64 %ua.raw147 to ptr + %ua.load149 = load { ptr, i64 }, ptr %ua.ptr148, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.225 @@ -1722,170 +1728,170 @@ dispatch.default.240: ; preds = %match.arm.49 br label %dispatch.merge.239 dispatch.case.241: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw148 to ptr + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw152 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.242: ; preds = %match.arm.49 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.243: ; preds = %match.arm.49 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.244: ; preds = %match.arm.49 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.245: ; preds = %match.arm.49 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.246: ; preds = %match.arm.49 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.247: ; preds = %match.arm.49 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.248: ; preds = %match.arm.49 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.249: ; preds = %match.arm.49 - %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 - %iNp172 = inttoptr i64 %ua.raw171 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp172) + %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 + %iNp176 = inttoptr i64 %ua.raw175 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp176) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.250: ; preds = %match.arm.49 - %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 - %iNp175 = inttoptr i64 %ua.raw174 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp175) + %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 + %iNp179 = inttoptr i64 %ua.raw178 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp179) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.251: ; preds = %match.arm.49 - %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 - %iNp178 = inttoptr i64 %ua.raw177 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp178) + %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 + %iNp182 = inttoptr i64 %ua.raw181 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp182) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.252: ; preds = %match.arm.49 - %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 - %iNp181 = inttoptr i64 %ua.raw180 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Vec3(ptr %0, ptr %iNp181) + %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 + %iNp185 = inttoptr i64 %ua.raw184 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Vec3(ptr %0, ptr %iNp185) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.253: ; preds = %match.arm.49 - %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 - %iNp184 = inttoptr i64 %ua.raw183 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp184) + %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 + %iNp188 = inttoptr i64 %ua.raw187 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp188) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.254: ; preds = %match.arm.49 - %ua.raw186 = extractvalue { i64, i64 } %loadN, 1 - %iNp187 = inttoptr i64 %ua.raw186 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp187) + %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 + %iNp191 = inttoptr i64 %ua.raw190 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp191) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.255: ; preds = %match.arm.49 - %ua.raw189 = extractvalue { i64, i64 } %loadN, 1 - %iNp190 = inttoptr i64 %ua.raw189 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp190) + %ua.raw193 = extractvalue { i64, i64 } %loadN, 1 + %iNp194 = inttoptr i64 %ua.raw193 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp194) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.256: ; preds = %match.arm.49 - %ua.raw192 = extractvalue { i64, i64 } %loadN, 1 - %iNp193 = inttoptr i64 %ua.raw192 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp193) + %ua.raw196 = extractvalue { i64, i64 } %loadN, 1 + %iNp197 = inttoptr i64 %ua.raw196 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp197) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.257: ; preds = %match.arm.49 - %ua.raw195 = extractvalue { i64, i64 } %loadN, 1 - %iNp196 = inttoptr i64 %ua.raw195 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp196) + %ua.raw199 = extractvalue { i64, i64 } %loadN, 1 + %iNp200 = inttoptr i64 %ua.raw199 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp200) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.258: ; preds = %match.arm.49 - %ua.raw198 = extractvalue { i64, i64 } %loadN, 1 - %iNp199 = inttoptr i64 %ua.raw198 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp199) + %ua.raw202 = extractvalue { i64, i64 } %loadN, 1 + %iNp203 = inttoptr i64 %ua.raw202 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp203) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.259: ; preds = %match.arm.49 - %ua.raw201 = extractvalue { i64, i64 } %loadN, 1 - %iNp202 = inttoptr i64 %ua.raw201 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp202) + %ua.raw205 = extractvalue { i64, i64 } %loadN, 1 + %iNp206 = inttoptr i64 %ua.raw205 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp206) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.260: ; preds = %match.arm.49 - %ua.raw204 = extractvalue { i64, i64 } %loadN, 1 - %iNp205 = inttoptr i64 %ua.raw204 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_vec_3_f32(ptr %0, ptr %iNp205) + %ua.raw208 = extractvalue { i64, i64 } %loadN, 1 + %iNp209 = inttoptr i64 %ua.raw208 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_vec_3_f32(ptr %0, ptr %iNp209) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.261: ; preds = %match.arm.49 - %ua.raw207 = extractvalue { i64, i64 } %loadN, 1 - %iNp208 = inttoptr i64 %ua.raw207 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_5_f32(ptr %0, ptr %iNp208) + %ua.raw211 = extractvalue { i64, i64 } %loadN, 1 + %iNp212 = inttoptr i64 %ua.raw211 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_5_f32(ptr %0, ptr %iNp212) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.262: ; preds = %match.arm.49 - %ua.raw210 = extractvalue { i64, i64 } %loadN, 1 - %iNp211 = inttoptr i64 %ua.raw210 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Foo(ptr %0, ptr %iNp211) + %ua.raw214 = extractvalue { i64, i64 } %loadN, 1 + %iNp215 = inttoptr i64 %ua.raw214 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Foo(ptr %0, ptr %iNp215) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.263: ; preds = %match.arm.49 - %ua.raw213 = extractvalue { i64, i64 } %loadN, 1 - %iNp214 = inttoptr i64 %ua.raw213 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp214) + %ua.raw217 = extractvalue { i64, i64 } %loadN, 1 + %iNp218 = inttoptr i64 %ua.raw217 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp218) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 dispatch.case.264: ; preds = %match.arm.49 - %ua.raw216 = extractvalue { i64, i64 } %loadN, 1 - %iNp217 = inttoptr i64 %ua.raw216 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Sx__f32(ptr %0, ptr %iNp217) + %ua.raw220 = extractvalue { i64, i64 } %loadN, 1 + %iNp221 = inttoptr i64 %ua.raw220 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Sx__f32(ptr %0, ptr %iNp221) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.239 } diff --git a/examples/expected/0301-closures-fn-pointers.ir b/examples/expected/0301-closures-fn-pointers.ir index be6aa22..8e5cbcf 100644 --- a/examples/expected/0301-closures-fn-pointers.ir +++ b/examples/expected/0301-closures-fn-pointers.ir @@ -1161,8 +1161,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [74 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [74 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1270,8 +1273,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [74 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [74 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1281,15 +1287,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1297,16 +1303,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1326,74 +1332,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1407,18 +1413,18 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1432,18 +1438,18 @@ dispatch.default.165: ; preds = %match.arm.48 br label %dispatch.merge.164 dispatch.case.166: ; preds = %match.arm.48 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load { ptr, i64 }, ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 dispatch.case.167: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 @@ -1457,135 +1463,135 @@ dispatch.default.179: ; preds = %match.arm.49 br label %dispatch.merge.178 dispatch.case.180: ; preds = %match.arm.49 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw98 to ptr + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw102 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.181: ; preds = %match.arm.49 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %iNp101 = inttoptr i64 %ua.raw100 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp101) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %iNp105 = inttoptr i64 %ua.raw104 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.182: ; preds = %match.arm.49 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp104 = inttoptr i64 %ua.raw103 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp104) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp108 = inttoptr i64 %ua.raw107 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.183: ; preds = %match.arm.49 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %iNp107 = inttoptr i64 %ua.raw106 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp107) + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %iNp111 = inttoptr i64 %ua.raw110 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.184: ; preds = %match.arm.49 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %iNp110 = inttoptr i64 %ua.raw109 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp110) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %iNp114 = inttoptr i64 %ua.raw113 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.185: ; preds = %match.arm.49 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %iNp113 = inttoptr i64 %ua.raw112 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp113) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %iNp117 = inttoptr i64 %ua.raw116 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp116 = inttoptr i64 %ua.raw115 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp116) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp120 = inttoptr i64 %ua.raw119 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp119 = inttoptr i64 %ua.raw118 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp119) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp123 = inttoptr i64 %ua.raw122 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %iNp122 = inttoptr i64 %ua.raw121 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp122) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %iNp126 = inttoptr i64 %ua.raw125 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_fn_s32_s32__s32(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_fn_s32_s32__s32(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 - %iNp152 = inttoptr i64 %ua.raw151 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp152) + %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 + %iNp156 = inttoptr i64 %ua.raw155 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp156) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 } diff --git a/examples/expected/0400-protocols-impl-for-builtin.ir b/examples/expected/0400-protocols-impl-for-builtin.ir index 905e4c2..f4b164d 100644 --- a/examples/expected/0400-protocols-impl-for-builtin.ir +++ b/examples/expected/0400-protocols-impl-for-builtin.ir @@ -1238,8 +1238,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1349,8 +1352,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1360,15 +1366,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1376,16 +1382,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1405,82 +1411,82 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { ptr, ptr }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Lerpable(ptr %0, { ptr, ptr } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { ptr, ptr }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Lerpable(ptr %0, { ptr, ptr } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1494,18 +1500,18 @@ dispatch.default.157: ; preds = %match.arm.47 br label %dispatch.merge.156 dispatch.case.158: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [4 x i64], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.156 dispatch.case.159: ; preds = %match.arm.47 - %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr - %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) + %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr + %ua.load94 = load [1 x { i64, i64 }], ptr %ua.ptr93, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load94) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.156 @@ -1519,18 +1525,18 @@ dispatch.default.171: ; preds = %match.arm.48 br label %dispatch.merge.170 dispatch.case.172: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 dispatch.case.173: ; preds = %match.arm.48 - %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr - %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) + %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr + %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load103) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 @@ -1544,142 +1550,142 @@ dispatch.default.185: ; preds = %match.arm.49 br label %dispatch.merge.184 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw102 to ptr + %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw106 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %iNp105 = inttoptr i64 %ua.raw104 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %iNp109 = inttoptr i64 %ua.raw108 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 - %iNp108 = inttoptr i64 %ua.raw107 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) + %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 + %iNp112 = inttoptr i64 %ua.raw111 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp112) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 - %iNp111 = inttoptr i64 %ua.raw110 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) + %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 + %iNp115 = inttoptr i64 %ua.raw114 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %iNp114 = inttoptr i64 %ua.raw113 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %iNp118 = inttoptr i64 %ua.raw117 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp118) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 - %iNp117 = inttoptr i64 %ua.raw116 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) + %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 + %iNp121 = inttoptr i64 %ua.raw120 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp121) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 - %iNp120 = inttoptr i64 %ua.raw119 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) + %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 + %iNp124 = inttoptr i64 %ua.raw123 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %iNp123 = inttoptr i64 %ua.raw122 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %iNp127 = inttoptr i64 %ua.raw126 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp127) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %iNp126 = inttoptr i64 %ua.raw125 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %iNp130 = inttoptr i64 %ua.raw129 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp130) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 - %iNp129 = inttoptr i64 %ua.raw128 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) + %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 + %iNp133 = inttoptr i64 %ua.raw132 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp133) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 - %iNp132 = inttoptr i64 %ua.raw131 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) + %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 + %iNp136 = inttoptr i64 %ua.raw135 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp136) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %iNp135 = inttoptr i64 %ua.raw134 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp135) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %iNp139 = inttoptr i64 %ua.raw138 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp139) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 - %iNp138 = inttoptr i64 %ua.raw137 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp138) + %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 + %iNp142 = inttoptr i64 %ua.raw141 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.199: ; preds = %match.arm.49 - %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 - %iNp141 = inttoptr i64 %ua.raw140 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp141) + %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 + %iNp145 = inttoptr i64 %ua.raw144 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %iNp144 = inttoptr i64 %ua.raw143 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp144) + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %iNp148 = inttoptr i64 %ua.raw147 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 - %iNp147 = inttoptr i64 %ua.raw146 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp147) + %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 + %iNp151 = inttoptr i64 %ua.raw150 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 - %iNp150 = inttoptr i64 %ua.raw149 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp150) + %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 + %iNp154 = inttoptr i64 %ua.raw153 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 - %iNp153 = inttoptr i64 %ua.raw152 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp153) + %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 + %iNp157 = inttoptr i64 %ua.raw156 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.204: ; preds = %match.arm.49 - %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 - %iNp156 = inttoptr i64 %ua.raw155 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_f32(ptr %0, ptr %iNp156) + %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 + %iNp160 = inttoptr i64 %ua.raw159 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_f32(ptr %0, ptr %iNp160) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.205: ; preds = %match.arm.49 - %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 - %iNp159 = inttoptr i64 %ua.raw158 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Lerpable(ptr %0, ptr %iNp159) + %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 + %iNp163 = inttoptr i64 %ua.raw162 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Lerpable(ptr %0, ptr %iNp163) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 } diff --git a/examples/expected/0413-protocols-parameterized-protocol-value.ir b/examples/expected/0413-protocols-parameterized-protocol-value.ir index 335e7ca..b2e672c 100644 --- a/examples/expected/0413-protocols-parameterized-protocol-value.ir +++ b/examples/expected/0413-protocols-parameterized-protocol-value.ir @@ -1250,8 +1250,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [89 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [89 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1371,8 +1374,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [89 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [89 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1382,15 +1388,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1398,16 +1404,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1427,122 +1433,122 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { i64 }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__IntCell(ptr %0, { i64 } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { i64 }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__IntCell(ptr %0, { i64 } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load { { ptr, i64 } }, ptr %ua.ptr84, align 8 - %callN = call { ptr, i64 } @struct_to_string__StrCell(ptr %0, { { ptr, i64 } } %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load { { ptr, i64 } }, ptr %ua.ptr88, align 8 + %callN = call { ptr, i64 } @struct_to_string__StrCell(ptr %0, { { ptr, i64 } } %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { ptr, ptr }, ptr %ua.ptr88, align 8 - %callN = call { ptr, i64 } @struct_to_string__VL__s64(ptr %0, { ptr, ptr } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { ptr, ptr }, ptr %ua.ptr92, align 8 + %callN = call { ptr, i64 } @struct_to_string__VL__s64(ptr %0, { ptr, ptr } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.108: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { ptr }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string____VL__s64__Vtable(ptr %0, { ptr } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { ptr }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string____VL__s64__Vtable(ptr %0, { ptr } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.109: ; preds = %match.arm.43 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load { ptr, ptr }, ptr %ua.ptr96, align 8 - %callN = call { ptr, i64 } @struct_to_string__VL__string(ptr %0, { ptr, ptr } %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load { ptr, ptr }, ptr %ua.ptr100, align 8 + %callN = call { ptr, i64 } @struct_to_string__VL__string(ptr %0, { ptr, ptr } %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.110: ; preds = %match.arm.43 - %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr - %ua.load101 = load { ptr }, ptr %ua.ptr100, align 8 - %callN = call { ptr, i64 } @struct_to_string____VL__string__Vtable(ptr %0, { ptr } %ua.load101) + %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr + %ua.load105 = load { ptr }, ptr %ua.ptr104, align 8 + %callN = call { ptr, i64 } @struct_to_string____VL__string__Vtable(ptr %0, { ptr } %ua.load105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1556,18 +1562,18 @@ dispatch.default.187: ; preds = %match.arm.47 br label %dispatch.merge.186 dispatch.case.188: ; preds = %match.arm.47 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr - %ua.load106 = load [4 x i64], ptr %ua.ptr105, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load106) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr109 = inttoptr i64 %ua.raw108 to ptr + %ua.load110 = load [4 x i64], ptr %ua.ptr109, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.186 dispatch.case.189: ; preds = %match.arm.47 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr109 = inttoptr i64 %ua.raw108 to ptr - %ua.load110 = load [1 x { i64, i64 }], ptr %ua.ptr109, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load110) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr113 = inttoptr i64 %ua.raw112 to ptr + %ua.load114 = load [1 x { i64, i64 }], ptr %ua.ptr113, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.186 @@ -1581,18 +1587,18 @@ dispatch.default.201: ; preds = %match.arm.48 br label %dispatch.merge.200 dispatch.case.202: ; preds = %match.arm.48 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr - %ua.load115 = load { ptr, i64 }, ptr %ua.ptr114, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load115) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr + %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.200 dispatch.case.203: ; preds = %match.arm.48 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr - %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load119) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr122 = inttoptr i64 %ua.raw121 to ptr + %ua.load123 = load { ptr, i64 }, ptr %ua.ptr122, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.200 @@ -1606,177 +1612,177 @@ dispatch.default.215: ; preds = %match.arm.49 br label %dispatch.merge.214 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw122 to ptr + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw126 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.218: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.219: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.220: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.221: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.222: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.223: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.224: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_IntCell(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_IntCell(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.225: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_StrCell(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_StrCell(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.226: ; preds = %match.arm.49 - %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 - %iNp152 = inttoptr i64 %ua.raw151 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp152) + %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 + %iNp156 = inttoptr i64 %ua.raw155 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp156) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.227: ; preds = %match.arm.49 - %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 - %iNp155 = inttoptr i64 %ua.raw154 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp155) + %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 + %iNp159 = inttoptr i64 %ua.raw158 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp159) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.228: ; preds = %match.arm.49 - %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 - %iNp158 = inttoptr i64 %ua.raw157 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp158) + %ua.raw161 = extractvalue { i64, i64 } %loadN, 1 + %iNp162 = inttoptr i64 %ua.raw161 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp162) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.229: ; preds = %match.arm.49 - %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 - %iNp161 = inttoptr i64 %ua.raw160 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__s64(ptr %0, ptr %iNp161) + %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 + %iNp165 = inttoptr i64 %ua.raw164 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__s64(ptr %0, ptr %iNp165) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.230: ; preds = %match.arm.49 - %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 - %iNp164 = inttoptr i64 %ua.raw163 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_IntCell(ptr %0, ptr %iNp164) + %ua.raw167 = extractvalue { i64, i64 } %loadN, 1 + %iNp168 = inttoptr i64 %ua.raw167 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_IntCell(ptr %0, ptr %iNp168) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.231: ; preds = %match.arm.49 - %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 - %iNp167 = inttoptr i64 %ua.raw166 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__s64__Vtable(ptr %0, ptr %iNp167) + %ua.raw170 = extractvalue { i64, i64 } %loadN, 1 + %iNp171 = inttoptr i64 %ua.raw170 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__s64__Vtable(ptr %0, ptr %iNp171) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.232: ; preds = %match.arm.49 - %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 - %iNp170 = inttoptr i64 %ua.raw169 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp170) + %ua.raw173 = extractvalue { i64, i64 } %loadN, 1 + %iNp174 = inttoptr i64 %ua.raw173 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp174) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.233: ; preds = %match.arm.49 - %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 - %iNp173 = inttoptr i64 %ua.raw172 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp173) + %ua.raw176 = extractvalue { i64, i64 } %loadN, 1 + %iNp177 = inttoptr i64 %ua.raw176 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp177) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.234: ; preds = %match.arm.49 - %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 - %iNp176 = inttoptr i64 %ua.raw175 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp176) + %ua.raw179 = extractvalue { i64, i64 } %loadN, 1 + %iNp180 = inttoptr i64 %ua.raw179 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp180) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.235: ; preds = %match.arm.49 - %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 - %iNp179 = inttoptr i64 %ua.raw178 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp179) + %ua.raw182 = extractvalue { i64, i64 } %loadN, 1 + %iNp183 = inttoptr i64 %ua.raw182 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp183) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.236: ; preds = %match.arm.49 - %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 - %iNp182 = inttoptr i64 %ua.raw181 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp182) + %ua.raw185 = extractvalue { i64, i64 } %loadN, 1 + %iNp186 = inttoptr i64 %ua.raw185 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp186) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.237: ; preds = %match.arm.49 - %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 - %iNp185 = inttoptr i64 %ua.raw184 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp185) + %ua.raw188 = extractvalue { i64, i64 } %loadN, 1 + %iNp189 = inttoptr i64 %ua.raw188 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp189) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.238: ; preds = %match.arm.49 - %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 - %iNp188 = inttoptr i64 %ua.raw187 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__string(ptr %0, ptr %iNp188) + %ua.raw191 = extractvalue { i64, i64 } %loadN, 1 + %iNp192 = inttoptr i64 %ua.raw191 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__string(ptr %0, ptr %iNp192) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.239: ; preds = %match.arm.49 - %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 - %iNp191 = inttoptr i64 %ua.raw190 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_StrCell(ptr %0, ptr %iNp191) + %ua.raw194 = extractvalue { i64, i64 } %loadN, 1 + %iNp195 = inttoptr i64 %ua.raw194 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_StrCell(ptr %0, ptr %iNp195) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.240: ; preds = %match.arm.49 - %ua.raw193 = extractvalue { i64, i64 } %loadN, 1 - %iNp194 = inttoptr i64 %ua.raw193 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__string__Vtable(ptr %0, ptr %iNp194) + %ua.raw197 = extractvalue { i64, i64 } %loadN, 1 + %iNp198 = inttoptr i64 %ua.raw197 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__string__Vtable(ptr %0, ptr %iNp198) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 } diff --git a/examples/expected/0414-protocols-generic-struct-protocol-erase.ir b/examples/expected/0414-protocols-generic-struct-protocol-erase.ir index bf7b626..3f9e0d9 100644 --- a/examples/expected/0414-protocols-generic-struct-protocol-erase.ir +++ b/examples/expected/0414-protocols-generic-struct-protocol-erase.ir @@ -1256,8 +1256,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [94 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [94 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1378,8 +1381,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [94 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [94 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1389,15 +1395,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1405,16 +1411,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1434,130 +1440,130 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { i64 }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__IntCell(ptr %0, { i64 } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { i64 }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__IntCell(ptr %0, { i64 } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__R(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__R(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load {}, ptr %ua.ptr88, align 1 - %callN = call { ptr, i64 } @struct_to_string__Combined(ptr %0, {} %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load {}, ptr %ua.ptr92, align 1 + %callN = call { ptr, i64 } @struct_to_string__Combined(ptr %0, {} %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.108: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { ptr, ptr }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string__VL__s64(ptr %0, { ptr, ptr } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { ptr, ptr }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string__VL__s64(ptr %0, { ptr, ptr } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.109: ; preds = %match.arm.43 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load { ptr }, ptr %ua.ptr96, align 8 - %callN = call { ptr, i64 } @struct_to_string____VL__s64__Vtable(ptr %0, { ptr } %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load { ptr }, ptr %ua.ptr100, align 8 + %callN = call { ptr, i64 } @struct_to_string____VL__s64__Vtable(ptr %0, { ptr } %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.110: ; preds = %match.arm.43 - %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr - %ua.load101 = load {}, ptr %ua.ptr100, align 1 - %callN = call { ptr, i64 } @struct_to_string__VL(ptr %0, {} %ua.load101) + %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr + %ua.load105 = load {}, ptr %ua.ptr104, align 1 + %callN = call { ptr, i64 } @struct_to_string__VL(ptr %0, {} %ua.load105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.111: ; preds = %match.arm.43 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr - %ua.load105 = load { { { ptr, ptr } }, i64 }, ptr %ua.ptr104, align 8 - %callN = call { ptr, i64 } @struct_to_string__Combined__s64__s64(ptr %0, { { { ptr, ptr } }, i64 } %ua.load105) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr108 = inttoptr i64 %ua.raw107 to ptr + %ua.load109 = load { { { ptr, ptr } }, i64 }, ptr %ua.ptr108, align 8 + %callN = call { ptr, i64 } @struct_to_string__Combined__s64__s64(ptr %0, { { { ptr, ptr } }, i64 } %ua.load109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1571,18 +1577,18 @@ dispatch.default.193: ; preds = %match.arm.47 br label %dispatch.merge.192 dispatch.case.194: ; preds = %match.arm.47 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr109 = inttoptr i64 %ua.raw108 to ptr - %ua.load110 = load [4 x i64], ptr %ua.ptr109, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load110) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr113 = inttoptr i64 %ua.raw112 to ptr + %ua.load114 = load [4 x i64], ptr %ua.ptr113, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.192 dispatch.case.195: ; preds = %match.arm.47 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr113 = inttoptr i64 %ua.raw112 to ptr - %ua.load114 = load [1 x { i64, i64 }], ptr %ua.ptr113, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load114) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr117 = inttoptr i64 %ua.raw116 to ptr + %ua.load118 = load [1 x { i64, i64 }], ptr %ua.ptr117, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load118) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.192 @@ -1596,26 +1602,26 @@ dispatch.default.207: ; preds = %match.arm.48 br label %dispatch.merge.206 dispatch.case.208: ; preds = %match.arm.48 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr - %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load119) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr122 = inttoptr i64 %ua.raw121 to ptr + %ua.load123 = load { ptr, i64 }, ptr %ua.ptr122, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.206 dispatch.case.209: ; preds = %match.arm.48 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr122 = inttoptr i64 %ua.raw121 to ptr - %ua.load123 = load { ptr, i64 }, ptr %ua.ptr122, align 8 - %callN = call { ptr, i64 } @slice_to_string__VL(ptr %0, { ptr, i64 } %ua.load123) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr126 = inttoptr i64 %ua.raw125 to ptr + %ua.load127 = load { ptr, i64 }, ptr %ua.ptr126, align 8 + %callN = call { ptr, i64 } @slice_to_string__VL(ptr %0, { ptr, i64 } %ua.load127) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.206 dispatch.case.210: ; preds = %match.arm.48 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr126 = inttoptr i64 %ua.raw125 to ptr - %ua.load127 = load { ptr, i64 }, ptr %ua.ptr126, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load127) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr130 = inttoptr i64 %ua.raw129 to ptr + %ua.load131 = load { ptr, i64 }, ptr %ua.ptr130, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.206 @@ -1629,170 +1635,170 @@ dispatch.default.227: ; preds = %match.arm.49 br label %dispatch.merge.226 dispatch.case.228: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw130 to ptr + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw134 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.229: ; preds = %match.arm.49 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.230: ; preds = %match.arm.49 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.231: ; preds = %match.arm.49 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.232: ; preds = %match.arm.49 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.233: ; preds = %match.arm.49 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.234: ; preds = %match.arm.49 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.235: ; preds = %match.arm.49 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.236: ; preds = %match.arm.49 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_IntCell(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_IntCell(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.237: ; preds = %match.arm.49 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.238: ; preds = %match.arm.49 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.239: ; preds = %match.arm.49 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.240: ; preds = %match.arm.49 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.241: ; preds = %match.arm.49 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.242: ; preds = %match.arm.49 - %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 - %iNp172 = inttoptr i64 %ua.raw171 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp172) + %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 + %iNp176 = inttoptr i64 %ua.raw175 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp176) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.243: ; preds = %match.arm.49 - %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 - %iNp175 = inttoptr i64 %ua.raw174 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Combined__s64__s64(ptr %0, ptr %iNp175) + %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 + %iNp179 = inttoptr i64 %ua.raw178 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Combined__s64__s64(ptr %0, ptr %iNp179) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.244: ; preds = %match.arm.49 - %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 - %iNp178 = inttoptr i64 %ua.raw177 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_IntCell(ptr %0, ptr %iNp178) + %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 + %iNp182 = inttoptr i64 %ua.raw181 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_IntCell(ptr %0, ptr %iNp182) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.245: ; preds = %match.arm.49 - %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 - %iNp181 = inttoptr i64 %ua.raw180 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__s64__Vtable(ptr %0, ptr %iNp181) + %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 + %iNp185 = inttoptr i64 %ua.raw184 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr___VL__s64__Vtable(ptr %0, ptr %iNp185) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.246: ; preds = %match.arm.49 - %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 - %iNp184 = inttoptr i64 %ua.raw183 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_tu_VL__s64(ptr %0, ptr %iNp184) + %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 + %iNp188 = inttoptr i64 %ua.raw187 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_tu_VL__s64(ptr %0, ptr %iNp188) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.247: ; preds = %match.arm.49 - %ua.raw186 = extractvalue { i64, i64 } %loadN, 1 - %iNp187 = inttoptr i64 %ua.raw186 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Combined__s64__s64(ptr %0, ptr %iNp187) + %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 + %iNp191 = inttoptr i64 %ua.raw190 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Combined__s64__s64(ptr %0, ptr %iNp191) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.248: ; preds = %match.arm.49 - %ua.raw189 = extractvalue { i64, i64 } %loadN, 1 - %iNp190 = inttoptr i64 %ua.raw189 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__s64(ptr %0, ptr %iNp190) + %ua.raw193 = extractvalue { i64, i64 } %loadN, 1 + %iNp194 = inttoptr i64 %ua.raw193 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_VL__s64(ptr %0, ptr %iNp194) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.249: ; preds = %match.arm.49 - %ua.raw192 = extractvalue { i64, i64 } %loadN, 1 - %iNp193 = inttoptr i64 %ua.raw192 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp193) + %ua.raw196 = extractvalue { i64, i64 } %loadN, 1 + %iNp197 = inttoptr i64 %ua.raw196 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp197) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.250: ; preds = %match.arm.49 - %ua.raw195 = extractvalue { i64, i64 } %loadN, 1 - %iNp196 = inttoptr i64 %ua.raw195 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp196) + %ua.raw199 = extractvalue { i64, i64 } %loadN, 1 + %iNp200 = inttoptr i64 %ua.raw199 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp200) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.251: ; preds = %match.arm.49 - %ua.raw198 = extractvalue { i64, i64 } %loadN, 1 - %iNp199 = inttoptr i64 %ua.raw198 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp199) + %ua.raw202 = extractvalue { i64, i64 } %loadN, 1 + %iNp203 = inttoptr i64 %ua.raw202 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp203) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 } diff --git a/examples/expected/0416-protocols-auto-type-erasure.ir b/examples/expected/0416-protocols-auto-type-erasure.ir index 2bfdc4b..f148656 100644 --- a/examples/expected/0416-protocols-auto-type-erasure.ir +++ b/examples/expected/0416-protocols-auto-type-erasure.ir @@ -1330,8 +1330,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [102 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [102 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1462,8 +1465,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [102 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [102 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1473,15 +1479,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1489,16 +1495,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1518,146 +1524,146 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { i32, i32 }, ptr %ua.ptr88, align 4 - %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { i32, i32 }, ptr %ua.ptr92, align 4 + %callN = call { ptr, i64 } @struct_to_string__Point(ptr %0, { i32, i32 } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { ptr, ptr }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string__Counter(ptr %0, { ptr, ptr } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { ptr, ptr }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string__Counter(ptr %0, { ptr, ptr } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.108: ; preds = %match.arm.43 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load { ptr, ptr }, ptr %ua.ptr96, align 8 - %callN = call { ptr, i64 } @struct_to_string____Counter__Vtable(ptr %0, { ptr, ptr } %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load { ptr, ptr }, ptr %ua.ptr100, align 8 + %callN = call { ptr, i64 } @struct_to_string____Counter__Vtable(ptr %0, { ptr, ptr } %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.109: ; preds = %match.arm.43 - %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr - %ua.load101 = load { ptr, ptr }, ptr %ua.ptr100, align 8 - %callN = call { ptr, i64 } @struct_to_string__Summable(ptr %0, { ptr, ptr } %ua.load101) + %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr + %ua.load105 = load { ptr, ptr }, ptr %ua.ptr104, align 8 + %callN = call { ptr, i64 } @struct_to_string__Summable(ptr %0, { ptr, ptr } %ua.load105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.110: ; preds = %match.arm.43 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr104 = inttoptr i64 %ua.raw103 to ptr - %ua.load105 = load { ptr }, ptr %ua.ptr104, align 8 - %callN = call { ptr, i64 } @struct_to_string____Summable__Vtable(ptr %0, { ptr } %ua.load105) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr108 = inttoptr i64 %ua.raw107 to ptr + %ua.load109 = load { ptr }, ptr %ua.ptr108, align 8 + %callN = call { ptr, i64 } @struct_to_string____Summable__Vtable(ptr %0, { ptr } %ua.load109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.111: ; preds = %match.arm.43 - %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr108 = inttoptr i64 %ua.raw107 to ptr - %ua.load109 = load { i32 }, ptr %ua.ptr108, align 4 - %callN = call { ptr, i64 } @struct_to_string__SimpleCounter(ptr %0, { i32 } %ua.load109) + %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr112 = inttoptr i64 %ua.raw111 to ptr + %ua.load113 = load { i32 }, ptr %ua.ptr112, align 4 + %callN = call { ptr, i64 } @struct_to_string__SimpleCounter(ptr %0, { i32 } %ua.load113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.112: ; preds = %match.arm.43 - %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr112 = inttoptr i64 %ua.raw111 to ptr - %ua.load113 = load { ptr, ptr, ptr }, ptr %ua.ptr112, align 8 - %callN = call { ptr, i64 } @struct_to_string__Adder(ptr %0, { ptr, ptr, ptr } %ua.load113) + %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr116 = inttoptr i64 %ua.raw115 to ptr + %ua.load117 = load { ptr, ptr, ptr }, ptr %ua.ptr116, align 8 + %callN = call { ptr, i64 } @struct_to_string__Adder(ptr %0, { ptr, ptr, ptr } %ua.load117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.113: ; preds = %match.arm.43 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr116 = inttoptr i64 %ua.raw115 to ptr - %ua.load117 = load { i32 }, ptr %ua.ptr116, align 4 - %callN = call { ptr, i64 } @struct_to_string__Accumulator(ptr %0, { i32 } %ua.load117) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr120 = inttoptr i64 %ua.raw119 to ptr + %ua.load121 = load { i32 }, ptr %ua.ptr120, align 4 + %callN = call { ptr, i64 } @struct_to_string__Accumulator(ptr %0, { i32 } %ua.load121) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1671,14 +1677,14 @@ dispatch.default.205: ; preds = %match.arm.44 br label %dispatch.merge.204 dispatch.case.206: ; preds = %match.arm.44 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw120) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.204 dispatch.case.207: ; preds = %match.arm.44 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw122) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.204 @@ -1692,18 +1698,18 @@ dispatch.default.213: ; preds = %match.arm.47 br label %dispatch.merge.212 dispatch.case.214: ; preds = %match.arm.47 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr126 = inttoptr i64 %ua.raw125 to ptr - %ua.load127 = load [4 x i64], ptr %ua.ptr126, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load127) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr130 = inttoptr i64 %ua.raw129 to ptr + %ua.load131 = load [4 x i64], ptr %ua.ptr130, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.212 dispatch.case.215: ; preds = %match.arm.47 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr130 = inttoptr i64 %ua.raw129 to ptr - %ua.load131 = load [1 x { i64, i64 }], ptr %ua.ptr130, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load131) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr134 = inttoptr i64 %ua.raw133 to ptr + %ua.load135 = load [1 x { i64, i64 }], ptr %ua.ptr134, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.212 @@ -1717,18 +1723,18 @@ dispatch.default.227: ; preds = %match.arm.48 br label %dispatch.merge.226 dispatch.case.228: ; preds = %match.arm.48 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr135 = inttoptr i64 %ua.raw134 to ptr - %ua.load136 = load { ptr, i64 }, ptr %ua.ptr135, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load136) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr139 = inttoptr i64 %ua.raw138 to ptr + %ua.load140 = load { ptr, i64 }, ptr %ua.ptr139, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 dispatch.case.229: ; preds = %match.arm.48 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr139 = inttoptr i64 %ua.raw138 to ptr - %ua.load140 = load { ptr, i64 }, ptr %ua.ptr139, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load140) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr143 = inttoptr i64 %ua.raw142 to ptr + %ua.load144 = load { ptr, i64 }, ptr %ua.ptr143, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.226 @@ -1742,184 +1748,184 @@ dispatch.default.241: ; preds = %match.arm.49 br label %dispatch.merge.240 dispatch.case.242: ; preds = %match.arm.49 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw143 to ptr + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw147 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.243: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.244: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.245: ; preds = %match.arm.49 - %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 - %iNp152 = inttoptr i64 %ua.raw151 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp152) + %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 + %iNp156 = inttoptr i64 %ua.raw155 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp156) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.246: ; preds = %match.arm.49 - %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 - %iNp155 = inttoptr i64 %ua.raw154 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp155) + %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 + %iNp159 = inttoptr i64 %ua.raw158 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp159) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.247: ; preds = %match.arm.49 - %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 - %iNp158 = inttoptr i64 %ua.raw157 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp158) + %ua.raw161 = extractvalue { i64, i64 } %loadN, 1 + %iNp162 = inttoptr i64 %ua.raw161 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp162) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.248: ; preds = %match.arm.49 - %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 - %iNp161 = inttoptr i64 %ua.raw160 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp161) + %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 + %iNp165 = inttoptr i64 %ua.raw164 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp165) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.249: ; preds = %match.arm.49 - %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 - %iNp164 = inttoptr i64 %ua.raw163 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp164) + %ua.raw167 = extractvalue { i64, i64 } %loadN, 1 + %iNp168 = inttoptr i64 %ua.raw167 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp168) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.250: ; preds = %match.arm.49 - %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 - %iNp167 = inttoptr i64 %ua.raw166 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SimpleCounter(ptr %0, ptr %iNp167) + %ua.raw170 = extractvalue { i64, i64 } %loadN, 1 + %iNp171 = inttoptr i64 %ua.raw170 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SimpleCounter(ptr %0, ptr %iNp171) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.251: ; preds = %match.arm.49 - %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 - %iNp170 = inttoptr i64 %ua.raw169 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp170) + %ua.raw173 = extractvalue { i64, i64 } %loadN, 1 + %iNp174 = inttoptr i64 %ua.raw173 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Point(ptr %0, ptr %iNp174) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.252: ; preds = %match.arm.49 - %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 - %iNp173 = inttoptr i64 %ua.raw172 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Accumulator(ptr %0, ptr %iNp173) + %ua.raw176 = extractvalue { i64, i64 } %loadN, 1 + %iNp177 = inttoptr i64 %ua.raw176 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Accumulator(ptr %0, ptr %iNp177) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.253: ; preds = %match.arm.49 - %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 - %iNp176 = inttoptr i64 %ua.raw175 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp176) + %ua.raw179 = extractvalue { i64, i64 } %loadN, 1 + %iNp180 = inttoptr i64 %ua.raw179 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp180) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.254: ; preds = %match.arm.49 - %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 - %iNp179 = inttoptr i64 %ua.raw178 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp179) + %ua.raw182 = extractvalue { i64, i64 } %loadN, 1 + %iNp183 = inttoptr i64 %ua.raw182 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp183) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.255: ; preds = %match.arm.49 - %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 - %iNp182 = inttoptr i64 %ua.raw181 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp182) + %ua.raw185 = extractvalue { i64, i64 } %loadN, 1 + %iNp186 = inttoptr i64 %ua.raw185 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp186) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.256: ; preds = %match.arm.49 - %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 - %iNp185 = inttoptr i64 %ua.raw184 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp185) + %ua.raw188 = extractvalue { i64, i64 } %loadN, 1 + %iNp189 = inttoptr i64 %ua.raw188 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp189) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.257: ; preds = %match.arm.49 - %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 - %iNp188 = inttoptr i64 %ua.raw187 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp188) + %ua.raw191 = extractvalue { i64, i64 } %loadN, 1 + %iNp192 = inttoptr i64 %ua.raw191 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp192) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.258: ; preds = %match.arm.49 - %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 - %iNp191 = inttoptr i64 %ua.raw190 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp191) + %ua.raw194 = extractvalue { i64, i64 } %loadN, 1 + %iNp195 = inttoptr i64 %ua.raw194 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp195) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.259: ; preds = %match.arm.49 - %ua.raw193 = extractvalue { i64, i64 } %loadN, 1 - %iNp194 = inttoptr i64 %ua.raw193 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp194) + %ua.raw197 = extractvalue { i64, i64 } %loadN, 1 + %iNp198 = inttoptr i64 %ua.raw197 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp198) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.260: ; preds = %match.arm.49 - %ua.raw196 = extractvalue { i64, i64 } %loadN, 1 - %iNp197 = inttoptr i64 %ua.raw196 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp197) + %ua.raw200 = extractvalue { i64, i64 } %loadN, 1 + %iNp201 = inttoptr i64 %ua.raw200 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp201) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.261: ; preds = %match.arm.49 - %ua.raw199 = extractvalue { i64, i64 } %loadN, 1 - %iNp200 = inttoptr i64 %ua.raw199 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Counter(ptr %0, ptr %iNp200) + %ua.raw203 = extractvalue { i64, i64 } %loadN, 1 + %iNp204 = inttoptr i64 %ua.raw203 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Counter(ptr %0, ptr %iNp204) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.262: ; preds = %match.arm.49 - %ua.raw202 = extractvalue { i64, i64 } %loadN, 1 - %iNp203 = inttoptr i64 %ua.raw202 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_SimpleCounter(ptr %0, ptr %iNp203) + %ua.raw206 = extractvalue { i64, i64 } %loadN, 1 + %iNp207 = inttoptr i64 %ua.raw206 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_SimpleCounter(ptr %0, ptr %iNp207) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.263: ; preds = %match.arm.49 - %ua.raw205 = extractvalue { i64, i64 } %loadN, 1 - %iNp206 = inttoptr i64 %ua.raw205 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp206) + %ua.raw209 = extractvalue { i64, i64 } %loadN, 1 + %iNp210 = inttoptr i64 %ua.raw209 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp210) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.264: ; preds = %match.arm.49 - %ua.raw208 = extractvalue { i64, i64 } %loadN, 1 - %iNp209 = inttoptr i64 %ua.raw208 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr___Counter__Vtable(ptr %0, ptr %iNp209) + %ua.raw212 = extractvalue { i64, i64 } %loadN, 1 + %iNp213 = inttoptr i64 %ua.raw212 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr___Counter__Vtable(ptr %0, ptr %iNp213) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.265: ; preds = %match.arm.49 - %ua.raw211 = extractvalue { i64, i64 } %loadN, 1 - %iNp212 = inttoptr i64 %ua.raw211 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp212) + %ua.raw215 = extractvalue { i64, i64 } %loadN, 1 + %iNp216 = inttoptr i64 %ua.raw215 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp216) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.266: ; preds = %match.arm.49 - %ua.raw214 = extractvalue { i64, i64 } %loadN, 1 - %iNp215 = inttoptr i64 %ua.raw214 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Adder(ptr %0, ptr %iNp215) + %ua.raw218 = extractvalue { i64, i64 } %loadN, 1 + %iNp219 = inttoptr i64 %ua.raw218 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Adder(ptr %0, ptr %iNp219) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 dispatch.case.267: ; preds = %match.arm.49 - %ua.raw217 = extractvalue { i64, i64 } %loadN, 1 - %iNp218 = inttoptr i64 %ua.raw217 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Accumulator(ptr %0, ptr %iNp218) + %ua.raw221 = extractvalue { i64, i64 } %loadN, 1 + %iNp222 = inttoptr i64 %ua.raw221 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Accumulator(ptr %0, ptr %iNp222) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.240 } diff --git a/examples/expected/0507-packs-pack-mono-dedup.ir b/examples/expected/0507-packs-pack-mono-dedup.ir index 73f78f5..3ba37e7 100644 --- a/examples/expected/0507-packs-pack-mono-dedup.ir +++ b/examples/expected/0507-packs-pack-mono-dedup.ir @@ -1176,8 +1176,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [78 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [78 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1289,8 +1292,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [78 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [78 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1300,15 +1306,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1316,16 +1322,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1345,74 +1351,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1426,42 +1432,42 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.154: ; preds = %match.arm.47 - %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr - %ua.load90 = load [3 x { i64, i64 }], ptr %ua.ptr89, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load90) + %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr + %ua.load94 = load [3 x { i64, i64 }], ptr %ua.ptr93, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load94) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.155: ; preds = %match.arm.47 - %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr - %ua.load94 = load [2 x { i64, i64 }], ptr %ua.ptr93, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load94) + %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr97 = inttoptr i64 %ua.raw96 to ptr + %ua.load98 = load [2 x { i64, i64 }], ptr %ua.ptr97, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load98) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.156: ; preds = %match.arm.47 - %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr97 = inttoptr i64 %ua.raw96 to ptr - %ua.load98 = load [5 x { i64, i64 }], ptr %ua.ptr97, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_5_Any(ptr %0, [5 x { i64, i64 }] %ua.load98) + %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr101 = inttoptr i64 %ua.raw100 to ptr + %ua.load102 = load [5 x { i64, i64 }], ptr %ua.ptr101, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_5_Any(ptr %0, [5 x { i64, i64 }] %ua.load102) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1475,18 +1481,18 @@ dispatch.default.183: ; preds = %match.arm.48 br label %dispatch.merge.182 dispatch.case.184: ; preds = %match.arm.48 - %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr - %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load103) + %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr + %ua.load107 = load { ptr, i64 }, ptr %ua.ptr106, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load107) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.182 dispatch.case.185: ; preds = %match.arm.48 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr - %ua.load107 = load { ptr, i64 }, ptr %ua.ptr106, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load107) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr + %ua.load111 = load { ptr, i64 }, ptr %ua.ptr110, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.182 @@ -1500,142 +1506,142 @@ dispatch.default.197: ; preds = %match.arm.49 br label %dispatch.merge.196 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw110 to ptr + %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw114 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.199: ; preds = %match.arm.49 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %iNp113 = inttoptr i64 %ua.raw112 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp113) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %iNp117 = inttoptr i64 %ua.raw116 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp116 = inttoptr i64 %ua.raw115 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp116) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp120 = inttoptr i64 %ua.raw119 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp119 = inttoptr i64 %ua.raw118 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp119) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp123 = inttoptr i64 %ua.raw122 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %iNp122 = inttoptr i64 %ua.raw121 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp122) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %iNp126 = inttoptr i64 %ua.raw125 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.204: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.205: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.206: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.207: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.208: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.209: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.210: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.211: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.212: ; preds = %match.arm.49 - %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 - %iNp152 = inttoptr i64 %ua.raw151 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp152) + %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 + %iNp156 = inttoptr i64 %ua.raw155 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp156) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.213: ; preds = %match.arm.49 - %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 - %iNp155 = inttoptr i64 %ua.raw154 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp155) + %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 + %iNp159 = inttoptr i64 %ua.raw158 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp159) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.214: ; preds = %match.arm.49 - %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 - %iNp158 = inttoptr i64 %ua.raw157 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp158) + %ua.raw161 = extractvalue { i64, i64 } %loadN, 1 + %iNp162 = inttoptr i64 %ua.raw161 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp162) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.215: ; preds = %match.arm.49 - %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 - %iNp161 = inttoptr i64 %ua.raw160 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp161) + %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 + %iNp165 = inttoptr i64 %ua.raw164 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp165) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 - %iNp164 = inttoptr i64 %ua.raw163 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_5_Any(ptr %0, ptr %iNp164) + %ua.raw167 = extractvalue { i64, i64 } %loadN, 1 + %iNp168 = inttoptr i64 %ua.raw167 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_5_Any(ptr %0, ptr %iNp168) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 - %iNp167 = inttoptr i64 %ua.raw166 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp167) + %ua.raw170 = extractvalue { i64, i64 } %loadN, 1 + %iNp171 = inttoptr i64 %ua.raw170 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp171) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 } diff --git a/examples/expected/0513-packs-pack-mixed-comptime.ir b/examples/expected/0513-packs-pack-mixed-comptime.ir index 2d7ffd8..b8e9f89 100644 --- a/examples/expected/0513-packs-pack-mixed-comptime.ir +++ b/examples/expected/0513-packs-pack-mixed-comptime.ir @@ -1153,8 +1153,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [72 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [72 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1262,8 +1265,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [72 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [72 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1273,15 +1279,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1289,16 +1295,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1318,74 +1324,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1399,26 +1405,26 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [3 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [3 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.154: ; preds = %match.arm.47 - %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr - %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) + %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr + %ua.load94 = load [1 x { i64, i64 }], ptr %ua.ptr93, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load94) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1432,18 +1438,18 @@ dispatch.default.171: ; preds = %match.arm.48 br label %dispatch.merge.170 dispatch.case.172: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 dispatch.case.173: ; preds = %match.arm.48 - %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr - %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) + %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr + %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load103) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 @@ -1457,128 +1463,128 @@ dispatch.default.185: ; preds = %match.arm.49 br label %dispatch.merge.184 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw102 to ptr + %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw106 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %iNp105 = inttoptr i64 %ua.raw104 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %iNp109 = inttoptr i64 %ua.raw108 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp109) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 - %iNp108 = inttoptr i64 %ua.raw107 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) + %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 + %iNp112 = inttoptr i64 %ua.raw111 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp112) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 - %iNp111 = inttoptr i64 %ua.raw110 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) + %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 + %iNp115 = inttoptr i64 %ua.raw114 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %iNp114 = inttoptr i64 %ua.raw113 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %iNp118 = inttoptr i64 %ua.raw117 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp118) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 - %iNp117 = inttoptr i64 %ua.raw116 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) + %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 + %iNp121 = inttoptr i64 %ua.raw120 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp121) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 - %iNp120 = inttoptr i64 %ua.raw119 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) + %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 + %iNp124 = inttoptr i64 %ua.raw123 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %iNp123 = inttoptr i64 %ua.raw122 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %iNp127 = inttoptr i64 %ua.raw126 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp127) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %iNp126 = inttoptr i64 %ua.raw125 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %iNp130 = inttoptr i64 %ua.raw129 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp130) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 - %iNp129 = inttoptr i64 %ua.raw128 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) + %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 + %iNp133 = inttoptr i64 %ua.raw132 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp133) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 - %iNp132 = inttoptr i64 %ua.raw131 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) + %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 + %iNp136 = inttoptr i64 %ua.raw135 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp136) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %iNp135 = inttoptr i64 %ua.raw134 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp135) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %iNp139 = inttoptr i64 %ua.raw138 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp139) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 - %iNp138 = inttoptr i64 %ua.raw137 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp138) + %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 + %iNp142 = inttoptr i64 %ua.raw141 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp142) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.199: ; preds = %match.arm.49 - %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 - %iNp141 = inttoptr i64 %ua.raw140 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp141) + %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 + %iNp145 = inttoptr i64 %ua.raw144 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp145) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %iNp144 = inttoptr i64 %ua.raw143 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp144) + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %iNp148 = inttoptr i64 %ua.raw147 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp148) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 - %iNp147 = inttoptr i64 %ua.raw146 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp147) + %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 + %iNp151 = inttoptr i64 %ua.raw150 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp151) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 - %iNp150 = inttoptr i64 %ua.raw149 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp150) + %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 + %iNp154 = inttoptr i64 %ua.raw153 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 - %iNp153 = inttoptr i64 %ua.raw152 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp153) + %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 + %iNp157 = inttoptr i64 %ua.raw156 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 } diff --git a/examples/expected/0518-packs-pack-value-dispatch.ir b/examples/expected/0518-packs-pack-value-dispatch.ir index bbda162..465fcab 100644 --- a/examples/expected/0518-packs-pack-value-dispatch.ir +++ b/examples/expected/0518-packs-pack-value-dispatch.ir @@ -1156,8 +1156,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [70 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [70 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1264,8 +1267,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [70 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [70 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1275,15 +1281,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1291,16 +1297,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1320,74 +1326,74 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1401,18 +1407,18 @@ dispatch.default.151: ; preds = %match.arm.47 br label %dispatch.merge.150 dispatch.case.152: ; preds = %match.arm.47 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load [4 x i64], ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 dispatch.case.153: ; preds = %match.arm.47 - %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr - %ua.load86 = load [1 x { i64, i64 }], ptr %ua.ptr85, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load86) + %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr + %ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.150 @@ -1426,18 +1432,18 @@ dispatch.default.165: ; preds = %match.arm.48 br label %dispatch.merge.164 dispatch.case.166: ; preds = %match.arm.48 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load { ptr, i64 }, ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 dispatch.case.167: ; preds = %match.arm.48 - %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr - %ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load95) + %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr + %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.164 @@ -1451,128 +1457,128 @@ dispatch.default.179: ; preds = %match.arm.49 br label %dispatch.merge.178 dispatch.case.180: ; preds = %match.arm.49 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw98 to ptr + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw102 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.181: ; preds = %match.arm.49 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %iNp101 = inttoptr i64 %ua.raw100 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp101) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %iNp105 = inttoptr i64 %ua.raw104 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.182: ; preds = %match.arm.49 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp104 = inttoptr i64 %ua.raw103 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp104) + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp108 = inttoptr i64 %ua.raw107 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.183: ; preds = %match.arm.49 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %iNp107 = inttoptr i64 %ua.raw106 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp107) + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %iNp111 = inttoptr i64 %ua.raw110 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.184: ; preds = %match.arm.49 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %iNp110 = inttoptr i64 %ua.raw109 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp110) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %iNp114 = inttoptr i64 %ua.raw113 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.185: ; preds = %match.arm.49 - %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 - %iNp113 = inttoptr i64 %ua.raw112 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp113) + %ua.raw116 = extractvalue { i64, i64 } %loadN, 1 + %iNp117 = inttoptr i64 %ua.raw116 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 - %iNp116 = inttoptr i64 %ua.raw115 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp116) + %ua.raw119 = extractvalue { i64, i64 } %loadN, 1 + %iNp120 = inttoptr i64 %ua.raw119 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp119 = inttoptr i64 %ua.raw118 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp119) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp123 = inttoptr i64 %ua.raw122 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 - %iNp122 = inttoptr i64 %ua.raw121 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp122) + %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 + %iNp126 = inttoptr i64 %ua.raw125 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.178 } diff --git a/examples/expected/0528-packs-protocol-pack-methods.ir b/examples/expected/0528-packs-protocol-pack-methods.ir index 5086d23..ccffde8 100644 --- a/examples/expected/0528-packs-protocol-pack-methods.ir +++ b/examples/expected/0528-packs-protocol-pack-methods.ir @@ -1226,8 +1226,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [86 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [86 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1344,8 +1347,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [86 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag32 = extractvalue { i64, i64 } %loadN, 0 + %refl.val33 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype34 = icmp eq i64 %refl.tag32, 13 + %refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32 + %tn.gep = getelementptr inbounds [86 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1355,15 +1361,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw33 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw33) + %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw36 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw36) + %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1371,16 +1377,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw38 to i32 + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw42 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw39 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw39 to double + %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw43 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1400,106 +1406,106 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr44 = inttoptr i64 %ua.raw43 to ptr - %ua.load45 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr44, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load45) + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr + %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { ptr, ptr, ptr }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load {}, ptr %ua.ptr52, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load {}, ptr %ua.ptr56, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load { i64 }, ptr %ua.ptr56, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { ptr, i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, i64 }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { ptr, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Greeter(ptr %0, { ptr, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { ptr, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Greeter(ptr %0, { ptr, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load { ptr }, ptr %ua.ptr84, align 8 - %callN = call { ptr, i64 } @struct_to_string____Greeter__Vtable(ptr %0, { ptr } %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load { ptr }, ptr %ua.ptr88, align 8 + %callN = call { ptr, i64 } @struct_to_string____Greeter__Vtable(ptr %0, { ptr } %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { i64 }, ptr %ua.ptr88, align 8 - %callN = call { ptr, i64 } @struct_to_string__Dog(ptr %0, { i64 } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { i64 }, ptr %ua.ptr92, align 8 + %callN = call { ptr, i64 } @struct_to_string__Dog(ptr %0, { i64 } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.108: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { i64 }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string__Cat(ptr %0, { i64 } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { i64 }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string__Cat(ptr %0, { i64 } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1513,26 +1519,26 @@ dispatch.default.175: ; preds = %match.arm.47 br label %dispatch.merge.174 dispatch.case.176: ; preds = %match.arm.47 - %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr97 = inttoptr i64 %ua.raw96 to ptr - %ua.load98 = load [4 x i64], ptr %ua.ptr97, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load98) + %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr101 = inttoptr i64 %ua.raw100 to ptr + %ua.load102 = load [4 x i64], ptr %ua.ptr101, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load102) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.174 dispatch.case.177: ; preds = %match.arm.47 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr101 = inttoptr i64 %ua.raw100 to ptr - %ua.load102 = load [2 x { i64, i64 }], ptr %ua.ptr101, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load102) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr + %ua.load106 = load [2 x { i64, i64 }], ptr %ua.ptr105, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_2_Any(ptr %0, [2 x { i64, i64 }] %ua.load106) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.174 dispatch.case.178: ; preds = %match.arm.47 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr - %ua.load106 = load [1 x { i64, i64 }], ptr %ua.ptr105, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load106) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr109 = inttoptr i64 %ua.raw108 to ptr + %ua.load110 = load [1 x { i64, i64 }], ptr %ua.ptr109, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.174 @@ -1546,26 +1552,26 @@ dispatch.default.195: ; preds = %match.arm.48 br label %dispatch.merge.194 dispatch.case.196: ; preds = %match.arm.48 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr - %ua.load111 = load { ptr, i64 }, ptr %ua.ptr110, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load111) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr + %ua.load115 = load { ptr, i64 }, ptr %ua.ptr114, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.194 dispatch.case.197: ; preds = %match.arm.48 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr - %ua.load115 = load { ptr, i64 }, ptr %ua.ptr114, align 8 - %callN = call { ptr, i64 } @slice_to_string__Greeter(ptr %0, { ptr, i64 } %ua.load115) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr + %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 + %callN = call { ptr, i64 } @slice_to_string__Greeter(ptr %0, { ptr, i64 } %ua.load119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.194 dispatch.case.198: ; preds = %match.arm.48 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr - %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load119) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr122 = inttoptr i64 %ua.raw121 to ptr + %ua.load123 = load { ptr, i64 }, ptr %ua.ptr122, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load123) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.194 @@ -1579,156 +1585,156 @@ dispatch.default.215: ; preds = %match.arm.49 br label %dispatch.merge.214 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw122 to ptr + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw126 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 - %iNp125 = inttoptr i64 %ua.raw124 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp125) + %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 + %iNp129 = inttoptr i64 %ua.raw128 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp129) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.218: ; preds = %match.arm.49 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp128 = inttoptr i64 %ua.raw127 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp128) + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp132 = inttoptr i64 %ua.raw131 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp132) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.219: ; preds = %match.arm.49 - %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 - %iNp131 = inttoptr i64 %ua.raw130 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp131) + %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 + %iNp135 = inttoptr i64 %ua.raw134 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp135) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.220: ; preds = %match.arm.49 - %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 - %iNp134 = inttoptr i64 %ua.raw133 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp134) + %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 + %iNp138 = inttoptr i64 %ua.raw137 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp138) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.221: ; preds = %match.arm.49 - %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 - %iNp137 = inttoptr i64 %ua.raw136 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp137) + %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 + %iNp141 = inttoptr i64 %ua.raw140 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp141) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.222: ; preds = %match.arm.49 - %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 - %iNp140 = inttoptr i64 %ua.raw139 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp140) + %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 + %iNp144 = inttoptr i64 %ua.raw143 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp144) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.223: ; preds = %match.arm.49 - %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 - %iNp143 = inttoptr i64 %ua.raw142 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp143) + %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 + %iNp147 = inttoptr i64 %ua.raw146 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp147) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.224: ; preds = %match.arm.49 - %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 - %iNp146 = inttoptr i64 %ua.raw145 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Dog(ptr %0, ptr %iNp146) + %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 + %iNp150 = inttoptr i64 %ua.raw149 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Dog(ptr %0, ptr %iNp150) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.225: ; preds = %match.arm.49 - %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 - %iNp149 = inttoptr i64 %ua.raw148 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Cat(ptr %0, ptr %iNp149) + %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 + %iNp153 = inttoptr i64 %ua.raw152 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Cat(ptr %0, ptr %iNp153) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.226: ; preds = %match.arm.49 - %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 - %iNp152 = inttoptr i64 %ua.raw151 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp152) + %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 + %iNp156 = inttoptr i64 %ua.raw155 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp156) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.227: ; preds = %match.arm.49 - %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 - %iNp155 = inttoptr i64 %ua.raw154 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp155) + %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 + %iNp159 = inttoptr i64 %ua.raw158 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp159) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.228: ; preds = %match.arm.49 - %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 - %iNp158 = inttoptr i64 %ua.raw157 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp158) + %ua.raw161 = extractvalue { i64, i64 } %loadN, 1 + %iNp162 = inttoptr i64 %ua.raw161 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp162) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.229: ; preds = %match.arm.49 - %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 - %iNp161 = inttoptr i64 %ua.raw160 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp161) + %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 + %iNp165 = inttoptr i64 %ua.raw164 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp165) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.230: ; preds = %match.arm.49 - %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 - %iNp164 = inttoptr i64 %ua.raw163 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp164) + %ua.raw167 = extractvalue { i64, i64 } %loadN, 1 + %iNp168 = inttoptr i64 %ua.raw167 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_2_Any(ptr %0, ptr %iNp168) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.231: ; preds = %match.arm.49 - %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 - %iNp167 = inttoptr i64 %ua.raw166 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp167) + %ua.raw170 = extractvalue { i64, i64 } %loadN, 1 + %iNp171 = inttoptr i64 %ua.raw170 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp171) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.232: ; preds = %match.arm.49 - %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 - %iNp170 = inttoptr i64 %ua.raw169 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Dog(ptr %0, ptr %iNp170) + %ua.raw173 = extractvalue { i64, i64 } %loadN, 1 + %iNp174 = inttoptr i64 %ua.raw173 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Dog(ptr %0, ptr %iNp174) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.233: ; preds = %match.arm.49 - %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 - %iNp173 = inttoptr i64 %ua.raw172 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Cat(ptr %0, ptr %iNp173) + %ua.raw176 = extractvalue { i64, i64 } %loadN, 1 + %iNp177 = inttoptr i64 %ua.raw176 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Cat(ptr %0, ptr %iNp177) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.234: ; preds = %match.arm.49 - %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 - %iNp176 = inttoptr i64 %ua.raw175 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp176) + %ua.raw179 = extractvalue { i64, i64 } %loadN, 1 + %iNp180 = inttoptr i64 %ua.raw179 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp180) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.235: ; preds = %match.arm.49 - %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 - %iNp179 = inttoptr i64 %ua.raw178 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp179) + %ua.raw182 = extractvalue { i64, i64 } %loadN, 1 + %iNp183 = inttoptr i64 %ua.raw182 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp183) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.236: ; preds = %match.arm.49 - %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 - %iNp182 = inttoptr i64 %ua.raw181 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp182) + %ua.raw185 = extractvalue { i64, i64 } %loadN, 1 + %iNp186 = inttoptr i64 %ua.raw185 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp186) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.237: ; preds = %match.arm.49 - %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 - %iNp185 = inttoptr i64 %ua.raw184 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp185) + %ua.raw188 = extractvalue { i64, i64 } %loadN, 1 + %iNp189 = inttoptr i64 %ua.raw188 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp189) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 } diff --git a/examples/expected/0903-optionals-optional-roundtrip.ir b/examples/expected/0903-optionals-optional-roundtrip.ir index 25fc18b..af13535 100644 --- a/examples/expected/0903-optionals-optional-roundtrip.ir +++ b/examples/expected/0903-optionals-optional-roundtrip.ir @@ -1252,8 +1252,11 @@ match.arm.50: ; preds = %entry match.arm.51: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [87 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [87 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.65, label %if.else.66 @@ -1376,8 +1379,11 @@ match.arm.62: ; preds = %entry match.arm.63: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [87 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [87 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.49 @@ -1387,15 +1393,15 @@ match.unr.64: ; preds = %entry if.then.65: ; preds = %match.arm.51 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.67 if.else.66: ; preds = %match.arm.51 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.67 @@ -1403,16 +1409,16 @@ if.merge.67: ; preds = %if.else.66, %if.the br label %match.merge.49 f32.unbox.93: ; preds = %match.arm.54 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.95 f64.unbox.94: ; preds = %match.arm.54 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.95 @@ -1432,106 +1438,106 @@ dispatch.default.107: ; preds = %match.arm.55 br label %dispatch.merge.106 dispatch.case.108: ; preds = %match.arm.55 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.109: ; preds = %match.arm.55 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.110: ; preds = %match.arm.55 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.111: ; preds = %match.arm.55 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.112: ; preds = %match.arm.55 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.113: ; preds = %match.arm.55 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.114: ; preds = %match.arm.55 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.115: ; preds = %match.arm.55 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.116: ; preds = %match.arm.55 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.117: ; preds = %match.arm.55 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load { { float, i1 }, { float, i1 } }, ptr %ua.ptr84, align 4 - %callN = call { ptr, i64 } @struct_to_string__ProposedSize(ptr %0, { { float, i1 }, { float, i1 } } %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load { { float, i1 }, { float, i1 } }, ptr %ua.ptr88, align 4 + %callN = call { ptr, i64 } @struct_to_string__ProposedSize(ptr %0, { { float, i1 }, { float, i1 } } %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.118: ; preds = %match.arm.55 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load { ptr, ptr }, ptr %ua.ptr88, align 8 - %callN = call { ptr, i64 } @struct_to_string__Sizable(ptr %0, { ptr, ptr } %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load { ptr, ptr }, ptr %ua.ptr92, align 8 + %callN = call { ptr, i64 } @struct_to_string__Sizable(ptr %0, { ptr, ptr } %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.119: ; preds = %match.arm.55 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { ptr }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string____Sizable__Vtable(ptr %0, { ptr } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { ptr }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string____Sizable__Vtable(ptr %0, { ptr } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.120: ; preds = %match.arm.55 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load {}, ptr %ua.ptr96, align 1 - %callN = call { ptr, i64 } @struct_to_string__Widget(ptr %0, {} %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load {}, ptr %ua.ptr100, align 1 + %callN = call { ptr, i64 } @struct_to_string__Widget(ptr %0, {} %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 @@ -1545,18 +1551,18 @@ dispatch.default.187: ; preds = %match.arm.59 br label %dispatch.merge.186 dispatch.case.188: ; preds = %match.arm.59 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr101 = inttoptr i64 %ua.raw100 to ptr - %ua.load102 = load [4 x i64], ptr %ua.ptr101, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load102) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr + %ua.load106 = load [4 x i64], ptr %ua.ptr105, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load106) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.186 dispatch.case.189: ; preds = %match.arm.59 - %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr105 = inttoptr i64 %ua.raw104 to ptr - %ua.load106 = load [1 x { i64, i64 }], ptr %ua.ptr105, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load106) + %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr109 = inttoptr i64 %ua.raw108 to ptr + %ua.load110 = load [1 x { i64, i64 }], ptr %ua.ptr109, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.186 @@ -1570,18 +1576,18 @@ dispatch.default.201: ; preds = %match.arm.60 br label %dispatch.merge.200 dispatch.case.202: ; preds = %match.arm.60 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr - %ua.load111 = load { ptr, i64 }, ptr %ua.ptr110, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load111) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr + %ua.load115 = load { ptr, i64 }, ptr %ua.ptr114, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.200 dispatch.case.203: ; preds = %match.arm.60 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr - %ua.load115 = load { ptr, i64 }, ptr %ua.ptr114, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load115) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr + %ua.load119 = load { ptr, i64 }, ptr %ua.ptr118, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.200 @@ -1595,170 +1601,170 @@ dispatch.default.215: ; preds = %match.arm.61 br label %dispatch.merge.214 dispatch.case.216: ; preds = %match.arm.61 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw118 to ptr + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw122 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.217: ; preds = %match.arm.61 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.218: ; preds = %match.arm.61 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.219: ; preds = %match.arm.61 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.220: ; preds = %match.arm.61 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.221: ; preds = %match.arm.61 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.222: ; preds = %match.arm.61 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.223: ; preds = %match.arm.61 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.224: ; preds = %match.arm.61 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Widget(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Widget(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.225: ; preds = %match.arm.61 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.226: ; preds = %match.arm.61 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.227: ; preds = %match.arm.61 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.228: ; preds = %match.arm.61 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.229: ; preds = %match.arm.61 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.230: ; preds = %match.arm.61 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.231: ; preds = %match.arm.61 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.232: ; preds = %match.arm.61 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.233: ; preds = %match.arm.61 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ProposedSize(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ProposedSize(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.234: ; preds = %match.arm.61 - %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 - %iNp172 = inttoptr i64 %ua.raw171 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp172) + %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 + %iNp176 = inttoptr i64 %ua.raw175 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %iNp176) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.235: ; preds = %match.arm.61 - %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 - %iNp175 = inttoptr i64 %ua.raw174 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp175) + %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 + %iNp179 = inttoptr i64 %ua.raw178 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp179) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.236: ; preds = %match.arm.61 - %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 - %iNp178 = inttoptr i64 %ua.raw177 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp178) + %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 + %iNp182 = inttoptr i64 %ua.raw181 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp182) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.237: ; preds = %match.arm.61 - %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 - %iNp181 = inttoptr i64 %ua.raw180 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Sizable(ptr %0, ptr %iNp181) + %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 + %iNp185 = inttoptr i64 %ua.raw184 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Sizable(ptr %0, ptr %iNp185) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.238: ; preds = %match.arm.61 - %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 - %iNp184 = inttoptr i64 %ua.raw183 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Widget(ptr %0, ptr %iNp184) + %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 + %iNp188 = inttoptr i64 %ua.raw187 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_Widget(ptr %0, ptr %iNp188) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 dispatch.case.239: ; preds = %match.arm.61 - %ua.raw186 = extractvalue { i64, i64 } %loadN, 1 - %iNp187 = inttoptr i64 %ua.raw186 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr___Sizable__Vtable(ptr %0, ptr %iNp187) + %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 + %iNp191 = inttoptr i64 %ua.raw190 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr___Sizable__Vtable(ptr %0, ptr %iNp191) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.214 @@ -1772,10 +1778,10 @@ dispatch.default.326: ; preds = %match.arm.62 br label %dispatch.merge.325 dispatch.case.327: ; preds = %match.arm.62 - %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr191 = inttoptr i64 %ua.raw190 to ptr - %ua.load192 = load { float, i1 }, ptr %ua.ptr191, align 4 - %callN = call { ptr, i64 } @optional_to_string__opt_f32(ptr %0, { float, i1 } %ua.load192) + %ua.raw194 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr195 = inttoptr i64 %ua.raw194 to ptr + %ua.load196 = load { float, i1 }, ptr %ua.ptr195, align 4 + %callN = call { ptr, i64 } @optional_to_string__opt_f32(ptr %0, { float, i1 } %ua.load196) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.325 } diff --git a/examples/expected/0904-optionals-any-to-string-optional.ir b/examples/expected/0904-optionals-any-to-string-optional.ir index dd84d08..e2a465f 100644 --- a/examples/expected/0904-optionals-any-to-string-optional.ir +++ b/examples/expected/0904-optionals-any-to-string-optional.ir @@ -1173,8 +1173,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [78 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [78 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1290,8 +1293,11 @@ match.arm.50: ; preds = %entry, %entry, %ent match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [78 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [78 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1301,15 +1307,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1317,16 +1323,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1346,82 +1352,82 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } }, ptr %ua.ptr84, align 8 - %callN = call { ptr, i64 } @struct_to_string__S(ptr %0, { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } }, ptr %ua.ptr88, align 8 + %callN = call { ptr, i64 } @struct_to_string__S(ptr %0, { { i64, i1 }, { { ptr, i64 }, i1 }, { i1, i1 } } %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1435,18 +1441,18 @@ dispatch.default.157: ; preds = %match.arm.47 br label %dispatch.merge.156 dispatch.case.158: ; preds = %match.arm.47 - %ua.raw88 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr89 = inttoptr i64 %ua.raw88 to ptr - %ua.load90 = load [4 x i64], ptr %ua.ptr89, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load90) + %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr + %ua.load94 = load [4 x i64], ptr %ua.ptr93, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load94) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.156 dispatch.case.159: ; preds = %match.arm.47 - %ua.raw92 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr93 = inttoptr i64 %ua.raw92 to ptr - %ua.load94 = load [1 x { i64, i64 }], ptr %ua.ptr93, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load94) + %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr97 = inttoptr i64 %ua.raw96 to ptr + %ua.load98 = load [1 x { i64, i64 }], ptr %ua.ptr97, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load98) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.156 @@ -1460,18 +1466,18 @@ dispatch.default.171: ; preds = %match.arm.48 br label %dispatch.merge.170 dispatch.case.172: ; preds = %match.arm.48 - %ua.raw97 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr98 = inttoptr i64 %ua.raw97 to ptr - %ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load99) + %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr + %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load103) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 dispatch.case.173: ; preds = %match.arm.48 - %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr - %ua.load103 = load { ptr, i64 }, ptr %ua.ptr102, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load103) + %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr + %ua.load107 = load { ptr, i64 }, ptr %ua.ptr106, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load107) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.170 @@ -1485,128 +1491,128 @@ dispatch.default.185: ; preds = %match.arm.49 br label %dispatch.merge.184 dispatch.case.186: ; preds = %match.arm.49 - %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw106 to ptr + %ua.raw110 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw110 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.187: ; preds = %match.arm.49 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %iNp109 = inttoptr i64 %ua.raw108 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp109) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %iNp113 = inttoptr i64 %ua.raw112 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.188: ; preds = %match.arm.49 - %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 - %iNp112 = inttoptr i64 %ua.raw111 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp112) + %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 + %iNp116 = inttoptr i64 %ua.raw115 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp116) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.189: ; preds = %match.arm.49 - %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 - %iNp115 = inttoptr i64 %ua.raw114 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp115) + %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 + %iNp119 = inttoptr i64 %ua.raw118 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.190: ; preds = %match.arm.49 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %iNp118 = inttoptr i64 %ua.raw117 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp118) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %iNp122 = inttoptr i64 %ua.raw121 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp122) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.191: ; preds = %match.arm.49 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.192: ; preds = %match.arm.49 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.193: ; preds = %match.arm.49 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.194: ; preds = %match.arm.49 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.195: ; preds = %match.arm.49 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.196: ; preds = %match.arm.49 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.197: ; preds = %match.arm.49 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_S(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_S(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.198: ; preds = %match.arm.49 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.199: ; preds = %match.arm.49 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.200: ; preds = %match.arm.49 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.201: ; preds = %match.arm.49 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.202: ; preds = %match.arm.49 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 dispatch.case.203: ; preds = %match.arm.49 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.184 @@ -1620,26 +1626,26 @@ dispatch.default.272: ; preds = %match.arm.50 br label %dispatch.merge.271 dispatch.case.273: ; preds = %match.arm.50 - %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr161 = inttoptr i64 %ua.raw160 to ptr - %ua.load162 = load { i64, i1 }, ptr %ua.ptr161, align 8 - %callN = call { ptr, i64 } @optional_to_string__opt_s64(ptr %0, { i64, i1 } %ua.load162) + %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr165 = inttoptr i64 %ua.raw164 to ptr + %ua.load166 = load { i64, i1 }, ptr %ua.ptr165, align 8 + %callN = call { ptr, i64 } @optional_to_string__opt_s64(ptr %0, { i64, i1 } %ua.load166) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.271 dispatch.case.274: ; preds = %match.arm.50 - %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr165 = inttoptr i64 %ua.raw164 to ptr - %ua.load166 = load { { ptr, i64 }, i1 }, ptr %ua.ptr165, align 8 - %callN = call { ptr, i64 } @optional_to_string__opt_string(ptr %0, { { ptr, i64 }, i1 } %ua.load166) + %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr169 = inttoptr i64 %ua.raw168 to ptr + %ua.load170 = load { { ptr, i64 }, i1 }, ptr %ua.ptr169, align 8 + %callN = call { ptr, i64 } @optional_to_string__opt_string(ptr %0, { { ptr, i64 }, i1 } %ua.load170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.271 dispatch.case.275: ; preds = %match.arm.50 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr169 = inttoptr i64 %ua.raw168 to ptr - %ua.load170 = load { i1, i1 }, ptr %ua.ptr169, align 1 - %callN = call { ptr, i64 } @optional_to_string__opt_bool(ptr %0, { i1, i1 } %ua.load170) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr173 = inttoptr i64 %ua.raw172 to ptr + %ua.load174 = load { i1, i1 }, ptr %ua.ptr173, align 1 + %callN = call { ptr, i64 } @optional_to_string__opt_bool(ptr %0, { i1, i1 } %ua.load174) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.271 } diff --git a/examples/expected/1004-errors-try.ir b/examples/expected/1004-errors-try.ir index 022b131..d091a5b 100644 --- a/examples/expected/1004-errors-try.ir +++ b/examples/expected/1004-errors-try.ir @@ -1168,8 +1168,11 @@ match.arm.48: ; preds = %entry match.arm.49: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.63, label %if.else.64 @@ -1287,8 +1290,11 @@ match.arm.60: ; No predecessors! match.arm.61: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag37 = extractvalue { i64, i64 } %loadN, 0 + %refl.val38 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype39 = icmp eq i64 %refl.tag37, 13 + %refl.tid40 = select i1 %refl.istype39, i64 %refl.val38, i64 %refl.tag37 + %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid40 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.47 @@ -1298,15 +1304,15 @@ match.unr.62: ; preds = %entry if.then.63: ; preds = %match.arm.49 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw38) + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw42) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.65 if.else.64: ; preds = %match.arm.49 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw41) + %ua.raw45 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw45) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.65 @@ -1314,16 +1320,16 @@ if.merge.65: ; preds = %if.else.64, %if.the br label %match.merge.47 f32.unbox.91: ; preds = %match.arm.52 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw43 to i32 + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw47 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.93 f64.unbox.92: ; preds = %match.arm.52 - %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw44 to double + %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw48 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.93 @@ -1343,74 +1349,74 @@ dispatch.default.105: ; preds = %match.arm.53 br label %dispatch.merge.104 dispatch.case.106: ; preds = %match.arm.53 - %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr49 = inttoptr i64 %ua.raw48 to ptr - %ua.load50 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr49, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load50) + %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr + %ua.load54 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr53, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load54) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.107: ; preds = %match.arm.53 - %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr - %ua.load54 = load { ptr, ptr, ptr }, ptr %ua.ptr53, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load54) + %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr + %ua.load58 = load { ptr, ptr, ptr }, ptr %ua.ptr57, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load58) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.108: ; preds = %match.arm.53 - %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr - %ua.load58 = load {}, ptr %ua.ptr57, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load58) + %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr + %ua.load62 = load {}, ptr %ua.ptr61, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load62) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.109: ; preds = %match.arm.53 - %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr - %ua.load62 = load { i64 }, ptr %ua.ptr61, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load62) + %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr + %ua.load66 = load { i64 }, ptr %ua.ptr65, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load66) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.110: ; preds = %match.arm.53 - %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr - %ua.load66 = load { ptr, i64 }, ptr %ua.ptr65, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load66) + %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr + %ua.load70 = load { ptr, i64 }, ptr %ua.ptr69, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load70) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.111: ; preds = %match.arm.53 - %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr - %ua.load70 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr69, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load70) + %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr + %ua.load74 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr73, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load74) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.112: ; preds = %match.arm.53 - %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr - %ua.load74 = load { ptr, i64, i64 }, ptr %ua.ptr73, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load74) + %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr + %ua.load78 = load { ptr, i64, i64 }, ptr %ua.ptr77, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load78) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.113: ; preds = %match.arm.53 - %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr - %ua.load78 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr77, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load78) + %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr + %ua.load82 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr81, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load82) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 dispatch.case.114: ; preds = %match.arm.53 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.104 @@ -1424,18 +1430,18 @@ dispatch.default.161: ; preds = %match.arm.57 br label %dispatch.merge.160 dispatch.case.162: ; preds = %match.arm.57 - %ua.raw85 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr86 = inttoptr i64 %ua.raw85 to ptr - %ua.load87 = load [4 x i64], ptr %ua.ptr86, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load87) + %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr + %ua.load91 = load [4 x i64], ptr %ua.ptr90, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load91) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.160 dispatch.case.163: ; preds = %match.arm.57 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load [1 x { i64, i64 }], ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load [1 x { i64, i64 }], ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.160 @@ -1449,18 +1455,18 @@ dispatch.default.175: ; preds = %match.arm.58 br label %dispatch.merge.174 dispatch.case.176: ; preds = %match.arm.58 - %ua.raw94 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr95 = inttoptr i64 %ua.raw94 to ptr - %ua.load96 = load { ptr, i64 }, ptr %ua.ptr95, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load96) + %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr + %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load100) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.174 dispatch.case.177: ; preds = %match.arm.58 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr - %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load100) + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr103 = inttoptr i64 %ua.raw102 to ptr + %ua.load104 = load { ptr, i64 }, ptr %ua.ptr103, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load104) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.174 @@ -1474,135 +1480,135 @@ dispatch.default.189: ; preds = %match.arm.59 br label %dispatch.merge.188 dispatch.case.190: ; preds = %match.arm.59 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw103 to ptr + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw107 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.191: ; preds = %match.arm.59 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %iNp106 = inttoptr i64 %ua.raw105 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp106) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %iNp110 = inttoptr i64 %ua.raw109 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.192: ; preds = %match.arm.59 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %iNp109 = inttoptr i64 %ua.raw108 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp109) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %iNp113 = inttoptr i64 %ua.raw112 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.193: ; preds = %match.arm.59 - %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 - %iNp112 = inttoptr i64 %ua.raw111 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp112) + %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 + %iNp116 = inttoptr i64 %ua.raw115 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp116) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.194: ; preds = %match.arm.59 - %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 - %iNp115 = inttoptr i64 %ua.raw114 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp115) + %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 + %iNp119 = inttoptr i64 %ua.raw118 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.195: ; preds = %match.arm.59 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %iNp118 = inttoptr i64 %ua.raw117 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp118) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %iNp122 = inttoptr i64 %ua.raw121 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp122) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.196: ; preds = %match.arm.59 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.197: ; preds = %match.arm.59 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.198: ; preds = %match.arm.59 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.199: ; preds = %match.arm.59 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.200: ; preds = %match.arm.59 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.201: ; preds = %match.arm.59 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.202: ; preds = %match.arm.59 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.203: ; preds = %match.arm.59 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.204: ; preds = %match.arm.59 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.205: ; preds = %match.arm.59 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.206: ; preds = %match.arm.59 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.207: ; preds = %match.arm.59 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 dispatch.case.208: ; preds = %match.arm.59 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.188 } diff --git a/examples/expected/1006-errors-inferred-error-sets.ir b/examples/expected/1006-errors-inferred-error-sets.ir index 52e2364..33a164b 100644 --- a/examples/expected/1006-errors-inferred-error-sets.ir +++ b/examples/expected/1006-errors-inferred-error-sets.ir @@ -1175,8 +1175,11 @@ match.arm.50: ; preds = %entry match.arm.51: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [76 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [76 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.65, label %if.else.66 @@ -1294,8 +1297,11 @@ match.arm.62: ; No predecessors! match.arm.63: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [76 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag37 = extractvalue { i64, i64 } %loadN, 0 + %refl.val38 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype39 = icmp eq i64 %refl.tag37, 13 + %refl.tid40 = select i1 %refl.istype39, i64 %refl.val38, i64 %refl.tag37 + %tn.gep = getelementptr inbounds [76 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid40 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.49 @@ -1305,15 +1311,15 @@ match.unr.64: ; preds = %entry if.then.65: ; preds = %match.arm.51 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw38) + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw42) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.67 if.else.66: ; preds = %match.arm.51 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw41) + %ua.raw45 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw45) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.67 @@ -1321,16 +1327,16 @@ if.merge.67: ; preds = %if.else.66, %if.the br label %match.merge.49 f32.unbox.93: ; preds = %match.arm.54 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw43 to i32 + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw47 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.95 f64.unbox.94: ; preds = %match.arm.54 - %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw44 to double + %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw48 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.95 @@ -1350,74 +1356,74 @@ dispatch.default.107: ; preds = %match.arm.55 br label %dispatch.merge.106 dispatch.case.108: ; preds = %match.arm.55 - %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr49 = inttoptr i64 %ua.raw48 to ptr - %ua.load50 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr49, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load50) + %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr + %ua.load54 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr53, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load54) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.109: ; preds = %match.arm.55 - %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr - %ua.load54 = load { ptr, ptr, ptr }, ptr %ua.ptr53, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load54) + %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr + %ua.load58 = load { ptr, ptr, ptr }, ptr %ua.ptr57, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load58) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.110: ; preds = %match.arm.55 - %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr - %ua.load58 = load {}, ptr %ua.ptr57, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load58) + %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr + %ua.load62 = load {}, ptr %ua.ptr61, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load62) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.111: ; preds = %match.arm.55 - %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr - %ua.load62 = load { i64 }, ptr %ua.ptr61, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load62) + %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr + %ua.load66 = load { i64 }, ptr %ua.ptr65, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load66) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.112: ; preds = %match.arm.55 - %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr - %ua.load66 = load { ptr, i64 }, ptr %ua.ptr65, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load66) + %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr + %ua.load70 = load { ptr, i64 }, ptr %ua.ptr69, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load70) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.113: ; preds = %match.arm.55 - %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr - %ua.load70 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr69, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load70) + %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr + %ua.load74 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr73, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load74) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.114: ; preds = %match.arm.55 - %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr - %ua.load74 = load { ptr, i64, i64 }, ptr %ua.ptr73, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load74) + %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr + %ua.load78 = load { ptr, i64, i64 }, ptr %ua.ptr77, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load78) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.115: ; preds = %match.arm.55 - %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr - %ua.load78 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr77, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load78) + %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr + %ua.load82 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr81, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load82) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 dispatch.case.116: ; preds = %match.arm.55 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.106 @@ -1431,18 +1437,18 @@ dispatch.default.163: ; preds = %match.arm.59 br label %dispatch.merge.162 dispatch.case.164: ; preds = %match.arm.59 - %ua.raw85 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr86 = inttoptr i64 %ua.raw85 to ptr - %ua.load87 = load [4 x i64], ptr %ua.ptr86, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load87) + %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr + %ua.load91 = load [4 x i64], ptr %ua.ptr90, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load91) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.162 dispatch.case.165: ; preds = %match.arm.59 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load [1 x { i64, i64 }], ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load [1 x { i64, i64 }], ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.162 @@ -1456,18 +1462,18 @@ dispatch.default.177: ; preds = %match.arm.60 br label %dispatch.merge.176 dispatch.case.178: ; preds = %match.arm.60 - %ua.raw94 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr95 = inttoptr i64 %ua.raw94 to ptr - %ua.load96 = load { ptr, i64 }, ptr %ua.ptr95, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load96) + %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr + %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load100) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.176 dispatch.case.179: ; preds = %match.arm.60 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr - %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load100) + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr103 = inttoptr i64 %ua.raw102 to ptr + %ua.load104 = load { ptr, i64 }, ptr %ua.ptr103, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load104) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.176 @@ -1481,135 +1487,135 @@ dispatch.default.191: ; preds = %match.arm.61 br label %dispatch.merge.190 dispatch.case.192: ; preds = %match.arm.61 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw103 to ptr + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw107 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.193: ; preds = %match.arm.61 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %iNp106 = inttoptr i64 %ua.raw105 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp106) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %iNp110 = inttoptr i64 %ua.raw109 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.194: ; preds = %match.arm.61 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %iNp109 = inttoptr i64 %ua.raw108 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp109) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %iNp113 = inttoptr i64 %ua.raw112 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.195: ; preds = %match.arm.61 - %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 - %iNp112 = inttoptr i64 %ua.raw111 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp112) + %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 + %iNp116 = inttoptr i64 %ua.raw115 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp116) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.196: ; preds = %match.arm.61 - %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 - %iNp115 = inttoptr i64 %ua.raw114 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp115) + %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 + %iNp119 = inttoptr i64 %ua.raw118 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.197: ; preds = %match.arm.61 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %iNp118 = inttoptr i64 %ua.raw117 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp118) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %iNp122 = inttoptr i64 %ua.raw121 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp122) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.198: ; preds = %match.arm.61 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.199: ; preds = %match.arm.61 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.200: ; preds = %match.arm.61 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.201: ; preds = %match.arm.61 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.202: ; preds = %match.arm.61 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.203: ; preds = %match.arm.61 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.204: ; preds = %match.arm.61 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.205: ; preds = %match.arm.61 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.206: ; preds = %match.arm.61 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.207: ; preds = %match.arm.61 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.208: ; preds = %match.arm.61 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.209: ; preds = %match.arm.61 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.210: ; preds = %match.arm.61 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 } diff --git a/examples/expected/1009-errors-catch.ir b/examples/expected/1009-errors-catch.ir index 19ef5c5..72ef893 100644 --- a/examples/expected/1009-errors-catch.ir +++ b/examples/expected/1009-errors-catch.ir @@ -1170,8 +1170,11 @@ match.arm.68: ; preds = %entry match.arm.69: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [75 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.83, label %if.else.84 @@ -1289,8 +1292,11 @@ match.arm.80: ; No predecessors! match.arm.81: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag37 = extractvalue { i64, i64 } %loadN, 0 + %refl.val38 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype39 = icmp eq i64 %refl.tag37, 13 + %refl.tid40 = select i1 %refl.istype39, i64 %refl.val38, i64 %refl.tag37 + %tn.gep = getelementptr inbounds [75 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid40 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.67 @@ -1300,15 +1306,15 @@ match.unr.82: ; preds = %entry if.then.83: ; preds = %match.arm.69 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw38 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw38) + %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw42) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.85 if.else.84: ; preds = %match.arm.69 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw41) + %ua.raw45 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw45) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.85 @@ -1316,16 +1322,16 @@ if.merge.85: ; preds = %if.else.84, %if.the br label %match.merge.67 f32.unbox.111: ; preds = %match.arm.72 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw43 to i32 + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw47 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.113 f64.unbox.112: ; preds = %match.arm.72 - %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw44 to double + %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw48 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.113 @@ -1345,74 +1351,74 @@ dispatch.default.125: ; preds = %match.arm.73 br label %dispatch.merge.124 dispatch.case.126: ; preds = %match.arm.73 - %ua.raw48 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr49 = inttoptr i64 %ua.raw48 to ptr - %ua.load50 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr49, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load50) + %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr + %ua.load54 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr53, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load54) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.127: ; preds = %match.arm.73 - %ua.raw52 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr53 = inttoptr i64 %ua.raw52 to ptr - %ua.load54 = load { ptr, ptr, ptr }, ptr %ua.ptr53, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load54) + %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr + %ua.load58 = load { ptr, ptr, ptr }, ptr %ua.ptr57, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load58) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.128: ; preds = %match.arm.73 - %ua.raw56 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr57 = inttoptr i64 %ua.raw56 to ptr - %ua.load58 = load {}, ptr %ua.ptr57, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load58) + %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr + %ua.load62 = load {}, ptr %ua.ptr61, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load62) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.129: ; preds = %match.arm.73 - %ua.raw60 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr61 = inttoptr i64 %ua.raw60 to ptr - %ua.load62 = load { i64 }, ptr %ua.ptr61, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load62) + %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr + %ua.load66 = load { i64 }, ptr %ua.ptr65, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load66) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.130: ; preds = %match.arm.73 - %ua.raw64 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr65 = inttoptr i64 %ua.raw64 to ptr - %ua.load66 = load { ptr, i64 }, ptr %ua.ptr65, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load66) + %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr + %ua.load70 = load { ptr, i64 }, ptr %ua.ptr69, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load70) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.131: ; preds = %match.arm.73 - %ua.raw68 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr69 = inttoptr i64 %ua.raw68 to ptr - %ua.load70 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr69, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load70) + %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr + %ua.load74 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr73, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load74) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.132: ; preds = %match.arm.73 - %ua.raw72 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr73 = inttoptr i64 %ua.raw72 to ptr - %ua.load74 = load { ptr, i64, i64 }, ptr %ua.ptr73, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load74) + %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr + %ua.load78 = load { ptr, i64, i64 }, ptr %ua.ptr77, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load78) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.133: ; preds = %match.arm.73 - %ua.raw76 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr77 = inttoptr i64 %ua.raw76 to ptr - %ua.load78 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr77, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load78) + %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr + %ua.load82 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr81, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load82) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 dispatch.case.134: ; preds = %match.arm.73 - %ua.raw80 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr81 = inttoptr i64 %ua.raw80 to ptr - %ua.load82 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr81, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load82) + %ua.raw84 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr85 = inttoptr i64 %ua.raw84 to ptr + %ua.load86 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr85, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load86) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.124 @@ -1426,18 +1432,18 @@ dispatch.default.181: ; preds = %match.arm.77 br label %dispatch.merge.180 dispatch.case.182: ; preds = %match.arm.77 - %ua.raw85 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr86 = inttoptr i64 %ua.raw85 to ptr - %ua.load87 = load [4 x i64], ptr %ua.ptr86, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load87) + %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr + %ua.load91 = load [4 x i64], ptr %ua.ptr90, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load91) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.180 dispatch.case.183: ; preds = %match.arm.77 - %ua.raw89 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr90 = inttoptr i64 %ua.raw89 to ptr - %ua.load91 = load [1 x { i64, i64 }], ptr %ua.ptr90, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load91) + %ua.raw93 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr94 = inttoptr i64 %ua.raw93 to ptr + %ua.load95 = load [1 x { i64, i64 }], ptr %ua.ptr94, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load95) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.180 @@ -1451,18 +1457,18 @@ dispatch.default.195: ; preds = %match.arm.78 br label %dispatch.merge.194 dispatch.case.196: ; preds = %match.arm.78 - %ua.raw94 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr95 = inttoptr i64 %ua.raw94 to ptr - %ua.load96 = load { ptr, i64 }, ptr %ua.ptr95, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load96) + %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr + %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load100) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.194 dispatch.case.197: ; preds = %match.arm.78 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr99 = inttoptr i64 %ua.raw98 to ptr - %ua.load100 = load { ptr, i64 }, ptr %ua.ptr99, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load100) + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr103 = inttoptr i64 %ua.raw102 to ptr + %ua.load104 = load { ptr, i64 }, ptr %ua.ptr103, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load104) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.194 @@ -1476,135 +1482,135 @@ dispatch.default.209: ; preds = %match.arm.79 br label %dispatch.merge.208 dispatch.case.210: ; preds = %match.arm.79 - %ua.raw103 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw103 to ptr + %ua.raw107 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw107 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.211: ; preds = %match.arm.79 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %iNp106 = inttoptr i64 %ua.raw105 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp106) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %iNp110 = inttoptr i64 %ua.raw109 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp110) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.212: ; preds = %match.arm.79 - %ua.raw108 = extractvalue { i64, i64 } %loadN, 1 - %iNp109 = inttoptr i64 %ua.raw108 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp109) + %ua.raw112 = extractvalue { i64, i64 } %loadN, 1 + %iNp113 = inttoptr i64 %ua.raw112 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp113) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.213: ; preds = %match.arm.79 - %ua.raw111 = extractvalue { i64, i64 } %loadN, 1 - %iNp112 = inttoptr i64 %ua.raw111 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp112) + %ua.raw115 = extractvalue { i64, i64 } %loadN, 1 + %iNp116 = inttoptr i64 %ua.raw115 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp116) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.214: ; preds = %match.arm.79 - %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 - %iNp115 = inttoptr i64 %ua.raw114 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp115) + %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 + %iNp119 = inttoptr i64 %ua.raw118 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.215: ; preds = %match.arm.79 - %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 - %iNp118 = inttoptr i64 %ua.raw117 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp118) + %ua.raw121 = extractvalue { i64, i64 } %loadN, 1 + %iNp122 = inttoptr i64 %ua.raw121 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp122) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.216: ; preds = %match.arm.79 - %ua.raw120 = extractvalue { i64, i64 } %loadN, 1 - %iNp121 = inttoptr i64 %ua.raw120 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp121) + %ua.raw124 = extractvalue { i64, i64 } %loadN, 1 + %iNp125 = inttoptr i64 %ua.raw124 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp125) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.217: ; preds = %match.arm.79 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp124 = inttoptr i64 %ua.raw123 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp124) + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp128 = inttoptr i64 %ua.raw127 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.218: ; preds = %match.arm.79 - %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 - %iNp127 = inttoptr i64 %ua.raw126 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp127) + %ua.raw130 = extractvalue { i64, i64 } %loadN, 1 + %iNp131 = inttoptr i64 %ua.raw130 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp131) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.219: ; preds = %match.arm.79 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.220: ; preds = %match.arm.79 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.221: ; preds = %match.arm.79 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.222: ; preds = %match.arm.79 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_error_set(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.223: ; preds = %match.arm.79 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.224: ; preds = %match.arm.79 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.225: ; preds = %match.arm.79 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.226: ; preds = %match.arm.79 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.227: ; preds = %match.arm.79 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 dispatch.case.228: ; preds = %match.arm.79 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.208 } diff --git a/examples/expected/1319-ffi-objc-property-sx-defined.ir b/examples/expected/1319-ffi-objc-property-sx-defined.ir index 78a6052..d682c2b 100644 --- a/examples/expected/1319-ffi-objc-property-sx-defined.ir +++ b/examples/expected/1319-ffi-objc-property-sx-defined.ir @@ -1296,8 +1296,11 @@ match.arm.46: ; preds = %entry match.arm.47: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [94 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [94 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.61, label %if.else.62 @@ -1420,8 +1423,11 @@ match.arm.58: ; No predecessors! match.arm.59: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [94 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [94 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.45 @@ -1431,15 +1437,15 @@ match.unr.60: ; preds = %entry if.then.61: ; preds = %match.arm.47 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.63 if.else.62: ; preds = %match.arm.47 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.63 @@ -1447,16 +1453,16 @@ if.merge.63: ; preds = %if.else.62, %if.the br label %match.merge.45 f32.unbox.89: ; preds = %match.arm.50 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.91 f64.unbox.90: ; preds = %match.arm.50 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.91 @@ -1476,106 +1482,106 @@ dispatch.default.103: ; preds = %match.arm.51 br label %dispatch.merge.102 dispatch.case.104: ; preds = %match.arm.51 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.105: ; preds = %match.arm.51 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.106: ; preds = %match.arm.51 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.107: ; preds = %match.arm.51 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.108: ; preds = %match.arm.51 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.109: ; preds = %match.arm.51 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.110: ; preds = %match.arm.51 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.111: ; preds = %match.arm.51 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.112: ; preds = %match.arm.51 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.113: ; preds = %match.arm.51 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.114: ; preds = %match.arm.51 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load {}, ptr %ua.ptr88, align 1 - %callN = call { ptr, i64 } @struct_to_string__NSString(ptr %0, {} %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load {}, ptr %ua.ptr92, align 1 + %callN = call { ptr, i64 } @struct_to_string__NSString(ptr %0, {} %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.115: ; preds = %match.arm.51 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load {}, ptr %ua.ptr92, align 1 - %callN = call { ptr, i64 } @struct_to_string__SxBox(ptr %0, {} %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load {}, ptr %ua.ptr96, align 1 + %callN = call { ptr, i64 } @struct_to_string__SxBox(ptr %0, {} %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 dispatch.case.116: ; preds = %match.arm.51 - %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr - %ua.load97 = load { { ptr, ptr, ptr }, i32, i32, i32 }, ptr %ua.ptr96, align 8 - %callN = call { ptr, i64 } @struct_to_string____SxBoxState(ptr %0, { { ptr, ptr, ptr }, i32, i32, i32 } %ua.load97) + %ua.raw99 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr100 = inttoptr i64 %ua.raw99 to ptr + %ua.load101 = load { { ptr, ptr, ptr }, i32, i32, i32 }, ptr %ua.ptr100, align 8 + %callN = call { ptr, i64 } @struct_to_string____SxBoxState(ptr %0, { { ptr, ptr, ptr }, i32, i32, i32 } %ua.load101) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.102 @@ -1589,14 +1595,14 @@ dispatch.default.183: ; preds = %match.arm.52 br label %dispatch.merge.182 dispatch.case.184: ; preds = %match.arm.52 - %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw100) + %ua.raw104 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw104) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.182 dispatch.case.185: ; preds = %match.arm.52 - %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw102) + %ua.raw106 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw106) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.182 @@ -1610,26 +1616,26 @@ dispatch.default.191: ; preds = %match.arm.55 br label %dispatch.merge.190 dispatch.case.192: ; preds = %match.arm.55 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr - %ua.load107 = load [4 x i64], ptr %ua.ptr106, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load107) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr + %ua.load111 = load [4 x i64], ptr %ua.ptr110, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.193: ; preds = %match.arm.55 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr - %ua.load111 = load [1 x { i64, i64 }], ptr %ua.ptr110, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load111) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr + %ua.load115 = load [1 x { i64, i64 }], ptr %ua.ptr114, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 dispatch.case.194: ; preds = %match.arm.55 - %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr - %ua.load115 = load [3 x { i64, i64 }], ptr %ua.ptr114, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load115) + %ua.raw117 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr118 = inttoptr i64 %ua.raw117 to ptr + %ua.load119 = load [3 x { i64, i64 }], ptr %ua.ptr118, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load119) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.190 @@ -1643,18 +1649,18 @@ dispatch.default.211: ; preds = %match.arm.56 br label %dispatch.merge.210 dispatch.case.212: ; preds = %match.arm.56 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr119 = inttoptr i64 %ua.raw118 to ptr - %ua.load120 = load { ptr, i64 }, ptr %ua.ptr119, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load120) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr + %ua.load124 = load { ptr, i64 }, ptr %ua.ptr123, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.213: ; preds = %match.arm.56 - %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr - %ua.load124 = load { ptr, i64 }, ptr %ua.ptr123, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load124) + %ua.raw126 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr127 = inttoptr i64 %ua.raw126 to ptr + %ua.load128 = load { ptr, i64 }, ptr %ua.ptr127, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load128) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 @@ -1668,156 +1674,156 @@ dispatch.default.225: ; preds = %match.arm.57 br label %dispatch.merge.224 dispatch.case.226: ; preds = %match.arm.57 - %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw127 to ptr + %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw131 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.227: ; preds = %match.arm.57 - %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 - %iNp130 = inttoptr i64 %ua.raw129 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp130) + %ua.raw133 = extractvalue { i64, i64 } %loadN, 1 + %iNp134 = inttoptr i64 %ua.raw133 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp134) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.228: ; preds = %match.arm.57 - %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 - %iNp133 = inttoptr i64 %ua.raw132 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp133) + %ua.raw136 = extractvalue { i64, i64 } %loadN, 1 + %iNp137 = inttoptr i64 %ua.raw136 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp137) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.229: ; preds = %match.arm.57 - %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 - %iNp136 = inttoptr i64 %ua.raw135 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp136) + %ua.raw139 = extractvalue { i64, i64 } %loadN, 1 + %iNp140 = inttoptr i64 %ua.raw139 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp140) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.230: ; preds = %match.arm.57 - %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 - %iNp139 = inttoptr i64 %ua.raw138 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp139) + %ua.raw142 = extractvalue { i64, i64 } %loadN, 1 + %iNp143 = inttoptr i64 %ua.raw142 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp143) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.231: ; preds = %match.arm.57 - %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 - %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp142) + %ua.raw145 = extractvalue { i64, i64 } %loadN, 1 + %iNp146 = inttoptr i64 %ua.raw145 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp146) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.232: ; preds = %match.arm.57 - %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 - %iNp145 = inttoptr i64 %ua.raw144 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp145) + %ua.raw148 = extractvalue { i64, i64 } %loadN, 1 + %iNp149 = inttoptr i64 %ua.raw148 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp149) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.233: ; preds = %match.arm.57 - %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 - %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp148) + %ua.raw151 = extractvalue { i64, i64 } %loadN, 1 + %iNp152 = inttoptr i64 %ua.raw151 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp152) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.234: ; preds = %match.arm.57 - %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 - %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_NSString(ptr %0, ptr %iNp151) + %ua.raw154 = extractvalue { i64, i64 } %loadN, 1 + %iNp155 = inttoptr i64 %ua.raw154 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_NSString(ptr %0, ptr %iNp155) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.235: ; preds = %match.arm.57 - %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 - %iNp154 = inttoptr i64 %ua.raw153 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp154) + %ua.raw157 = extractvalue { i64, i64 } %loadN, 1 + %iNp158 = inttoptr i64 %ua.raw157 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp158) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.236: ; preds = %match.arm.57 - %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 - %iNp157 = inttoptr i64 %ua.raw156 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp157) + %ua.raw160 = extractvalue { i64, i64 } %loadN, 1 + %iNp161 = inttoptr i64 %ua.raw160 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp161) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.237: ; preds = %match.arm.57 - %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 - %iNp160 = inttoptr i64 %ua.raw159 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp160) + %ua.raw163 = extractvalue { i64, i64 } %loadN, 1 + %iNp164 = inttoptr i64 %ua.raw163 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp164) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.238: ; preds = %match.arm.57 - %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 - %iNp163 = inttoptr i64 %ua.raw162 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SxBox(ptr %0, ptr %iNp163) + %ua.raw166 = extractvalue { i64, i64 } %loadN, 1 + %iNp167 = inttoptr i64 %ua.raw166 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SxBox(ptr %0, ptr %iNp167) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.239: ; preds = %match.arm.57 - %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 - %iNp166 = inttoptr i64 %ua.raw165 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_SxBox(ptr %0, ptr %iNp166) + %ua.raw169 = extractvalue { i64, i64 } %loadN, 1 + %iNp170 = inttoptr i64 %ua.raw169 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_SxBox(ptr %0, ptr %iNp170) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.240: ; preds = %match.arm.57 - %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 - %iNp169 = inttoptr i64 %ua.raw168 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp169) + %ua.raw172 = extractvalue { i64, i64 } %loadN, 1 + %iNp173 = inttoptr i64 %ua.raw172 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s32(ptr %0, ptr %iNp173) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.241: ; preds = %match.arm.57 - %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 - %iNp172 = inttoptr i64 %ua.raw171 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp172) + %ua.raw175 = extractvalue { i64, i64 } %loadN, 1 + %iNp176 = inttoptr i64 %ua.raw175 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp176) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.242: ; preds = %match.arm.57 - %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 - %iNp175 = inttoptr i64 %ua.raw174 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp175) + %ua.raw178 = extractvalue { i64, i64 } %loadN, 1 + %iNp179 = inttoptr i64 %ua.raw178 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp179) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.243: ; preds = %match.arm.57 - %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 - %iNp178 = inttoptr i64 %ua.raw177 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp178) + %ua.raw181 = extractvalue { i64, i64 } %loadN, 1 + %iNp182 = inttoptr i64 %ua.raw181 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp182) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.244: ; preds = %match.arm.57 - %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 - %iNp181 = inttoptr i64 %ua.raw180 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp181) + %ua.raw184 = extractvalue { i64, i64 } %loadN, 1 + %iNp185 = inttoptr i64 %ua.raw184 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp185) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.245: ; preds = %match.arm.57 - %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 - %iNp184 = inttoptr i64 %ua.raw183 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp184) + %ua.raw187 = extractvalue { i64, i64 } %loadN, 1 + %iNp188 = inttoptr i64 %ua.raw187 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp188) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.246: ; preds = %match.arm.57 - %ua.raw186 = extractvalue { i64, i64 } %loadN, 1 - %iNp187 = inttoptr i64 %ua.raw186 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp187) + %ua.raw190 = extractvalue { i64, i64 } %loadN, 1 + %iNp191 = inttoptr i64 %ua.raw190 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp191) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 dispatch.case.247: ; preds = %match.arm.57 - %ua.raw189 = extractvalue { i64, i64 } %loadN, 1 - %iNp190 = inttoptr i64 %ua.raw189 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp190) + %ua.raw193 = extractvalue { i64, i64 } %loadN, 1 + %iNp194 = inttoptr i64 %ua.raw193 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp194) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.224 } 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 f22d9e6..85a0636 100644 --- a/examples/expected/1332-ffi-objc-call-06-sret-return.ir +++ b/examples/expected/1332-ffi-objc-call-06-sret-return.ir @@ -1235,8 +1235,11 @@ match.arm.38: ; preds = %entry match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry %loadN = load { i64, i64 }, ptr %allocaN, align 8 - %tiu.tid = extractvalue { i64, i64 } %loadN, 1 - %tiu.gep = getelementptr inbounds [86 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %tiu.tid + %refl.tag = extractvalue { i64, i64 } %loadN, 0 + %refl.val = extractvalue { i64, i64 } %loadN, 1 + %refl.istype = icmp eq i64 %refl.tag, 13 + %refl.tid = select i1 %refl.istype, i64 %refl.val, i64 %refl.tag + %tiu.gep = getelementptr inbounds [86 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid %tiu.load = load i1, ptr %tiu.gep, align 1 br i1 %tiu.load, label %if.then.53, label %if.else.54 @@ -1356,8 +1359,11 @@ match.arm.50: ; No predecessors! match.arm.51: ; preds = %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 - %tn.tid = extractvalue { i64, i64 } %loadN, 1 - %tn.gep = getelementptr inbounds [86 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %tn.tid + %refl.tag36 = extractvalue { i64, i64 } %loadN, 0 + %refl.val37 = extractvalue { i64, i64 } %loadN, 1 + %refl.istype38 = icmp eq i64 %refl.tag36, 13 + %refl.tid39 = select i1 %refl.istype38, i64 %refl.val37, i64 %refl.tag36 + %tn.gep = getelementptr inbounds [86 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid39 %tn.load = load { ptr, i64 }, ptr %tn.gep, align 8 store { ptr, i64 } %tn.load, ptr %allocaN, align 8 br label %match.merge.37 @@ -1367,15 +1373,15 @@ match.unr.52: ; preds = %entry if.then.53: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw37 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37) + %ua.raw41 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw41) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 if.else.54: ; preds = %match.arm.39 %loadN = load { i64, i64 }, ptr %alloca, align 8 - %ua.raw40 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40) + %ua.raw44 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw44) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %if.merge.55 @@ -1383,16 +1389,16 @@ if.merge.55: ; preds = %if.else.54, %if.the br label %match.merge.37 f32.unbox.81: ; preds = %match.arm.42 - %ua.raw42 = extractvalue { i64, i64 } %loadN, 1 - %trN = trunc i64 %ua.raw42 to i32 + %ua.raw46 = extractvalue { i64, i64 } %loadN, 1 + %trN = trunc i64 %ua.raw46 to i32 %iNf = bitcast i32 %trN to float %fpext = fpext float %iNf to double store double %fpext, ptr %allocaN, align 8 br label %float.merge.83 f64.unbox.82: ; preds = %match.arm.42 - %ua.raw43 = extractvalue { i64, i64 } %loadN, 1 - %iNd = bitcast i64 %ua.raw43 to double + %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 + %iNd = bitcast i64 %ua.raw47 to double store double %iNd, ptr %allocaN, align 8 br label %float.merge.83 @@ -1412,98 +1418,98 @@ dispatch.default.95: ; preds = %match.arm.43 br label %dispatch.merge.94 dispatch.case.96: ; preds = %match.arm.43 - %ua.raw47 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr48 = inttoptr i64 %ua.raw47 to ptr - %ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8 - %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49) + %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr + %ua.load53 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr52, align 8 + %callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load53) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.97: ; preds = %match.arm.43 - %ua.raw51 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr52 = inttoptr i64 %ua.raw51 to ptr - %ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8 - %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53) + %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr + %ua.load57 = load { ptr, ptr, ptr }, ptr %ua.ptr56, align 8 + %callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load57) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.98: ; preds = %match.arm.43 - %ua.raw55 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr56 = inttoptr i64 %ua.raw55 to ptr - %ua.load57 = load {}, ptr %ua.ptr56, align 1 - %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57) + %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr + %ua.load61 = load {}, ptr %ua.ptr60, align 1 + %callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load61) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.99: ; preds = %match.arm.43 - %ua.raw59 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr60 = inttoptr i64 %ua.raw59 to ptr - %ua.load61 = load { i64 }, ptr %ua.ptr60, align 8 - %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61) + %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr + %ua.load65 = load { i64 }, ptr %ua.ptr64, align 8 + %callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load65) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.100: ; preds = %match.arm.43 - %ua.raw63 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr64 = inttoptr i64 %ua.raw63 to ptr - %ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8 - %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65) + %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr + %ua.load69 = load { ptr, i64 }, ptr %ua.ptr68, align 8 + %callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load69) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.101: ; preds = %match.arm.43 - %ua.raw67 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr68 = inttoptr i64 %ua.raw67 to ptr - %ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8 - %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69) + %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr + %ua.load73 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr72, align 8 + %callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load73) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.102: ; preds = %match.arm.43 - %ua.raw71 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr72 = inttoptr i64 %ua.raw71 to ptr - %ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8 - %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73) + %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr + %ua.load77 = load { ptr, i64, i64 }, ptr %ua.ptr76, align 8 + %callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load77) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.103: ; preds = %match.arm.43 - %ua.raw75 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr76 = inttoptr i64 %ua.raw75 to ptr - %ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8 - %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77) + %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr + %ua.load81 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr80, align 8 + %callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load81) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.104: ; preds = %match.arm.43 - %ua.raw79 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr80 = inttoptr i64 %ua.raw79 to ptr - %ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8 - %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81) + %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr + %ua.load85 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr84, align 8 + %callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load85) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.105: ; preds = %match.arm.43 - %ua.raw83 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr84 = inttoptr i64 %ua.raw83 to ptr - %ua.load85 = load {}, ptr %ua.ptr84, align 1 - %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load85) + %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr + %ua.load89 = load {}, ptr %ua.ptr88, align 1 + %callN = call { ptr, i64 } @struct_to_string__BuildOptions(ptr %0, {} %ua.load89) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.106: ; preds = %match.arm.43 - %ua.raw87 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr88 = inttoptr i64 %ua.raw87 to ptr - %ua.load89 = load {}, ptr %ua.ptr88, align 1 - %callN = call { ptr, i64 } @struct_to_string__NSString(ptr %0, {} %ua.load89) + %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr + %ua.load93 = load {}, ptr %ua.ptr92, align 1 + %callN = call { ptr, i64 } @struct_to_string__NSString(ptr %0, {} %ua.load93) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 dispatch.case.107: ; preds = %match.arm.43 - %ua.raw91 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr92 = inttoptr i64 %ua.raw91 to ptr - %ua.load93 = load { i64, i64, i64 }, ptr %ua.ptr92, align 8 - %callN = call { ptr, i64 } @struct_to_string__Triple(ptr %0, { i64, i64, i64 } %ua.load93) + %ua.raw95 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr96 = inttoptr i64 %ua.raw95 to ptr + %ua.load97 = load { i64, i64, i64 }, ptr %ua.ptr96, align 8 + %callN = call { ptr, i64 } @struct_to_string__Triple(ptr %0, { i64, i64, i64 } %ua.load97) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.94 @@ -1517,14 +1523,14 @@ dispatch.default.169: ; preds = %match.arm.44 br label %dispatch.merge.168 dispatch.case.170: ; preds = %match.arm.44 - %ua.raw96 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw96) + %ua.raw100 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__OperatingSystem(ptr %0, i64 %ua.raw100) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.168 dispatch.case.171: ; preds = %match.arm.44 - %ua.raw98 = extractvalue { i64, i64 } %loadN, 1 - %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw98) + %ua.raw102 = extractvalue { i64, i64 } %loadN, 1 + %callN = call { ptr, i64 } @enum_to_string__Architecture(ptr %0, i64 %ua.raw102) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.168 @@ -1538,26 +1544,26 @@ dispatch.default.177: ; preds = %match.arm.47 br label %dispatch.merge.176 dispatch.case.178: ; preds = %match.arm.47 - %ua.raw101 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr102 = inttoptr i64 %ua.raw101 to ptr - %ua.load103 = load [4 x i64], ptr %ua.ptr102, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load103) + %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr + %ua.load107 = load [4 x i64], ptr %ua.ptr106, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load107) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.176 dispatch.case.179: ; preds = %match.arm.47 - %ua.raw105 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr106 = inttoptr i64 %ua.raw105 to ptr - %ua.load107 = load [1 x { i64, i64 }], ptr %ua.ptr106, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load107) + %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr + %ua.load111 = load [1 x { i64, i64 }], ptr %ua.ptr110, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load111) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.176 dispatch.case.180: ; preds = %match.arm.47 - %ua.raw109 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr110 = inttoptr i64 %ua.raw109 to ptr - %ua.load111 = load [3 x { i64, i64 }], ptr %ua.ptr110, align 8 - %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load111) + %ua.raw113 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr114 = inttoptr i64 %ua.raw113 to ptr + %ua.load115 = load [3 x { i64, i64 }], ptr %ua.ptr114, align 8 + %callN = call { ptr, i64 } @array_to_string__AR_3_Any(ptr %0, [3 x { i64, i64 }] %ua.load115) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.176 @@ -1571,18 +1577,18 @@ dispatch.default.197: ; preds = %match.arm.48 br label %dispatch.merge.196 dispatch.case.198: ; preds = %match.arm.48 - %ua.raw114 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr115 = inttoptr i64 %ua.raw114 to ptr - %ua.load116 = load { ptr, i64 }, ptr %ua.ptr115, align 8 - %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load116) + %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr119 = inttoptr i64 %ua.raw118 to ptr + %ua.load120 = load { ptr, i64 }, ptr %ua.ptr119, align 8 + %callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load120) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 dispatch.case.199: ; preds = %match.arm.48 - %ua.raw118 = extractvalue { i64, i64 } %loadN, 1 - %ua.ptr119 = inttoptr i64 %ua.raw118 to ptr - %ua.load120 = load { ptr, i64 }, ptr %ua.ptr119, align 8 - %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load120) + %ua.raw122 = extractvalue { i64, i64 } %loadN, 1 + %ua.ptr123 = inttoptr i64 %ua.raw122 to ptr + %ua.load124 = load { ptr, i64 }, ptr %ua.ptr123, align 8 + %callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load124) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.196 @@ -1596,142 +1602,142 @@ dispatch.default.211: ; preds = %match.arm.49 br label %dispatch.merge.210 dispatch.case.212: ; preds = %match.arm.49 - %ua.raw123 = extractvalue { i64, i64 } %loadN, 1 - %iNp = inttoptr i64 %ua.raw123 to ptr + %ua.raw127 = extractvalue { i64, i64 } %loadN, 1 + %iNp = inttoptr i64 %ua.raw127 to ptr %callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.213: ; preds = %match.arm.49 - %ua.raw125 = extractvalue { i64, i64 } %loadN, 1 - %iNp126 = inttoptr i64 %ua.raw125 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp126) + %ua.raw129 = extractvalue { i64, i64 } %loadN, 1 + %iNp130 = inttoptr i64 %ua.raw129 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp130) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.214: ; preds = %match.arm.49 - %ua.raw128 = extractvalue { i64, i64 } %loadN, 1 - %iNp129 = inttoptr i64 %ua.raw128 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp129) + %ua.raw132 = extractvalue { i64, i64 } %loadN, 1 + %iNp133 = inttoptr i64 %ua.raw132 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp133) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.215: ; preds = %match.arm.49 - %ua.raw131 = extractvalue { i64, i64 } %loadN, 1 - %iNp132 = inttoptr i64 %ua.raw131 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp132) + %ua.raw135 = extractvalue { i64, i64 } %loadN, 1 + %iNp136 = inttoptr i64 %ua.raw135 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp136) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.216: ; preds = %match.arm.49 - %ua.raw134 = extractvalue { i64, i64 } %loadN, 1 - %iNp135 = inttoptr i64 %ua.raw134 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp135) + %ua.raw138 = extractvalue { i64, i64 } %loadN, 1 + %iNp139 = inttoptr i64 %ua.raw138 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp139) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.217: ; preds = %match.arm.49 - %ua.raw137 = extractvalue { i64, i64 } %loadN, 1 - %iNp138 = inttoptr i64 %ua.raw137 to ptr - %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp138) + %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 + %iNp142 = inttoptr i64 %ua.raw141 to ptr + %callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp142) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.218: ; preds = %match.arm.49 - %ua.raw140 = extractvalue { i64, i64 } %loadN, 1 - %iNp141 = inttoptr i64 %ua.raw140 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp141) + %ua.raw144 = extractvalue { i64, i64 } %loadN, 1 + %iNp145 = inttoptr i64 %ua.raw144 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp145) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.219: ; preds = %match.arm.49 - %ua.raw143 = extractvalue { i64, i64 } %loadN, 1 - %iNp144 = inttoptr i64 %ua.raw143 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp144) + %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 + %iNp148 = inttoptr i64 %ua.raw147 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp148) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.220: ; preds = %match.arm.49 - %ua.raw146 = extractvalue { i64, i64 } %loadN, 1 - %iNp147 = inttoptr i64 %ua.raw146 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_NSString(ptr %0, ptr %iNp147) + %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 + %iNp151 = inttoptr i64 %ua.raw150 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_NSString(ptr %0, ptr %iNp151) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.221: ; preds = %match.arm.49 - %ua.raw149 = extractvalue { i64, i64 } %loadN, 1 - %iNp150 = inttoptr i64 %ua.raw149 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp150) + %ua.raw153 = extractvalue { i64, i64 } %loadN, 1 + %iNp154 = inttoptr i64 %ua.raw153 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp154) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.222: ; preds = %match.arm.49 - %ua.raw152 = extractvalue { i64, i64 } %loadN, 1 - %iNp153 = inttoptr i64 %ua.raw152 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp153) + %ua.raw156 = extractvalue { i64, i64 } %loadN, 1 + %iNp157 = inttoptr i64 %ua.raw156 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp157) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.223: ; preds = %match.arm.49 - %ua.raw155 = extractvalue { i64, i64 } %loadN, 1 - %iNp156 = inttoptr i64 %ua.raw155 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp156) + %ua.raw159 = extractvalue { i64, i64 } %loadN, 1 + %iNp160 = inttoptr i64 %ua.raw159 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp160) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.224: ; preds = %match.arm.49 - %ua.raw158 = extractvalue { i64, i64 } %loadN, 1 - %iNp159 = inttoptr i64 %ua.raw158 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp159) + %ua.raw162 = extractvalue { i64, i64 } %loadN, 1 + %iNp163 = inttoptr i64 %ua.raw162 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp163) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.225: ; preds = %match.arm.49 - %ua.raw161 = extractvalue { i64, i64 } %loadN, 1 - %iNp162 = inttoptr i64 %ua.raw161 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp162) + %ua.raw165 = extractvalue { i64, i64 } %loadN, 1 + %iNp166 = inttoptr i64 %ua.raw165 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp166) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.226: ; preds = %match.arm.49 - %ua.raw164 = extractvalue { i64, i64 } %loadN, 1 - %iNp165 = inttoptr i64 %ua.raw164 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp165) + %ua.raw168 = extractvalue { i64, i64 } %loadN, 1 + %iNp169 = inttoptr i64 %ua.raw168 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp169) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.227: ; preds = %match.arm.49 - %ua.raw167 = extractvalue { i64, i64 } %loadN, 1 - %iNp168 = inttoptr i64 %ua.raw167 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp168) + %ua.raw171 = extractvalue { i64, i64 } %loadN, 1 + %iNp172 = inttoptr i64 %ua.raw171 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp172) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.228: ; preds = %match.arm.49 - %ua.raw170 = extractvalue { i64, i64 } %loadN, 1 - %iNp171 = inttoptr i64 %ua.raw170 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp171) + %ua.raw174 = extractvalue { i64, i64 } %loadN, 1 + %iNp175 = inttoptr i64 %ua.raw174 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp175) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.229: ; preds = %match.arm.49 - %ua.raw173 = extractvalue { i64, i64 } %loadN, 1 - %iNp174 = inttoptr i64 %ua.raw173 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp174) + %ua.raw177 = extractvalue { i64, i64 } %loadN, 1 + %iNp178 = inttoptr i64 %ua.raw177 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp178) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.230: ; preds = %match.arm.49 - %ua.raw176 = extractvalue { i64, i64 } %loadN, 1 - %iNp177 = inttoptr i64 %ua.raw176 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_Triple(ptr %0, ptr %iNp177) + %ua.raw180 = extractvalue { i64, i64 } %loadN, 1 + %iNp181 = inttoptr i64 %ua.raw180 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_Triple(ptr %0, ptr %iNp181) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 dispatch.case.231: ; preds = %match.arm.49 - %ua.raw179 = extractvalue { i64, i64 } %loadN, 1 - %iNp180 = inttoptr i64 %ua.raw179 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp180) + %ua.raw183 = extractvalue { i64, i64 } %loadN, 1 + %iNp184 = inttoptr i64 %ua.raw183 to ptr + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_3_Any(ptr %0, ptr %iNp184) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.210 } diff --git a/issues/0090-int-formatter-extremes.md b/issues/0090-int-formatter-extremes.md index 7cb92b7..66b58a3 100644 --- a/issues/0090-int-formatter-extremes.md +++ b/issues/0090-int-formatter-extremes.md @@ -61,6 +61,32 @@ > - Negative regression: `examples/1144-diagnostics-reflection-builtin-needs-type.sx` > (reject cases across all 7, exit 1). Unit test: `reflectionArgIsType` in > `src/ir/lower.test.zig`. +> +> **Follow-up (F0.8 attempt 3) — reflection builtins on an `Any` consult the +> Any's runtime TYPE-TAG, not its payload.** The attempt-2 guard correctly +> accepts an `Any` argument (the formatter passes `val: Any`), but the dynamic +> `type_name` / `type_is_unsigned` path still read the Any's payload as a +> TypeId index unconditionally — correct only when the Any holds a *Type +> value*. For an Any holding a *value* (`av : Any = 6`, runtime tag `s64`, +> payload `6`) it reported `types[6]` (`u8`): `type_name(av)` → `"u8"`, +> `type_is_unsigned(av)` → `true`. Per Agra's ruling ("Any is a type AND a +> value, so it's expected to work"), both builtins now branch on the Any's +> runtime tag: tag `== .any` → the box is a Type value, use the payload as the +> TypeId; otherwise the tag IS the held value's type. So `type_name(av)` → +> `"s64"`, `type_is_unsigned(av)` → `false`, while `type_name(type_of(x))` +> still names the held type. The formatter is unchanged (it already passed +> `type_of(val)`, a proper Type value). +> - `src/ir/interp.zig` — shared `Value.reflectTypeId` (the tag-branching +> resolver); the `type_name` / `type_is_unsigned` interp arms route through +> it. `src/backend/llvm/ops.zig` — shared `Ops.reflectArgTypeId` emits +> `extractvalue tag` / `icmp eq tag, .any` / `select` for the runtime path; +> both reflection arms route through it. The two backends agree. +> - Regression: `examples/0164-types-reflection-any-tag.sx` pins `type_name` / +> `type_is_unsigned` / `print` on an Any holding a value vs. a Type value. +> Unit test: `reflectTypeId` in `src/ir/interp.test.zig`. +> - Out of scope (kept comptime-only / deferred): the 5 comptime-only builtins +> (`size_of`/`align_of`/`field_count`/`is_flags`/`type_eq`). `type_eq` has no +> dynamic emit path (it folds at lower time), so it is unaffected. > STATUS (original): OPEN. Pre-existing + orthogonal; surfaced (not introduced) by NL.1. > Manager-verified independent of the numeric-limit accessors. Scheduled separately. diff --git a/specs.md b/specs.md index 1318638..50f2288 100644 --- a/specs.md +++ b/specs.md @@ -2237,6 +2237,8 @@ Built-in functions are declared in `std.sx` with the `#builtin` suffix, which te The seven type-only builtins — `size_of`, `align_of`, `field_count`, `type_name`, `type_eq`, `type_is_unsigned`, `is_flags` — strictly require a **type** argument: a spelled type (`s64`, `*u8`, `Point`), a generic type parameter (`T`), or a runtime `Type` value (`type_of(x)`, a `[]Type` element, a `Type`-typed local). Passing a value (`size_of(6)`, `type_is_unsigned(true)`) is a compile-time error — ` expects a type, got ''` — not a silent reinterpretation of the value's bits as a type. +An `Any` is accepted because it can hold either a value or a `Type`. `type_name` and `type_is_unsigned` consult the `Any`'s runtime type-tag, not its payload: an `Any` holding a *value* reports the type **of that value** (`av : Any = 6` → `type_name(av)` is `"s64"`), while an `Any` holding a *`Type` value* (e.g. `type_of(x)` stored in an `Any`) names the **held type**. This is the same tag the `{}` formatter reads, so `print(av)` and `type_name(av)` agree on what `av` is. + ### Type Conversion - `cast(Type) expr` — prefix operator that converts `expr` to `Type`. Examples: `cast(s32) 3.14`, `cast(f64) n`. When `Type` is a runtime `Type` value inside a type-category match arm, the compiler generates a dispatch switch over all types in the category, monomorphizing the callee for each concrete type. diff --git a/src/backend/llvm/ops.zig b/src/backend/llvm/ops.zig index 0630279..224f10c 100644 --- a/src/backend/llvm/ops.zig +++ b/src/backend/llvm/ops.zig @@ -35,6 +35,7 @@ const BlockParam = ir_inst.BlockParam; const FieldReflect = ir_inst.FieldReflect; const TypeId = ir_types.TypeId; const StringId = ir_types.StringId; +const Ref = ir_inst.Ref; /// Instruction-emission handlers for `emitInst`: every opcode group — the /// constant, arithmetic, bitwise, comparison, logical, memory, globals, @@ -972,6 +973,35 @@ pub const Ops = struct { } // ── Call extensions ─────────────────────────────────────── + /// Resolve the `TypeId` (as a runtime `i64`) that a dynamic + /// `type_name` / `type_is_unsigned` must operate on. A reflection + /// builtin reads an `Any`'s runtime TYPE-TAG, never its raw payload: + /// - `.bare`: a `Type` value already lowered to a bare i64 `TypeId` + /// index (an unboxed direct call site) → the value itself. + /// - `.boxed`: an `Any` aggregate `{ tag, value }`. When the tag is + /// `.any`, the box carries a *Type value* (the `{ .any, tid }` shape + /// `const_type` / `type_of` produce) → the TypeId is the payload. + /// Otherwise the box carries a *runtime value* whose type IS the tag + /// → use the tag as the TypeId. This is what makes `type_name(av)` + /// for `av : Any = 6` report `s64` (the held value's type), while + /// `type_name(type_of(x))` still names the held type. + /// `.unresolved` is a hard tripwire: a type-resolution failure reached + /// emission without a diagnostic. + fn reflectArgTypeId(self: Ops, arg_ref: Ref, comptime label: []const u8) c.LLVMValueRef { + const arg_val = self.e.resolveRef(arg_ref); + return switch (self.e.reflectArgRepr(arg_ref)) { + .unresolved => @panic(label ++ ": reflection arg IR-type unresolved — a type-resolution failure reached LLVM emission without a diagnostic"), + .bare => arg_val, + .boxed => blk: { + const tag = c.LLVMBuildExtractValue(self.e.builder, arg_val, 0, "refl.tag"); + const payload = c.LLVMBuildExtractValue(self.e.builder, arg_val, 1, "refl.val"); + const any_tag = c.LLVMConstInt(self.e.cached_i64, @intCast(TypeId.any.index()), 0); + const holds_type = c.LLVMBuildICmp(self.e.builder, c.LLVMIntEQ, tag, any_tag, "refl.istype"); + break :blk c.LLVMBuildSelect(self.e.builder, holds_type, payload, tag, "refl.tid"); + }, + }; + } + pub fn emitCallBuiltin(self: Ops, instruction: *const Inst, bi: BuiltinCall) void { // Builtins that map to libc functions or LLVM intrinsics switch (bi.builtin) { @@ -1010,26 +1040,12 @@ pub const Ops = struct { self.e.advanceRefCounter(); }, .type_name => { - // Dynamic `type_name(t)` at runtime: extract - // the TypeId from the arg (an Any-boxed Type - // value: tag=`.s64.index()`, value=tid), GEP - // into the compiler-emitted `__sx_type_names` - // global, load the string. The arg's LLVM - // shape is the `{i64, i64}` Any aggregate - // (because the IR-side arg type is `.any` - // when boxed); for unboxed direct call sites - // (the arg IR type is `.s64` from - // `const_type`), the value IS the TypeId - // index directly. - const arg_ref = bi.args[0]; - const arg_val = self.e.resolveRef(arg_ref); - const tid_idx = switch (self.e.reflectArgRepr(arg_ref)) { - .unresolved => @panic("type_name: reflection arg IR-type unresolved — a type-resolution failure reached LLVM emission without a diagnostic"), - // Boxed: extract value field from the Any aggregate. - .boxed => c.LLVMBuildExtractValue(self.e.builder, arg_val, 1, "tn.tid"), - // Bare i64 (TypeId index). - .bare => arg_val, - }; + // Dynamic `type_name(t)` at runtime: resolve the TypeId + // the arg denotes (reading an `Any`'s runtime type-tag, + // not its payload — see `reflectArgTypeId`), GEP into the + // compiler-emitted `__sx_type_names` global, load the + // string. + const tid_idx = self.reflectArgTypeId(bi.args[0], "type_name"); const arr_global = self.e.reflection().getOrBuildTypeNameArray(); const arr_len = self.e.type_name_array_len; const string_ty = self.e.getStringStructType(); @@ -1065,17 +1081,12 @@ pub const Ops = struct { self.e.mapRef(eq_res); }, .type_is_unsigned => { - // Dynamic `type_is_unsigned(t)`: extract the TypeId from - // the arg (Any-boxed Type → value field, or bare i64 - // index), GEP into the `__sx_type_is_unsigned` table, load - // the i1. Mirrors the `type_name` runtime lookup. - const arg_ref = bi.args[0]; - const arg_val = self.e.resolveRef(arg_ref); - const tid_idx = switch (self.e.reflectArgRepr(arg_ref)) { - .unresolved => @panic("type_is_unsigned: reflection arg IR-type unresolved — a type-resolution failure reached LLVM emission without a diagnostic"), - .boxed => c.LLVMBuildExtractValue(self.e.builder, arg_val, 1, "tiu.tid"), - .bare => arg_val, - }; + // Dynamic `type_is_unsigned(t)`: resolve the TypeId the arg + // denotes (reading an `Any`'s runtime type-tag, not its + // payload — see `reflectArgTypeId`), GEP into the + // `__sx_type_is_unsigned` table, load the i1. Mirrors the + // `type_name` runtime lookup. + const tid_idx = self.reflectArgTypeId(bi.args[0], "type_is_unsigned"); const arr_global = self.e.reflection().getOrBuildTypeIsUnsignedArray(); const arr_len = self.e.type_is_unsigned_array_len; const arr_ty = c.LLVMArrayType(self.e.cached_i1, arr_len); diff --git a/src/ir/interp.test.zig b/src/ir/interp.test.zig index 9d943d8..3b44999 100644 --- a/src/ir/interp.test.zig +++ b/src/ir/interp.test.zig @@ -804,3 +804,38 @@ test "comptime: type_eq builtin on type_tag values" { const result = try interp.call(FuncId.fromIndex(0), &.{}); try std.testing.expectEqual(true, result.asBool().?); } + +// ── Test: reflectTypeId reads an Any's runtime TYPE-TAG, not its payload ── +// A reflection builtin on an Any must report the type OF a held value (the +// tag) and only read the payload when the Any holds a Type value (tag == +// `.any`). Regression for issue 0090 (attempt 3): a boxed value like +// `av : Any = 6` (`{ tag = s64, value = 6 }`) must resolve to `s64`, NOT +// `types[6]` (`u8`). +test "reflect: reflectTypeId branches on the Any tag" { + const any_idx: i64 = @intCast(TypeId.any.index()); + + // Native first-class Type value → the held TypeId directly. + try std.testing.expectEqual(@as(?TypeId, .u64), (Value{ .type_tag = .u64 }).reflectTypeId()); + + // Any holding a VALUE: `{ tag = s64, value = 6 }` → s64 (the tag), + // never `types[6]` (u8). This is the bug the fix closes. + var held_value = [_]Value{ .{ .int = @intCast(TypeId.s64.index()) }, .{ .int = 6 } }; + try std.testing.expectEqual(@as(?TypeId, .s64), (Value{ .aggregate = &held_value }).reflectTypeId()); + + // Any holding a VALUE of an unsigned type: `{ tag = u32, value = 7 }` → u32. + var held_u32 = [_]Value{ .{ .int = @intCast(TypeId.u32.index()) }, .{ .int = 7 } }; + try std.testing.expectEqual(@as(?TypeId, .u32), (Value{ .aggregate = &held_u32 }).reflectTypeId()); + + // Any holding a TYPE value (the `type_of(x)` / `const_type` shape): + // `{ tag = .any, value = u64 }` → u64 (the payload). Payload as a plain + // int (the runtime box shape) ... + var held_type_int = [_]Value{ .{ .int = any_idx }, .{ .int = @intCast(TypeId.u64.index()) } }; + try std.testing.expectEqual(@as(?TypeId, .u64), (Value{ .aggregate = &held_type_int }).reflectTypeId()); + + // ... and payload as a `.type_tag` (the comptime box shape) → same result. + var held_type_tag = [_]Value{ .{ .int = any_idx }, .{ .type_tag = .u64 } }; + try std.testing.expectEqual(@as(?TypeId, .u64), (Value{ .aggregate = &held_type_tag }).reflectTypeId()); + + // Neither shape → null (the caller bails loudly, never guesses a TypeId). + try std.testing.expectEqual(@as(?TypeId, null), (Value{ .int = 6 }).reflectTypeId()); +} diff --git a/src/ir/interp.zig b/src/ir/interp.zig index 9a8ec79..be9d852 100644 --- a/src/ir/interp.zig +++ b/src/ir/interp.zig @@ -90,6 +90,34 @@ pub const Value = union(enum) { }; } + /// Resolve the `TypeId` a dynamic `type_name` / `type_is_unsigned` must + /// operate on, honoring the rule that a reflection builtin reads an + /// `Any`'s runtime TYPE-TAG, never its raw payload: + /// - a native `.type_tag(tid)` Value → `tid` (a first-class Type value). + /// - an `Any` aggregate `{ tag, value }`: when the tag is `.any`, the + /// box carries a *Type value* (the `box_any(.., .any)` / `const_type` + /// shape) → the TypeId is the payload; otherwise the box carries a + /// *runtime value* whose type IS the tag → the tag is the TypeId. This + /// makes `type_name(av)` for `av : Any = 6` report `s64` (the held + /// value's type) while `type_name(type_of(x))` still names the type. + /// Returns null when `self` is neither shape (the caller bails loudly). + pub fn reflectTypeId(self: Value) ?TypeId { + if (self.asTypeId()) |t| return t; + if (self == .aggregate) { + const fields = self.aggregate; + if (fields.len >= 2) { + const tag = fields[0].asInt() orelse return null; + if (tag == @as(i64, @intCast(TypeId.any.index()))) { + if (fields[1].asTypeId()) |t| return t; + if (fields[1].asInt()) |iv| return TypeId.fromIndex(@intCast(iv)); + return null; + } + return TypeId.fromIndex(@intCast(tag)); + } + } + return null; + } + /// Get the string content, whether from a literal or a heap-backed string aggregate. pub fn asString(self: Value, interp: *const Interpreter) ?[]const u8 { return switch (self) { @@ -1870,22 +1898,14 @@ pub const Interpreter = struct { .type_name => { if (bi.args.len < 1) return bailDetail("comptime type_name: missing argument"); const arg = frame.getRef(bi.args[0]); - // Accept either a bare `.type_tag` Value (the - // comptime-native form) or an Any-boxed Type - // (`.aggregate { tag: int, value: .type_tag }`) - // — the latter shape is what `box_any` produces - // when const_type values flow through a `.any`-typed - // slice or struct field. - const tid = blk: { - if (arg.asTypeId()) |t| break :blk t; - if (arg == .aggregate) { - const fields = arg.aggregate; - if (fields.len >= 2) { - if (fields[1].asTypeId()) |t| break :blk t; - } - } - return bailDetail("comptime type_name: argument is not a Type value (expected `.type_tag` or Any-boxed Type)"); - }; + // A bare `.type_tag` Value (the comptime-native form), an + // Any-boxed Type (`{ .any, tid }`), or an Any holding a + // runtime value (`{ tag, value }`, where the tag IS the + // value's type). `reflectTypeId` reads the runtime tag so + // `type_name(av)` for `av : Any = 6` names `s64`, not the + // type whose index equals the payload. + const tid = arg.reflectTypeId() orelse + return bailDetail("comptime type_name: argument is not a Type value or boxed value (expected `.type_tag` or Any aggregate)"); const name = self.module.types.typeName(tid); // Copy the slice into the interp's allocator so it // outlives any TypeTable churn during the rest of the @@ -1903,22 +1923,14 @@ pub const Interpreter = struct { .type_is_unsigned => { if (bi.args.len < 1) return bailDetail("comptime type_is_unsigned: missing argument"); const arg = frame.getRef(bi.args[0]); - // Accept a bare `.type_tag`, an Any-boxed Type (`{tag, - // .type_tag}`), or the `type_of(x)` shape (`{.int(any), - // .int(typeid)}`) — the last is what `any_to_string`'s - // `case int:` passes, where the inner TypeId is carried - // as a plain integer rather than a `.type_tag`. - const tid = blk: { - if (arg.asTypeId()) |t| break :blk t; - if (arg == .aggregate) { - const fields = arg.aggregate; - if (fields.len >= 2) { - if (fields[1].asTypeId()) |t| break :blk t; - if (fields[1].asInt()) |iv| break :blk TypeId.fromIndex(@intCast(iv)); - } - } - return bailDetail("comptime type_is_unsigned: argument is not a Type value (expected `.type_tag`, Any-boxed Type, or `type_of(x)`)"); - }; + // A bare `.type_tag`, an Any-boxed Type (`{ .any, tid }`, + // the `type_of(x)` shape), or an Any holding a runtime value + // (`{ tag, value }`, where the tag IS the value's type). + // `reflectTypeId` reads the runtime tag so + // `type_is_unsigned(av)` for `av : Any = 6` answers about + // `s64`, not the type whose index equals the payload. + const tid = arg.reflectTypeId() orelse + return bailDetail("comptime type_is_unsigned: argument is not a Type value or boxed value (expected `.type_tag` or Any aggregate)"); return .{ .value = .{ .boolean = self.module.types.isUnsignedInt(tid) } }; }, .has_impl => {