fix(ir): reflection builtins on an Any read its runtime tag, not payload [F0.8]
`type_name` / `type_is_unsigned` on an `Any` argument unconditionally read
the Any's payload as a TypeId index. That is correct only when the Any holds
a Type value (`{ .any, tid }`); for an Any holding a runtime *value*
(`av : Any = 6`, tag s64, payload 6) it returned `types[6]` — `type_name(av)`
gave "u8" and `type_is_unsigned(av)` gave true.
Both backends now branch on the Any's runtime type-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` 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-.any / select for the runtime path; both
reflection arms route through it. The two backends agree.
- examples/0164-types-reflection-any-tag.sx: regression pinning type_name /
type_is_unsigned / print on an Any holding a value vs a Type.
- src/ir/interp.test.zig: unit test for `reflectTypeId`.
- 22 .ir snapshots: the new select appears in every std-importing program's
IR (any_to_string embeds these builtins) — benign, verified structurally
identical apart from the three new instructions.
- issues/0090, specs.md: documented the Any-tag rule.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user