Files
sx/examples/expected/0201-generics-generic-struct.ir
agra 878c4226a6 fix(0109): hoist all per-instruction allocas to the function entry block
An alloca built at its use site re-executes on every pass through that
block, and LLVM reclaims allocas only at ret — so loop-body locals,
nested-loop index slots, and emitter spill temps (ig.tmp, sret slots, ABI
coercion temps, byval materialization) grew the stack per iteration and
long loops segfaulted on stack exhaustion.

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

Regression: examples/0047-basic-loop-local-stack-reuse.sx (segfaulted
pre-fix on both the 1M-iteration body-local loop and the 3M-iteration
nested loop).
2026-06-10 17:27:11 +03:00

5294 lines
246 KiB
Plaintext

@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.1 = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.2 = private unnamed_addr constant [5 x i8] c"true\00", align 1
@str.3 = private unnamed_addr constant [6 x i8] c"false\00", align 1
@str.4 = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.5 = private unnamed_addr constant [4 x i8] c"<?>\00", align 1
@str.6 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@__sx_type_is_unsigned = private constant [97 x i1] [i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false]
@tn.str = private constant [13 x i8] c"<unresolved>\00"
@tn.str.7 = private constant [5 x i8] c"bool\00"
@tn.str.8 = private constant [3 x i8] c"s8\00"
@tn.str.9 = private constant [4 x i8] c"s16\00"
@tn.str.10 = private constant [4 x i8] c"s32\00"
@tn.str.11 = private constant [4 x i8] c"s64\00"
@tn.str.12 = private constant [3 x i8] c"u8\00"
@tn.str.13 = private constant [4 x i8] c"u16\00"
@tn.str.14 = private constant [4 x i8] c"u32\00"
@tn.str.15 = private constant [4 x i8] c"u64\00"
@tn.str.16 = private constant [4 x i8] c"f32\00"
@tn.str.17 = private constant [4 x i8] c"f64\00"
@tn.str.18 = private constant [7 x i8] c"string\00"
@tn.str.19 = private constant [4 x i8] c"Any\00"
@tn.str.20 = private constant [9 x i8] c"noreturn\00"
@tn.str.21 = private constant [6 x i8] c"isize\00"
@tn.str.22 = private constant [6 x i8] c"usize\00"
@tn.str.23 = private constant [5 x i8] c"void\00"
@tn.str.24 = private constant [6 x i8] c"*void\00"
@tn.str.25 = private constant [16 x i8] c"Source_Location\00"
@tn.str.26 = private constant [10 x i8] c"Allocator\00"
@tn.str.27 = private constant [11 x i8] c"CAllocator\00"
@tn.str.28 = private constant [12 x i8] c"*CAllocator\00"
@tn.str.29 = private constant [4 x i8] c"GPA\00"
@tn.str.30 = private constant [5 x i8] c"*GPA\00"
@tn.str.31 = private constant [11 x i8] c"ArenaChunk\00"
@tn.str.32 = private constant [12 x i8] c"*ArenaChunk\00"
@tn.str.33 = private constant [6 x i8] c"Arena\00"
@tn.str.34 = private constant [7 x i8] c"*Arena\00"
@tn.str.35 = private constant [6 x i8] c"[*]u8\00"
@tn.str.36 = private constant [9 x i8] c"BufAlloc\00"
@tn.str.37 = private constant [10 x i8] c"*BufAlloc\00"
@tn.str.38 = private constant [18 x i8] c"TrackingAllocator\00"
@tn.str.39 = private constant [19 x i8] c"*TrackingAllocator\00"
@tn.str.40 = private constant [8 x i8] c"Context\00"
@tn.str.41 = private constant [7 x i8] c"[4]s64\00"
@tn.str.42 = private constant [9 x i8] c"[]string\00"
@tn.str.43 = private constant [8 x i8] c"[16]f32\00"
@tn.str.44 = private constant [5 x i8] c"Mat4\00"
@tn.str.45 = private constant [5 x i8] c"Vec2\00"
@tn.str.46 = private constant [14 x i8] c"Vector(3,f32)\00"
@tn.str.47 = private constant [12 x i8] c"Vec__3__f32\00"
@tn.str.48 = private constant [5 x i8] c"Vec3\00"
@tn.str.49 = private constant [13 x i8] c"Complex__u32\00"
@tn.str.50 = private constant [4 x i8] c"Foo\00"
@tn.str.51 = private constant [13 x i8] c"**CAllocator\00"
@tn.str.52 = private constant [5 x i8] c"*s64\00"
@tn.str.53 = private constant [7 x i8] c"**void\00"
@tn.str.54 = private constant [6 x i8] c"*Vec3\00"
@tn.str.55 = private constant [8 x i8] c"*string\00"
@tn.str.56 = private constant [6 x i8] c"[]Any\00"
@tn.str.57 = private constant [5 x i8] c"*Any\00"
@tn.str.58 = private constant [7 x i8] c"[1]Any\00"
@tn.str.59 = private constant [8 x i8] c"*[1]Any\00"
@tn.str.60 = private constant [7 x i8] c"*[]Any\00"
@tn.str.61 = private constant [4 x i8] c"*u8\00"
@tn.str.62 = private constant [6 x i8] c"*bool\00"
@tn.str.63 = private constant [5 x i8] c"*f32\00"
@tn.str.64 = private constant [15 x i8] c"*Vector(3,f32)\00"
@tn.str.65 = private constant [7 x i8] c"[5]f32\00"
@tn.str.66 = private constant [8 x i8] c"*[5]f32\00"
@tn.str.67 = private constant [5 x i8] c"*Foo\00"
@tn.str.68 = private constant [5 x i8] c"*f64\00"
@tn.str.69 = private constant [8 x i8] c"Sx__f32\00"
@tn.str.70 = private constant [9 x i8] c"*Sx__f32\00"
@tn.str.71 = private constant [8 x i8] c"*[4]s64\00"
@tn.str.72 = private constant [17 x i8] c"*Source_Location\00"
@tn.str.73 = private constant [11 x i8] c"*Allocator\00"
@tn.str.74 = private constant [9 x i8] c"*Context\00"
@tn.str.75 = private constant [6 x i8] c"*Mat4\00"
@tn.str.76 = private constant [6 x i8] c"*Vec2\00"
@tn.str.77 = private constant [13 x i8] c"*Vec__3__f32\00"
@tn.str.78 = private constant [14 x i8] c"*Complex__u32\00"
@tn.str.79 = private constant [9 x i8] c"*[16]f32\00"
@tn.str.80 = private constant [10 x i8] c"*[]string\00"
@tn.str.81 = private constant [6 x i8] c"**GPA\00"
@tn.str.82 = private constant [13 x i8] c"**ArenaChunk\00"
@tn.str.83 = private constant [8 x i8] c"**Arena\00"
@tn.str.84 = private constant [7 x i8] c"*[*]u8\00"
@tn.str.85 = private constant [11 x i8] c"**BufAlloc\00"
@tn.str.86 = private constant [20 x i8] c"**TrackingAllocator\00"
@tn.str.87 = private constant [14 x i8] c"***CAllocator\00"
@tn.str.88 = private constant [6 x i8] c"**s64\00"
@tn.str.89 = private constant [8 x i8] c"***void\00"
@tn.str.90 = private constant [7 x i8] c"**Vec3\00"
@tn.str.91 = private constant [9 x i8] c"**string\00"
@tn.str.92 = private constant [6 x i8] c"**Any\00"
@tn.str.93 = private constant [9 x i8] c"**[1]Any\00"
@tn.str.94 = private constant [8 x i8] c"**[]Any\00"
@tn.str.95 = private constant [5 x i8] c"**u8\00"
@tn.str.96 = private constant [7 x i8] c"**bool\00"
@tn.str.97 = private constant [6 x i8] c"**f32\00"
@tn.str.98 = private constant [16 x i8] c"**Vector(3,f32)\00"
@tn.str.99 = private constant [9 x i8] c"**[5]f32\00"
@tn.str.100 = private constant [6 x i8] c"**Foo\00"
@tn.str.101 = private constant [6 x i8] c"**f64\00"
@tn.str.102 = private constant [10 x i8] c"**Sx__f32\00"
@__sx_type_names = private constant [97 x { ptr, i64 }] [{ ptr, i64 } { ptr @tn.str, i64 12 }, { ptr, i64 } { ptr @tn.str.7, i64 4 }, { ptr, i64 } { ptr @tn.str.8, i64 2 }, { ptr, i64 } { ptr @tn.str.9, i64 3 }, { ptr, i64 } { ptr @tn.str.10, i64 3 }, { ptr, i64 } { ptr @tn.str.11, i64 3 }, { ptr, i64 } { ptr @tn.str.12, i64 2 }, { ptr, i64 } { ptr @tn.str.13, i64 3 }, { ptr, i64 } { ptr @tn.str.14, i64 3 }, { ptr, i64 } { ptr @tn.str.15, i64 3 }, { ptr, i64 } { ptr @tn.str.16, i64 3 }, { ptr, i64 } { ptr @tn.str.17, i64 3 }, { ptr, i64 } { ptr @tn.str.18, i64 6 }, { ptr, i64 } { ptr @tn.str.19, i64 3 }, { ptr, i64 } { ptr @tn.str.20, i64 8 }, { ptr, i64 } { ptr @tn.str.21, i64 5 }, { ptr, i64 } { ptr @tn.str.22, i64 5 }, { ptr, i64 } { ptr @tn.str.23, i64 4 }, { ptr, i64 } { ptr @tn.str.24, i64 5 }, { ptr, i64 } { ptr @tn.str.25, i64 15 }, { ptr, i64 } { ptr @tn.str.26, i64 9 }, { ptr, i64 } { ptr @tn.str.27, i64 10 }, { ptr, i64 } { ptr @tn.str.28, i64 11 }, { ptr, i64 } { ptr @tn.str.29, i64 3 }, { ptr, i64 } { ptr @tn.str.30, i64 4 }, { ptr, i64 } { ptr @tn.str.31, i64 10 }, { ptr, i64 } { ptr @tn.str.32, i64 11 }, { ptr, i64 } { ptr @tn.str.33, i64 5 }, { ptr, i64 } { ptr @tn.str.34, i64 6 }, { ptr, i64 } { ptr @tn.str.35, i64 5 }, { ptr, i64 } { ptr @tn.str.36, i64 8 }, { ptr, i64 } { ptr @tn.str.37, i64 9 }, { ptr, i64 } { ptr @tn.str.38, i64 17 }, { ptr, i64 } { ptr @tn.str.39, i64 18 }, { ptr, i64 } { ptr @tn.str.40, i64 7 }, { ptr, i64 } { ptr @tn.str.41, i64 6 }, { ptr, i64 } { ptr @tn.str.42, i64 8 }, { ptr, i64 } { ptr @tn.str.43, i64 7 }, { ptr, i64 } { ptr @tn.str.44, i64 4 }, { ptr, i64 } { ptr @tn.str.45, i64 4 }, { ptr, i64 } { ptr @tn.str.46, i64 13 }, { ptr, i64 } { ptr @tn.str.47, i64 11 }, { ptr, i64 } { ptr @tn.str.48, i64 4 }, { ptr, i64 } { ptr @tn.str.49, i64 12 }, { ptr, i64 } { ptr @tn.str.50, i64 3 }, { ptr, i64 } { ptr @tn.str.51, i64 12 }, { ptr, i64 } { ptr @tn.str.52, i64 4 }, { ptr, i64 } { ptr @tn.str.53, i64 6 }, { ptr, i64 } { ptr @tn.str.54, i64 5 }, { ptr, i64 } { ptr @tn.str.55, i64 7 }, { ptr, i64 } { ptr @tn.str.56, i64 5 }, { ptr, i64 } { ptr @tn.str.57, i64 4 }, { ptr, i64 } { ptr @tn.str.58, i64 6 }, { ptr, i64 } { ptr @tn.str.59, i64 7 }, { ptr, i64 } { ptr @tn.str.60, i64 6 }, { ptr, i64 } { ptr @tn.str.61, i64 3 }, { ptr, i64 } { ptr @tn.str.62, i64 5 }, { ptr, i64 } { ptr @tn.str.63, i64 4 }, { ptr, i64 } { ptr @tn.str.64, i64 14 }, { ptr, i64 } { ptr @tn.str.65, i64 6 }, { ptr, i64 } { ptr @tn.str.66, i64 7 }, { ptr, i64 } { ptr @tn.str.67, i64 4 }, { ptr, i64 } { ptr @tn.str.68, i64 4 }, { ptr, i64 } { ptr @tn.str.69, i64 7 }, { ptr, i64 } { ptr @tn.str.70, i64 8 }, { ptr, i64 } { ptr @tn.str.71, i64 7 }, { ptr, i64 } { ptr @tn.str.72, i64 16 }, { ptr, i64 } { ptr @tn.str.73, i64 10 }, { ptr, i64 } { ptr @tn.str.74, i64 8 }, { ptr, i64 } { ptr @tn.str.75, i64 5 }, { ptr, i64 } { ptr @tn.str.76, i64 5 }, { ptr, i64 } { ptr @tn.str.77, i64 12 }, { ptr, i64 } { ptr @tn.str.78, i64 13 }, { ptr, i64 } { ptr @tn.str.79, i64 8 }, { ptr, i64 } { ptr @tn.str.80, i64 9 }, { ptr, i64 } { ptr @tn.str.81, i64 5 }, { ptr, i64 } { ptr @tn.str.82, i64 12 }, { ptr, i64 } { ptr @tn.str.83, i64 7 }, { ptr, i64 } { ptr @tn.str.84, i64 6 }, { ptr, i64 } { ptr @tn.str.85, i64 10 }, { ptr, i64 } { ptr @tn.str.86, i64 19 }, { ptr, i64 } { ptr @tn.str.87, i64 13 }, { ptr, i64 } { ptr @tn.str.88, i64 5 }, { ptr, i64 } { ptr @tn.str.89, i64 7 }, { ptr, i64 } { ptr @tn.str.90, i64 6 }, { ptr, i64 } { ptr @tn.str.91, i64 8 }, { ptr, i64 } { ptr @tn.str.92, i64 5 }, { ptr, i64 } { ptr @tn.str.93, i64 8 }, { ptr, i64 } { ptr @tn.str.94, i64 7 }, { ptr, i64 } { ptr @tn.str.95, i64 4 }, { ptr, i64 } { ptr @tn.str.96, i64 6 }, { ptr, i64 } { ptr @tn.str.97, i64 5 }, { ptr, i64 } { ptr @tn.str.98, i64 15 }, { ptr, i64 } { ptr @tn.str.99, i64 8 }, { ptr, i64 } { ptr @tn.str.100, i64 5 }, { ptr, i64 } { ptr @tn.str.101, i64 5 }, { ptr, i64 } { ptr @tn.str.102, i64 9 }]
@str.103 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.104 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.105 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.106 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.107 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.108 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.109 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.110 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.111 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.112 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.113 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.114 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.115 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.116 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.117 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [8 x i8] c"v1: {}\0A\00", align 1
@str.125 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.126 = private unnamed_addr constant [8 x i8] c"v1: {}\0A\00", align 1
@str.127 = private unnamed_addr constant [8 x i8] c"v2: {}\0A\00", align 1
@str.128 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.129 = private unnamed_addr constant [8 x i8] c"v2: {}\0A\00", align 1
@str.130 = private unnamed_addr constant [10 x i8] c"buff: {}\0A\00", align 1
@str.131 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.132 = private unnamed_addr constant [10 x i8] c"buff: {}\0A\00", align 1
@str.133 = private unnamed_addr constant [10 x i8] c"comp: {}\0A\00", align 1
@str.134 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.135 = private unnamed_addr constant [10 x i8] c"comp: {}\0A\00", align 1
@str.136 = private unnamed_addr constant [9 x i8] c"add: {}\0A\00", align 1
@str.137 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.138 = private unnamed_addr constant [9 x i8] c"add: {}\0A\00", align 1
@str.139 = private unnamed_addr constant [10 x i8] c"v2.x: {}\0A\00", align 1
@str.140 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.141 = private unnamed_addr constant [10 x i8] c"v2.x: {}\0A\00", align 1
@str.142 = private unnamed_addr constant [11 x i8] c"v2[1]: {}\0A\00", align 1
@str.143 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.144 = private unnamed_addr constant [11 x i8] c"v2[1]: {}\0A\00", align 1
@str.145 = private unnamed_addr constant [12 x i8] c"scaled: {}\0A\00", align 1
@str.146 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.147 = private unnamed_addr constant [12 x i8] c"scaled: {}\0A\00", align 1
@str.148 = private unnamed_addr constant [9 x i8] c"neg: {}\0A\00", align 1
@str.149 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.150 = private unnamed_addr constant [9 x i8] c"neg: {}\0A\00", align 1
@str.151 = private unnamed_addr constant [13 x i8] c"sqrt(9): {}\0A\00", align 1
@str.152 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.153 = private unnamed_addr constant [13 x i8] c"sqrt(9): {}\0A\00", align 1
@str.154 = private unnamed_addr constant [4 x i8] c"{}\0A\00", align 1
@str.155 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.156 = private unnamed_addr constant [4 x i8] c"{}\0A\00", align 1
@str.157 = private unnamed_addr constant [4 x i8] c"{}\0A\00", align 1
@str.158 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.159 = private unnamed_addr constant [4 x i8] c"{}\0A\00", align 1
@str.160 = private unnamed_addr constant [16 x i8] c"Source_Location\00", align 1
@str.161 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.162 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.163 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str = private constant [5 x i8] c"file\00"
@fld.str.164 = private constant [5 x i8] c"line\00"
@fld.str.165 = private constant [4 x i8] c"col\00"
@fld.str.166 = private constant [5 x i8] c"func\00"
@field_names = private constant [4 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str, i64 4 }, { ptr, i64 } { ptr @fld.str.164, i64 4 }, { ptr, i64 } { ptr @fld.str.165, i64 3 }, { ptr, i64 } { ptr @fld.str.166, i64 4 }]
@str.167 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.168 = private unnamed_addr constant [10 x i8] c"Allocator\00", align 1
@str.169 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.170 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.171 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.172 = private constant [4 x i8] c"ctx\00"
@fld.str.173 = private constant [6 x i8] c"alloc\00"
@fld.str.174 = private constant [8 x i8] c"dealloc\00"
@field_names.175 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.172, i64 3 }, { ptr, i64 } { ptr @fld.str.173, i64 5 }, { ptr, i64 } { ptr @fld.str.174, i64 7 }]
@str.176 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.177 = private unnamed_addr constant [11 x i8] c"CAllocator\00", align 1
@str.178 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.179 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.180 = private unnamed_addr constant [3 x i8] c", \00", align 1
@field_names.181 = private constant [0 x { ptr, i64 }] zeroinitializer
@str.182 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.183 = private unnamed_addr constant [4 x i8] c"GPA\00", align 1
@str.184 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.185 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.186 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.187 = private constant [12 x i8] c"alloc_count\00"
@field_names.188 = private constant [1 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.187, i64 11 }]
@str.189 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.190 = private unnamed_addr constant [11 x i8] c"ArenaChunk\00", align 1
@str.191 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.192 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.193 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.194 = private constant [5 x i8] c"next\00"
@fld.str.195 = private constant [4 x i8] c"cap\00"
@field_names.196 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.194, i64 4 }, { ptr, i64 } { ptr @fld.str.195, i64 3 }]
@str.197 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.198 = private unnamed_addr constant [6 x i8] c"Arena\00", align 1
@str.199 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.200 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.201 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.202 = private constant [6 x i8] c"first\00"
@fld.str.203 = private constant [10 x i8] c"end_index\00"
@fld.str.204 = private constant [7 x i8] c"parent\00"
@field_names.205 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.202, i64 5 }, { ptr, i64 } { ptr @fld.str.203, i64 9 }, { ptr, i64 } { ptr @fld.str.204, i64 6 }]
@str.206 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.207 = private unnamed_addr constant [9 x i8] c"BufAlloc\00", align 1
@str.208 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.209 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.210 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.211 = private constant [4 x i8] c"buf\00"
@fld.str.212 = private constant [4 x i8] c"len\00"
@fld.str.213 = private constant [4 x i8] c"pos\00"
@field_names.214 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.211, i64 3 }, { ptr, i64 } { ptr @fld.str.212, i64 3 }, { ptr, i64 } { ptr @fld.str.213, i64 3 }]
@str.215 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.216 = private unnamed_addr constant [18 x i8] c"TrackingAllocator\00", align 1
@str.217 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.218 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.219 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.220 = private constant [7 x i8] c"parent\00"
@fld.str.221 = private constant [12 x i8] c"alloc_count\00"
@fld.str.222 = private constant [14 x i8] c"dealloc_count\00"
@fld.str.223 = private constant [18 x i8] c"total_alloc_bytes\00"
@field_names.224 = private constant [4 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.220, i64 6 }, { ptr, i64 } { ptr @fld.str.221, i64 11 }, { ptr, i64 } { ptr @fld.str.222, i64 13 }, { ptr, i64 } { ptr @fld.str.223, i64 17 }]
@str.225 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.226 = private unnamed_addr constant [8 x i8] c"Context\00", align 1
@str.227 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.228 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.229 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.230 = private constant [10 x i8] c"allocator\00"
@fld.str.231 = private constant [5 x i8] c"data\00"
@field_names.232 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.230, i64 9 }, { ptr, i64 } { ptr @fld.str.231, i64 4 }]
@str.233 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.234 = private unnamed_addr constant [5 x i8] c"Mat4\00", align 1
@str.235 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.236 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.237 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.238 = private constant [5 x i8] c"data\00"
@field_names.239 = private constant [1 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.238, i64 4 }]
@str.240 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.241 = private unnamed_addr constant [5 x i8] c"Vec2\00", align 1
@str.242 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.243 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.244 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.245 = private constant [2 x i8] c"x\00"
@fld.str.246 = private constant [2 x i8] c"y\00"
@field_names.247 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.245, i64 1 }, { ptr, i64 } { ptr @fld.str.246, i64 1 }]
@str.248 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.249 = private unnamed_addr constant [12 x i8] c"Vec__3__f32\00", align 1
@str.250 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.251 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.252 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.253 = private constant [5 x i8] c"data\00"
@field_names.254 = private constant [1 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.253, i64 4 }]
@str.255 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.256 = private unnamed_addr constant [5 x i8] c"Vec3\00", align 1
@str.257 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.258 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.259 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.260 = private constant [5 x i8] c"data\00"
@field_names.261 = private constant [1 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.260, i64 4 }]
@str.262 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.263 = private unnamed_addr constant [13 x i8] c"Complex__u32\00", align 1
@str.264 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.265 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.266 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.267 = private constant [6 x i8] c"value\00"
@fld.str.268 = private constant [6 x i8] c"count\00"
@field_names.269 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.267, i64 5 }, { ptr, i64 } { ptr @fld.str.268, i64 5 }]
@str.270 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.271 = private unnamed_addr constant [4 x i8] c"Foo\00", align 1
@str.272 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.273 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.274 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.275 = private constant [6 x i8] c"value\00"
@fld.str.276 = private constant [6 x i8] c"count\00"
@field_names.277 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.275, i64 5 }, { ptr, i64 } { ptr @fld.str.276, i64 5 }]
@str.278 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.279 = private unnamed_addr constant [2 x i8] c".\00", align 1
@fld.str.280 = private constant [8 x i8] c"counter\00"
@fld.str.281 = private constant [5 x i8] c"user\00"
@field_names.282 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.280, i64 7 }, { ptr, i64 } { ptr @fld.str.281, i64 4 }]
@str.283 = private unnamed_addr constant [2 x i8] c"(\00", align 1
@str.284 = private unnamed_addr constant [2 x i8] c")\00", align 1
@str.285 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.286 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.287 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.288 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.289 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.290 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.291 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.292 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.293 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.294 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.295 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.296 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.297 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.298 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.299 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.300 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.301 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.302 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.303 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.304 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.305 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.306 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.307 = private unnamed_addr constant [6 x i8] c"*void\00", align 1
@str.308 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.309 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.310 = private unnamed_addr constant [12 x i8] c"*CAllocator\00", align 1
@str.311 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.312 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.313 = private unnamed_addr constant [5 x i8] c"*GPA\00", align 1
@str.314 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.315 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.316 = private unnamed_addr constant [12 x i8] c"*ArenaChunk\00", align 1
@str.317 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.318 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.319 = private unnamed_addr constant [7 x i8] c"*Arena\00", align 1
@str.320 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.321 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.322 = private unnamed_addr constant [6 x i8] c"[*]u8\00", align 1
@str.323 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.324 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.325 = private unnamed_addr constant [10 x i8] c"*BufAlloc\00", align 1
@str.326 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.327 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.328 = private unnamed_addr constant [19 x i8] c"*TrackingAllocator\00", align 1
@str.329 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.330 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.331 = private unnamed_addr constant [13 x i8] c"**CAllocator\00", align 1
@str.332 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.333 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.334 = private unnamed_addr constant [5 x i8] c"*s64\00", align 1
@str.335 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.336 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.337 = private unnamed_addr constant [7 x i8] c"**void\00", align 1
@str.338 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.339 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.340 = private unnamed_addr constant [6 x i8] c"*Vec3\00", align 1
@str.341 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.342 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.343 = private unnamed_addr constant [8 x i8] c"*string\00", align 1
@str.344 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.345 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.346 = private unnamed_addr constant [5 x i8] c"*Any\00", align 1
@str.347 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.348 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.349 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1
@str.350 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.351 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.352 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1
@str.353 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.354 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.355 = private unnamed_addr constant [4 x i8] c"*u8\00", align 1
@str.356 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.357 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.358 = private unnamed_addr constant [6 x i8] c"*bool\00", align 1
@str.359 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.360 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.361 = private unnamed_addr constant [5 x i8] c"*f32\00", align 1
@str.362 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.363 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.364 = private unnamed_addr constant [15 x i8] c"*Vector(3,f32)\00", align 1
@str.365 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.366 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.367 = private unnamed_addr constant [8 x i8] c"*[5]f32\00", align 1
@str.368 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.369 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.370 = private unnamed_addr constant [5 x i8] c"*Foo\00", align 1
@str.371 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.372 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.373 = private unnamed_addr constant [5 x i8] c"*f64\00", align 1
@str.374 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.375 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.376 = private unnamed_addr constant [9 x i8] c"*Sx__f32\00", align 1
@str.377 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
declare ptr @malloc(i64)
declare void @free(ptr)
declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc(ptr %0, ptr %1, i64 %2) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
%load = load i64, ptr %allocaN, align 8
%call = call ptr @malloc(i64 %load)
ret ptr %call
}
; Function Attrs: nounwind
define internal void @CAllocator.dealloc(ptr %0, ptr %1, ptr %2) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca ptr, align 8
store ptr %2, ptr %allocaN, align 8
%load = load ptr, ptr %allocaN, align 8
call void @free(ptr %load)
ret void
}
; Function Attrs: nounwind
declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc(ptr, ptr, ptr) #0
; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%add = add i64 %load, 1
%loadN = load { { ptr, ptr, ptr }, ptr }, ptr %0, align 8
%sg = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
%sgN = extractvalue { ptr, ptr, ptr } %sg, 0
%sgN = extractvalue { ptr, ptr, ptr } %sg, 1
%icall = call ptr %sgN(ptr %0, ptr %sgN, i64 %add)
%allocaN = alloca ptr, align 8
store ptr %icall, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
%addN = add i64 %loadN, 1
%2 = call ptr @memset(ptr %loadN, i32 0, i64 %addN)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } undef, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
%pti = ptrtoint ptr %loadN to i64
store i64 %pti, ptr %gep, align 8
%loadN = load i64, ptr %alloca, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 %loadN, ptr %gepN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
}
; Function Attrs: nounwind
define internal { ptr, i64 } @int_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i1, align 1
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
br i1 %icmp, label %if.then.14, label %if.merge.15
if.then.14: ; preds = %entry
ret { ptr, i64 } { ptr @str, i64 1 }
if.merge.15: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%icmpN = icmp slt i64 %loadN, 0
store i1 %icmpN, ptr %allocaN, align 1
%call = call { ptr, i64 } @cstring(ptr %0, i64 20)
store { ptr, i64 } %call, ptr %allocaN, align 8
store i64 19, ptr %allocaN, align 8
%loadN = load i64, ptr %alloca, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.16
while.hdr.16: ; preds = %if.merge.20, %if.merge.15
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp ne i64 %loadN, 0
br i1 %icmpN, label %while.body.17, label %while.exit.18
while.body.17: ; preds = %while.hdr.16
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
br i1 %icmpN, label %if.then.19, label %if.merge.20
while.exit.18: ; preds = %while.hdr.16
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.21, label %if.merge.22
if.then.19: ; preds = %while.body.17
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 0, %loadN
store i64 %sub, ptr %allocaN, align 8
br label %if.merge.20
if.merge.20: ; preds = %if.then.19, %while.body.17
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 48
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr = getelementptr i8, ptr %igp.data, i64 %loadN
%trunc = trunc i64 %add to i8
store i8 %trunc, ptr %igp.ptr, align 1
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, 1
store i64 %subN, ptr %allocaN, align 8
br label %while.hdr.16
if.then.21: ; preds = %while.exit.18
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data24 = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr25 = getelementptr i8, ptr %igp.data24, i64 %loadN
store i8 45, ptr %igp.ptr25, align 1
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, 1
store i64 %subN, ptr %allocaN, align 8
br label %if.merge.22
if.merge.22: ; preds = %if.then.21, %while.exit.18
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 19, %loadN
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 %addN, i64 %subN)
ret { ptr, i64 } %callN
}
; Function Attrs: nounwind
define internal { ptr, i64 } @uint_to_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%ig.tmp = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%ig.tmp15 = alloca [4 x i64], align 8
%ig.tmp20 = alloca [4 x i64], align 8
%ig.tmp26 = alloca [4 x i64], align 8
%ig.tmp36 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
br i1 %icmp, label %if.then.56, label %if.merge.57
if.then.56: ; preds = %entry
ret { ptr, i64 } { ptr @str.1, i64 1 }
if.merge.57: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 20)
store { ptr, i64 } %callN, ptr %allocaN, align 8
store i64 19, ptr %allocaN, align 8
br label %while.hdr.66
while.hdr.66: ; preds = %while.exit.77, %if.merge.57
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
%icmpN = icmp ne i64 %ig.val, 0
br i1 %icmpN, label %or.merge.70, label %or.rhs.69
while.body.67: ; preds = %or.merge.74
store i64 0, ptr %allocaN, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.75
while.exit.68: ; preds = %or.merge.74
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 19, %loadN
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 %add, i64 %sub)
ret { ptr, i64 } %callN
or.rhs.69: ; preds = %while.hdr.66
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp15, align 8
%ig.ptr16 = getelementptr [4 x i64], ptr %ig.tmp15, i64 0, i64 1
%ig.val17 = load i64, ptr %ig.ptr16, align 8
%icmpN = icmp ne i64 %ig.val17, 0
br label %or.merge.70
or.merge.70: ; preds = %or.rhs.69, %while.hdr.66
%bp = phi i1 [ true, %while.hdr.66 ], [ %icmpN, %or.rhs.69 ]
br i1 %bp, label %or.merge.72, label %or.rhs.71
or.rhs.71: ; preds = %or.merge.70
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp20, align 8
%ig.ptr21 = getelementptr [4 x i64], ptr %ig.tmp20, i64 0, i64 2
%ig.val22 = load i64, ptr %ig.ptr21, align 8
%icmpN = icmp ne i64 %ig.val22, 0
br label %or.merge.72
or.merge.72: ; preds = %or.rhs.71, %or.merge.70
%bpN = phi i1 [ true, %or.merge.70 ], [ %icmpN, %or.rhs.71 ]
br i1 %bpN, label %or.merge.74, label %or.rhs.73
or.rhs.73: ; preds = %or.merge.72
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp26, align 8
%ig.ptr27 = getelementptr [4 x i64], ptr %ig.tmp26, i64 0, i64 3
%ig.val28 = load i64, ptr %ig.ptr27, align 8
%icmpN = icmp ne i64 %ig.val28, 0
br label %or.merge.74
or.merge.74: ; preds = %or.rhs.73, %or.merge.72
%bpN = phi i1 [ true, %or.merge.72 ], [ %icmpN, %or.rhs.73 ]
br i1 %bpN, label %while.body.67, label %while.exit.68
while.hdr.75: ; preds = %while.body.76, %while.body.67
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 4
br i1 %icmpN, label %while.body.76, label %while.exit.77
while.body.76: ; preds = %while.hdr.75
%loadN = load i64, ptr %allocaN, align 8
%mul = mul i64 %loadN, 65536
%loadN = load [4 x i64], ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp36, align 8
%ig.ptr37 = getelementptr [4 x i64], ptr %ig.tmp36, i64 0, i64 %loadN
%ig.val38 = load i64, ptr %ig.ptr37, align 8
%addN = add i64 %mul, %ig.val38
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 10
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 %loadN
store i64 %sdiv, ptr %igp.ptr, align 8
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 10
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %while.hdr.75
while.exit.77: ; preds = %while.hdr.75
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 48
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr50 = getelementptr i8, ptr %igp.data, i64 %loadN
%trunc = trunc i64 %addN to i8
store i8 %trunc, ptr %igp.ptr50, align 1
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, 1
store i64 %subN, ptr %allocaN, align 8
br label %while.hdr.66
}
; Function Attrs: nounwind
define internal { ptr, i64 } @bool_to_string(ptr %0, i1 %1) #0 {
entry:
%alloca = alloca i1, align 1
store i1 %1, ptr %alloca, align 1
%load = load i1, ptr %alloca, align 1
br i1 %load, label %if.then.78, label %if.else.79
if.then.78: ; preds = %entry
br label %if.merge.80
if.else.79: ; preds = %entry
br label %if.merge.80
if.merge.80: ; preds = %if.else.79, %if.then.78
%bp = phi { ptr, i64 } [ { ptr @str.2, i64 4 }, %if.then.78 ], [ { ptr @str.3, i64 5 }, %if.else.79 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @float_to_string(ptr %0, double %1) #0 {
entry:
%alloca = alloca double, align 8
%allocaN = alloca double, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
store double %1, ptr %alloca, align 8
%load = load double, ptr %alloca, align 8
%fcmp = fcmp olt double %load, 0.000000e+00
%allocaN = alloca i1, align 1
store i1 %fcmp, ptr %allocaN, align 1
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.84, label %if.else.85
if.then.84: ; preds = %entry
%loadN = load double, ptr %alloca, align 8
%fsub = fsub double 0.000000e+00, %loadN
br label %if.merge.86
if.else.85: ; preds = %entry
%loadN = load double, ptr %alloca, align 8
br label %if.merge.86
if.merge.86: ; preds = %if.else.85, %if.then.84
%bp = phi double [ %fsub, %if.then.84 ], [ %loadN, %if.else.85 ]
store double %bp, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%fptosi = fptosi double %loadN to i64
store i64 %fptosi, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sitofp = sitofp i64 %loadN to double
%fsubN = fsub double %loadN, %sitofp
%fmul = fmul double %fsubN, 1.000000e+06
%fptosiN = fptosi double %fmul to i64
store i64 %fptosiN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
br i1 %icmp, label %if.then.87, label %if.merge.88
if.then.87: ; preds = %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 0, %loadN
store i64 %sub, ptr %allocaN, align 8
br label %if.merge.88
if.merge.88: ; preds = %if.then.87, %if.merge.86
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.89, label %if.else.90
if.then.89: ; preds = %if.merge.88
br label %if.merge.91
if.else.90: ; preds = %if.merge.88
br label %if.merge.91
if.merge.91: ; preds = %if.else.90, %if.then.89
%bpN = phi i64 [ 1, %if.then.89 ], [ 0, %if.else.90 ]
store i64 %bpN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%addN = add i64 %add, 1
%addN = add i64 %addN, 6
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 %loadN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
store i64 0, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
br i1 %loadN, label %if.then.92, label %if.merge.93
if.then.92: ; preds = %if.merge.91
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr = getelementptr i8, ptr %igp.data, i64 0
store i8 45, ptr %igp.ptr, align 1
store i64 1, ptr %allocaN, align 8
br label %if.merge.93
if.merge.93: ; preds = %if.then.92, %if.merge.91
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data41 = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr42 = getelementptr i8, ptr %igp.data41, i64 %loadN
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%dptr = extractvalue { ptr, i64 } %loadN, 0
%loadN = load i64, ptr %allocaN, align 8
%callN = call ptr @memcpy(ptr %igp.ptr42, ptr %dptr, i64 %loadN)
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, %loadN
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data51 = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr52 = getelementptr i8, ptr %igp.data51, i64 %loadN
store i8 46, ptr %igp.ptr52, align 1
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 6, %loadN
store i64 %subN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data60 = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr61 = getelementptr i8, ptr %igp.data60, i64 %loadN
%loadN = load i64, ptr %allocaN, align 8
%2 = call ptr @memset(ptr %igp.ptr61, i32 48, i64 %loadN)
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, %loadN
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data68 = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr69 = getelementptr i8, ptr %igp.data68, i64 %loadN
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%dptrN = extractvalue { ptr, i64 } %loadN, 0
%loadN = load i64, ptr %allocaN, align 8
%callN = call ptr @memcpy(ptr %igp.ptr69, ptr %dptrN, i64 %loadN)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
}
; Function Attrs: nounwind
define internal void @hex_group(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%allocaN = alloca i64, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 %3, ptr %allocaN, align 8
%load = load i64, ptr %allocaN, align 8
%add = add i64 %load, 3
%allocaN = alloca i64, align 8
store i64 %add, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %while.hdr.270
while.hdr.270: ; preds = %if.merge.275, %entry
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp sge i64 %loadN, %loadN
br i1 %icmp, label %while.body.271, label %while.exit.272
while.body.271: ; preds = %while.hdr.270
%loadN = load i64, ptr %allocaN, align 8
%srem = srem i64 %loadN, 16
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 10
br i1 %icmpN, label %if.then.273, label %if.else.274
while.exit.272: ; preds = %while.hdr.270
ret void
if.then.273: ; preds = %while.body.271
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 48
br label %if.merge.275
if.else.274: ; preds = %while.body.271
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, 10
%addN = add i64 %sub, 97
br label %if.merge.275
if.merge.275: ; preds = %if.else.274, %if.then.273
%bp = phi i64 [ %addN, %if.then.273 ], [ %addN, %if.else.274 ]
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr = getelementptr i8, ptr %igp.data, i64 %loadN
%trunc = trunc i64 %bp to i8
store i8 %trunc, ptr %igp.ptr, align 1
%loadN = load i64, ptr %allocaN, align 8
%sdiv = sdiv i64 %loadN, 16
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, 1
store i64 %subN, ptr %allocaN, align 8
br label %while.hdr.270
}
; Function Attrs: nounwind
define internal [4 x i64] @decompose_u16x4(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%srem = srem i64 %load, 65536
%allocaN = alloca i64, align 8
store i64 %srem, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %loadN, 0
br i1 %icmp, label %if.then.58, label %if.merge.59
if.then.58: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 65536
store i64 %add, ptr %allocaN, align 8
br label %if.merge.59
if.merge.59: ; preds = %if.then.58, %entry
%loadN = load i64, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%sdiv = sdiv i64 %sub, 65536
store i64 %sdiv, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
br i1 %icmpN, label %if.then.60, label %if.merge.61
if.then.60: ; preds = %if.merge.59
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 65536
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.61
if.merge.61: ; preds = %if.then.60, %if.merge.59
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
br i1 %icmpN, label %if.then.62, label %if.merge.63
if.then.62: ; preds = %if.merge.61
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 65536
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.63
if.merge.63: ; preds = %if.then.62, %if.merge.61
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%sdivN = sdiv i64 %subN, 65536
store i64 %sdivN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sremN = srem i64 %loadN, 65536
store i64 %sremN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 0
br i1 %icmpN, label %if.then.64, label %if.merge.65
if.then.64: ; preds = %if.merge.63
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 65536
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.65
if.merge.65: ; preds = %if.then.64, %if.merge.63
store [4 x i64] undef, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr = getelementptr i64, ptr %allocaN, i64 0
store i64 %loadN, ptr %igp.ptr, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr41 = getelementptr i64, ptr %allocaN, i64 1
store i64 %loadN, ptr %igp.ptr41, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr43 = getelementptr i64, ptr %allocaN, i64 2
store i64 %loadN, ptr %igp.ptr43, align 8
%loadN = load i64, ptr %allocaN, align 8
%igp.ptr45 = getelementptr i64, ptr %allocaN, i64 3
store i64 %loadN, ptr %igp.ptr45, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
ret [4 x i64] %loadN
}
; Function Attrs: nounwind
define internal { ptr, i64 } @int_to_hex_string(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca i64, align 8
%allocaN = alloca [4 x i64], align 8
%allocaN = alloca { ptr, i64 }, align 8
%ig.tmp = alloca [4 x i64], align 8
%ig.tmp9 = alloca [4 x i64], align 8
%ig.tmp14 = alloca [4 x i64], align 8
%ig.tmp19 = alloca [4 x i64], align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
%icmp = icmp eq i64 %load, 0
br i1 %icmp, label %if.then.268, label %if.merge.269
if.then.268: ; preds = %entry
ret { ptr, i64 } { ptr @str.4, i64 1 }
if.merge.269: ; preds = %entry
%loadN = load i64, ptr %alloca, align 8
%call = call [4 x i64] @decompose_u16x4(ptr %0, i64 %loadN)
store [4 x i64] %call, ptr %allocaN, align 8
%callN = call { ptr, i64 } @cstring(ptr %0, i64 16)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 0
%ig.val = load i64, ptr %ig.ptr, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 0, i64 %ig.val)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp9, align 8
%ig.ptr10 = getelementptr [4 x i64], ptr %ig.tmp9, i64 0, i64 1
%ig.val11 = load i64, ptr %ig.ptr10, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 4, i64 %ig.val11)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp14, align 8
%ig.ptr15 = getelementptr [4 x i64], ptr %ig.tmp14, i64 0, i64 2
%ig.val16 = load i64, ptr %ig.ptr15, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 8, i64 %ig.val16)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp19, align 8
%ig.ptr20 = getelementptr [4 x i64], ptr %ig.tmp19, i64 0, i64 3
%ig.val21 = load i64, ptr %ig.ptr20, align 8
call void @hex_group(ptr %0, { ptr, i64 } %loadN, i64 12, i64 %ig.val21)
store i64 0, ptr %allocaN, align 8
br label %while.hdr.276
while.hdr.276: ; preds = %if.merge.280, %if.merge.269
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 15
br i1 %icmpN, label %while.body.277, label %while.exit.278
while.body.277: ; preds = %while.hdr.276
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr27 = getelementptr i8, ptr %ig.data, i64 %loadN
%ig.val28 = load i8, ptr %ig.ptr27, align 1
%cmp.ext = zext i8 %ig.val28 to i64
%icmpN = icmp ne i64 %cmp.ext, 48
br i1 %icmpN, label %if.then.279, label %if.merge.280
while.exit.278: ; preds = %if.then.279, %while.hdr.276
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 16, %loadN
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 %loadN, i64 %sub)
ret { ptr, i64 } %callN
if.then.279: ; preds = %while.body.277
br label %while.exit.278
if.merge.280: ; preds = %while.body.277
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.276
}
; Function Attrs: nounwind
define internal { ptr, i64 } @concat(ptr %0, { ptr, i64 } %1, { ptr, i64 } %2) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %2, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %alloca, align 8
%len = extractvalue { ptr, i64 } %load, 1
%allocaN = alloca i64, align 8
store i64 %len, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%allocaN = alloca i64, align 8
store i64 %lenN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, %loadN
%call = call { ptr, i64 } @cstring(ptr %0, i64 %add)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%dptr = extractvalue { ptr, i64 } %loadN, 0
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%dptrN = extractvalue { ptr, i64 } %loadN, 0
%loadN = load i64, ptr %allocaN, align 8
%callN = call ptr @memcpy(ptr %dptr, ptr %dptrN, i64 %loadN)
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr = getelementptr i8, ptr %igp.data, i64 %loadN
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%dptrN = extractvalue { ptr, i64 } %loadN, 0
%loadN = load i64, ptr %allocaN, align 8
%callN = call ptr @memcpy(ptr %igp.ptr, ptr %dptrN, i64 %loadN)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
}
; Function Attrs: nounwind
define internal { ptr, i64 } @substr(ptr %0, { ptr, i64 } %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 %3, ptr %allocaN, align 8
%load = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @cstring(ptr %0, i64 %load)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%dptr = extractvalue { ptr, i64 } %loadN, 0
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%igp.data = extractvalue { ptr, i64 } %loadN, 0
%igp.ptr = getelementptr i8, ptr %igp.data, i64 %loadN
%loadN = load i64, ptr %allocaN, align 8
%callN = call ptr @memcpy(ptr %dptr, ptr %igp.ptr, i64 %loadN)
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
}
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0
; Function Attrs: nounwind
define internal { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %1) #0 {
entry:
%alloca = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca double, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.5, i64 3 }, ptr %allocaN, align 8
%load = load { i64, i64 }, ptr %alloca, align 8
%sg = extractvalue { i64, i64 } %load, 0
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %sg, 1
%allocaN = alloca { i64, i64 }, align 8
store { i64, i64 } %ba.val, ptr %allocaN, align 8
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw = extractvalue { i64, i64 } %loadN, 1
switch i64 %ua.raw, label %match.unr.52 [
i64 17, label %match.arm.38
i64 2, label %match.arm.39
i64 3, label %match.arm.39
i64 4, label %match.arm.39
i64 5, label %match.arm.39
i64 6, label %match.arm.39
i64 7, label %match.arm.39
i64 8, label %match.arm.39
i64 9, label %match.arm.39
i64 16, label %match.arm.39
i64 15, label %match.arm.39
i64 12, label %match.arm.40
i64 1, label %match.arm.41
i64 10, label %match.arm.42
i64 11, label %match.arm.42
i64 19, label %match.arm.43
i64 20, label %match.arm.43
i64 21, label %match.arm.43
i64 23, label %match.arm.43
i64 25, label %match.arm.43
i64 27, label %match.arm.43
i64 30, label %match.arm.43
i64 32, label %match.arm.43
i64 34, label %match.arm.43
i64 38, label %match.arm.43
i64 39, label %match.arm.43
i64 41, label %match.arm.43
i64 42, label %match.arm.43
i64 43, label %match.arm.43
i64 44, label %match.arm.43
i64 63, label %match.arm.44
i64 40, label %match.arm.46
i64 35, label %match.arm.47
i64 37, label %match.arm.47
i64 52, label %match.arm.47
i64 59, label %match.arm.47
i64 36, label %match.arm.48
i64 50, label %match.arm.48
i64 18, label %match.arm.49
i64 22, label %match.arm.49
i64 24, label %match.arm.49
i64 26, label %match.arm.49
i64 28, label %match.arm.49
i64 29, label %match.arm.49
i64 31, label %match.arm.49
i64 33, label %match.arm.49
i64 45, label %match.arm.49
i64 46, label %match.arm.49
i64 47, label %match.arm.49
i64 48, label %match.arm.49
i64 49, label %match.arm.49
i64 51, label %match.arm.49
i64 53, label %match.arm.49
i64 54, label %match.arm.49
i64 55, label %match.arm.49
i64 56, label %match.arm.49
i64 57, label %match.arm.49
i64 58, label %match.arm.49
i64 60, label %match.arm.49
i64 61, label %match.arm.49
i64 62, label %match.arm.49
i64 64, label %match.arm.49
i64 13, label %match.arm.51
]
match.merge.37: ; preds = %dispatch.merge.239, %dispatch.merge.225, %dispatch.merge.199, %dispatch.merge.191, %dispatch.merge.186, %dispatch.merge.94, %float.merge.83, %if.merge.55, %match.unr.52, %match.arm.51, %match.arm.41, %match.arm.40, %match.arm.38
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
match.arm.38: ; preds = %entry
store { ptr, i64 } { ptr @str.6, i64 0 }, ptr %allocaN, align 8
br label %match.merge.37
match.arm.39: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%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
match.arm.40: ; preds = %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw8 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr = inttoptr i64 %ua.raw8 to ptr
%ua.load = load { ptr, i64 }, ptr %ua.ptr, align 8
store { ptr, i64 } %ua.load, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
match.arm.41: ; preds = %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw11 = extractvalue { i64, i64 } %loadN, 1
%tr = trunc i64 %ua.raw11 to i1
%call = call { ptr, i64 } @bool_to_string(ptr %0, i1 %tr)
store { ptr, i64 } %call, ptr %allocaN, align 8
br label %match.merge.37
match.arm.42: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%sgN = extractvalue { i64, i64 } %loadN, 0
%icmp = icmp eq i64 %sgN, 10
br i1 %icmp, label %fN.unbox.81, label %fN.unbox.82
match.arm.43: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw16 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw16, label %dispatch.default.95 [
i64 19, label %dispatch.case.96
i64 20, label %dispatch.case.97
i64 21, label %dispatch.case.98
i64 23, label %dispatch.case.99
i64 25, label %dispatch.case.100
i64 27, label %dispatch.case.101
i64 30, label %dispatch.case.102
i64 32, label %dispatch.case.103
i64 34, label %dispatch.case.104
i64 38, label %dispatch.case.105
i64 39, label %dispatch.case.106
i64 41, label %dispatch.case.107
i64 42, label %dispatch.case.108
i64 43, label %dispatch.case.109
i64 44, label %dispatch.case.110
]
match.arm.44: ; preds = %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw20, label %dispatch.default.187 [
i64 63, label %dispatch.case.188
]
match.arm.45: ; No predecessors!
unreachable
match.arm.46: ; preds = %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw24, label %dispatch.default.192 [
i64 40, label %dispatch.case.193
]
match.arm.47: ; preds = %entry, %entry, %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw28, label %dispatch.default.200 [
i64 35, label %dispatch.case.201
i64 37, label %dispatch.case.202
i64 52, label %dispatch.case.203
i64 59, label %dispatch.case.204
]
match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw32 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw32, label %dispatch.default.226 [
i64 36, label %dispatch.case.227
i64 50, label %dispatch.case.228
]
match.arm.49: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw36 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw36, label %dispatch.default.240 [
i64 18, label %dispatch.case.241
i64 22, label %dispatch.case.242
i64 24, label %dispatch.case.243
i64 26, label %dispatch.case.244
i64 28, label %dispatch.case.245
i64 29, label %dispatch.case.246
i64 31, label %dispatch.case.247
i64 33, label %dispatch.case.248
i64 45, label %dispatch.case.249
i64 46, label %dispatch.case.250
i64 47, label %dispatch.case.251
i64 48, label %dispatch.case.252
i64 49, label %dispatch.case.253
i64 51, label %dispatch.case.254
i64 53, label %dispatch.case.255
i64 54, label %dispatch.case.256
i64 55, label %dispatch.case.257
i64 56, label %dispatch.case.258
i64 57, label %dispatch.case.259
i64 58, label %dispatch.case.260
i64 60, label %dispatch.case.261
i64 61, label %dispatch.case.262
i64 62, label %dispatch.case.263
i64 64, label %dispatch.case.264
]
match.arm.50: ; No predecessors!
unreachable
match.arm.51: ; preds = %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%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
match.unr.52: ; preds = %entry
br label %match.merge.37
if.then.53: ; preds = %match.arm.39
%loadN = load { i64, i64 }, ptr %alloca, align 8
%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.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
if.merge.55: ; preds = %if.else.54, %if.then.53
br label %match.merge.37
f32.unbox.81: ; preds = %match.arm.42
%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.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
float.merge.83: ; preds = %fN.unbox.82, %fN.unbox.81
%loadN = load double, ptr %allocaN, align 8
%callN = call { ptr, i64 } @float_to_string(ptr %0, double %loadN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.merge.94: ; preds = %dispatch.case.110, %dispatch.case.109, %dispatch.case.108, %dispatch.case.107, %dispatch.case.106, %dispatch.case.105, %dispatch.case.104, %dispatch.case.103, %dispatch.case.102, %dispatch.case.101, %dispatch.case.100, %dispatch.case.99, %dispatch.case.98, %dispatch.case.97, %dispatch.case.96, %dispatch.default.95
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.95: ; preds = %match.arm.43
store { ptr, i64 } { ptr @str.103, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.96: ; preds = %match.arm.43
%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.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.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.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.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.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.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.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.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.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.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.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.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.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.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
dispatch.merge.186: ; preds = %dispatch.case.188, %dispatch.default.187
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.187: ; preds = %match.arm.44
store { ptr, i64 } { ptr @str.104, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.186
dispatch.case.188: ; preds = %match.arm.44
%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
dispatch.merge.191: ; preds = %dispatch.case.193, %dispatch.default.192
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.192: ; preds = %match.arm.46
store { ptr, i64 } { ptr @str.105, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.191
dispatch.case.193: ; preds = %match.arm.46
%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
dispatch.merge.199: ; preds = %dispatch.case.204, %dispatch.case.203, %dispatch.case.202, %dispatch.case.201, %dispatch.default.200
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.200: ; preds = %match.arm.47
store { ptr, i64 } { ptr @str.106, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.199
dispatch.case.201: ; preds = %match.arm.47
%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.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.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.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
dispatch.merge.225: ; preds = %dispatch.case.228, %dispatch.case.227, %dispatch.default.226
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.226: ; preds = %match.arm.48
store { ptr, i64 } { ptr @str.107, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.225
dispatch.case.227: ; 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__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.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
dispatch.merge.239: ; preds = %dispatch.case.264, %dispatch.case.263, %dispatch.case.262, %dispatch.case.261, %dispatch.case.260, %dispatch.case.259, %dispatch.case.258, %dispatch.case.257, %dispatch.case.256, %dispatch.case.255, %dispatch.case.254, %dispatch.case.253, %dispatch.case.252, %dispatch.case.251, %dispatch.case.250, %dispatch.case.249, %dispatch.case.248, %dispatch.case.247, %dispatch.case.246, %dispatch.case.245, %dispatch.case.244, %dispatch.case.243, %dispatch.case.242, %dispatch.case.241, %dispatch.default.240
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.240: ; preds = %match.arm.49
store { ptr, i64 } { ptr @str.108, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.239
dispatch.case.241: ; preds = %match.arm.49
%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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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
}
; Function Attrs: nounwind
define internal { ptr, i64 } @build_format(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.109, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.0
while.hdr.0: ; preds = %if.merge.5, %entry
%load = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%icmp = icmp slt i64 %load, %len
br i1 %icmp, label %while.body.1, label %while.exit.2
while.body.1: ; preds = %while.hdr.0
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr i8, ptr %ig.data, i64 %loadN
%ig.val = load i8, ptr %ig.ptr, align 1
%cmp.ext = zext i8 %ig.val to i64
%icmpN = icmp eq i64 %cmp.ext, 123
br i1 %icmpN, label %if.then.3, label %if.else.4
while.exit.2: ; preds = %while.hdr.0
%loadN = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%icmpN = icmp slt i64 %loadN, %lenN
br i1 %icmpN, label %if.then.35, label %if.merge.36
if.then.3: ; preds = %while.body.1
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%icmpN = icmp slt i64 %add, %lenN
br i1 %icmpN, label %if.then.6, label %if.else.7
if.else.4: ; preds = %while.body.1
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.data19 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr20 = getelementptr i8, ptr %ig.data19, i64 %loadN
%ig.val21 = load i8, ptr %ig.ptr20, align 1
%cmp.ext22 = zext i8 %ig.val21 to i64
%icmpN = icmp eq i64 %cmp.ext22, 125
br i1 %icmpN, label %if.then.26, label %if.else.27
if.merge.5: ; preds = %if.merge.28, %if.merge.8
br label %while.hdr.0
if.then.6: ; preds = %if.then.3
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
%ig.data27 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr28 = getelementptr i8, ptr %ig.data27, i64 %addN
%ig.val29 = load i8, ptr %ig.ptr28, align 1
%cmp.ext30 = zext i8 %ig.val29 to i64
%icmpN = icmp eq i64 %cmp.ext30, 125
br i1 %icmpN, label %if.then.9, label %if.else.10
if.else.7: ; preds = %if.then.3
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.8
if.merge.8: ; preds = %if.merge.11, %if.else.7
br label %if.merge.5
if.then.9: ; preds = %if.then.6
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, %loadN
br i1 %icmpN, label %if.then.12, label %if.merge.13
if.else.10: ; preds = %if.then.6
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
%ig.data40 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr41 = getelementptr i8, ptr %ig.data40, i64 %addN
%ig.val42 = load i8, ptr %ig.ptr41, align 1
%cmp.ext43 = zext i8 %ig.val42 to i64
%icmpN = icmp eq i64 %cmp.ext43, 123
br i1 %icmpN, label %if.then.23, label %if.else.24
if.merge.11: ; preds = %if.merge.25, %if.merge.13
br label %if.merge.8
if.then.12: ; preds = %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.110, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.111, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, %loadN
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %sub)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.112, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.13
if.merge.13: ; preds = %if.then.12, %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %if.merge.11
if.then.23: ; preds = %if.else.10
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%addN = add i64 %subN, 1
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %addN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %if.merge.25
if.else.24: ; preds = %if.else.10
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.25
if.merge.25: ; preds = %if.else.24, %if.then.23
br label %if.merge.11
if.then.26: ; preds = %if.else.4
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%icmpN = icmp slt i64 %addN, %lenN
br i1 %icmpN, label %if.then.29, label %if.else.30
if.else.27: ; preds = %if.else.4
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.28
if.merge.28: ; preds = %if.merge.31, %if.else.27
br label %if.merge.5
if.then.29: ; preds = %if.then.26
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
%ig.data104 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr105 = getelementptr i8, ptr %ig.data104, i64 %addN
%ig.val106 = load i8, ptr %ig.ptr105, align 1
%cmp.ext107 = zext i8 %ig.val106 to i64
%icmpN = icmp eq i64 %cmp.ext107, 125
br i1 %icmpN, label %if.then.32, label %if.else.33
if.else.30: ; preds = %if.then.26
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.31
if.merge.31: ; preds = %if.merge.34, %if.else.30
br label %if.merge.28
if.then.32: ; preds = %if.then.29
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %loadN, %loadN
%addN = add i64 %subN, 1
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %addN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
store i64 %addN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
store i64 %loadN, ptr %allocaN, align 8
br label %if.merge.34
if.else.33: ; preds = %if.then.29
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
store i64 %addN, ptr %allocaN, align 8
br label %if.merge.34
if.merge.34: ; preds = %if.else.33, %if.then.32
br label %if.merge.31
if.then.35: ; preds = %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%lenN = extractvalue { ptr, i64 } %loadN, 1
%loadN = load i64, ptr %allocaN, align 8
%subN = sub i64 %lenN, %loadN
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %subN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.36
if.merge.36: ; preds = %if.then.35, %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
}
; Function Attrs: nounwind
declare float @lerp(ptr, float, float, float) #0
; Function Attrs: nounwind
declare void @Mat4.identity(ptr sret({ [16 x float] }), ptr) #0
; Function Attrs: nounwind
declare void @Mat4.zero(ptr sret({ [16 x float] }), ptr) #0
; Function Attrs: nounwind
declare void @Mat4.mul(ptr sret({ [16 x float] }), ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mat4.translate(ptr sret({ [16 x float] }), ptr, float, float, float) #0
; Function Attrs: nounwind
declare void @Mat4.scale(ptr sret({ [16 x float] }), ptr, float, float, float) #0
; Function Attrs: nounwind
declare void @Mat4.rotate_x(ptr sret({ [16 x float] }), ptr, float) #0
; Function Attrs: nounwind
declare void @Mat4.rotate_y(ptr sret({ [16 x float] }), ptr, float) #0
; Function Attrs: nounwind
declare void @Mat4.rotate_z(ptr sret({ [16 x float] }), ptr, float) #0
; Function Attrs: nounwind
declare void @Mat4.ortho(ptr sret({ [16 x float] }), ptr, float, float, float, float, float, float) #0
; Function Attrs: nounwind
declare void @Mat4.perspective(ptr sret({ [16 x float] }), ptr, float, float, float, float) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.zero(ptr) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.add(ptr, { float, float }, { float, float }) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.sub(ptr, { float, float }, { float, float }) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.scale(ptr, { float, float }, float) #0
; Function Attrs: nounwind
declare float @Vec2.dot(ptr, { float, float }, { float, float }) #0
; Function Attrs: nounwind
declare float @Vec2.length(ptr, { float, float }) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.normalize(ptr, { float, float }) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.lerp(ptr, { float, float }, { float, float }, float) #0
; Function Attrs: nounwind
declare float @Vec2.distance(ptr, { float, float }, { float, float }) #0
; Function Attrs: nounwind
declare { float, float } @Vec2.negate(ptr, { float, float }) #0
; Function Attrs: nounwind
declare i1 @Vec2.equals(ptr, { float, float }, { float, float }) #0
; Function Attrs: nounwind
define internal <3 x float> @vec3(ptr %0, float %1, float %2, float %3) #0 {
entry:
%alloca = alloca float, align 4
store float %1, ptr %alloca, align 4
%allocaN = alloca float, align 4
store float %2, ptr %allocaN, align 4
%allocaN = alloca float, align 4
store float %3, ptr %allocaN, align 4
%load = load float, ptr %alloca, align 4
%loadN = load float, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
%vi = insertelement <3 x float> undef, float %load, i32 0
%viN = insertelement <3 x float> %vi, float %loadN, i32 1
%viN = insertelement <3 x float> %viN, float %loadN, i32 2
ret <3 x float> %viN
}
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca { <3 x float> }, align 16
store { <3 x float> } { <3 x float> <float 1.000000e+00, float 3.000000e+00, float 2.000000e+00> }, ptr %alloca, align 16
%load = load { <3 x float> }, ptr %alloca, align 16
call void @print__ct_saf3b53dfd1590ed__pack_Vec3(ptr @__sx_default_context, { <3 x float> } %load)
%call = call <3 x float> @vec3(ptr @__sx_default_context, float 1.000000e+00, float 3.000000e+00, float 2.000000e+00)
%allocaN = alloca <3 x float>, align 16
store <3 x float> %call, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
call void @print__ct_s962c60eb1430613f__pack_vec_3_f32(ptr @__sx_default_context, <3 x float> %loadN)
%allocaN = alloca [5 x float], align 4
store [5 x float] [float 0.000000e+00, float 2.000000e+00, float 3.500000e+00, float 4.000000e+00, float 0.000000e+00], ptr %allocaN, align 4
%loadN = load [5 x float], ptr %allocaN, align 4
call void @print__ct_s549467baf058e667__pack_AR_5_f32(ptr @__sx_default_context, [5 x float] %loadN)
%allocaN = alloca { i32, i32 }, align 8
store { i32, i32 } { i32 42, i32 1 }, ptr %allocaN, align 4
%loadN = load { i32, i32 }, ptr %allocaN, align 4
call void @print__ct_sd91eb2e81c05dcd4__pack_Foo(ptr @__sx_default_context, { i32, i32 } %loadN)
%callN = call <3 x float> @vec3(ptr @__sx_default_context, float 3.000000e+00, float 2.000000e+00, float 1.000000e+00)
%allocaN = alloca <3 x float>, align 16
store <3 x float> %callN, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
%fadd = fadd <3 x float> %loadN, %loadN
%allocaN = alloca <3 x float>, align 16
store <3 x float> %fadd, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
call void @print__ct_s3038067ddd716595__pack_vec_3_f32(ptr @__sx_default_context, <3 x float> %loadN)
%loadN = load <3 x float>, ptr %allocaN, align 16
%ve = extractelement <3 x float> %loadN, i32 0
%allocaN = alloca float, align 4
store float %ve, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
call void @print__ct_sb50fffa856c31fe8__pack_f32(ptr @__sx_default_context, float %loadN)
%loadN = load <3 x float>, ptr %allocaN, align 16
%veN = extractelement <3 x float> %loadN, i32 1
%allocaN = alloca float, align 4
store float %veN, ptr %allocaN, align 4
%loadN = load float, ptr %allocaN, align 4
call void @print__ct_sd243afec30847211__pack_f32(ptr @__sx_default_context, float %loadN)
%loadN = load <3 x float>, ptr %allocaN, align 16
%fmul = fmul <3 x float> %loadN, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
%allocaN = alloca <3 x float>, align 16
store <3 x float> %fmul, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
call void @print__ct_s1e80f4429411a63__pack_vec_3_f32(ptr @__sx_default_context, <3 x float> %loadN)
%loadN = load <3 x float>, ptr %allocaN, align 16
%fneg = fneg <3 x float> %loadN
%allocaN = alloca <3 x float>, align 16
store <3 x float> %fneg, ptr %allocaN, align 16
%loadN = load <3 x float>, ptr %allocaN, align 16
call void @print__ct_sd428128013c58f8b__pack_vec_3_f32(ptr @__sx_default_context, <3 x float> %loadN)
%callN = call double @sqrt__f64(double 9.000000e+00)
%allocaN = alloca double, align 8
store double %callN, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
call void @print__ct_sa2a846ee0ce9045d__pack_f64(ptr @__sx_default_context, double %loadN)
%ei.tmp = alloca { i64, [4 x i8] }, align 8
%ei.tagp = getelementptr inbounds { i64, [4 x i8] }, ptr %ei.tmp, i32 0, i32 0
store i64 1, ptr %ei.tagp, align 8
%ei.pp = getelementptr inbounds { i64, [4 x i8] }, ptr %ei.tmp, i32 0, i32 1
store float 5.000000e-01, ptr %ei.pp, align 4
%ei.val = load { i64, [4 x i8] }, ptr %ei.tmp, align 8
%allocaN = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %ei.val, ptr %allocaN, align 8
%loadN = load { i64, [4 x i8] }, ptr %allocaN, align 8
call void @print__ct_sbc6305862a3a863d__pack_Sx__f32(ptr @__sx_default_context, { i64, [4 x i8] } %loadN)
call void @print__ct_sbc6305862a3a863d__pack_s64(ptr @__sx_default_context, i64 4)
call void @print__ct_sbc6305862a3a863d__pack_s64(ptr @__sx_default_context, i64 16)
call void @print__ct_sbc6305862a3a863d__pack_s64(ptr @__sx_default_context, i64 8)
ret i32 0
}
; Function Attrs: nounwind
define internal ptr @__thunk_CAllocator_Allocator_alloc(ptr %0, ptr %1, i64 %2) #0 {
entry:
%call = call ptr @CAllocator.alloc(ptr %0, ptr %1, i64 %2)
ret ptr %call
}
; Function Attrs: nounwind
define internal void @__thunk_CAllocator_Allocator_dealloc(ptr %0, ptr %1, ptr %2) #0 {
entry:
call void @CAllocator.dealloc(ptr %0, ptr %1, ptr %2)
ret void
}
; Function Attrs: nounwind
define internal void @print__ct_saf3b53dfd1590ed__pack_Vec3(ptr %0, { <3 x float> } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.124, i64 7 }, ptr %alloca, align 8
%allocaN = alloca { <3 x float> }, align 16
store { <3 x float> } %1, ptr %allocaN, align 16
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load { <3 x float> }, ptr %allocaN, align 16
%ba.tmp = alloca { <3 x float> }, align 16
store { <3 x float> } %load, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 42, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.125, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 4)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { <3 x float> }, ptr %allocaN, align 16
%ba.tmp12 = alloca { <3 x float> }, align 16
store { <3 x float> } %loadN, ptr %ba.tmp12, align 16
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 42, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 6, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.126, i64 7 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_s962c60eb1430613f__pack_vec_3_f32(ptr %0, <3 x float> %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 7 }, ptr %alloca, align 8
%allocaN = alloca <3 x float>, align 16
store <3 x float> %1, ptr %allocaN, align 16
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load <3 x float>, ptr %allocaN, align 16
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %load, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.128, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 4)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load <3 x float>, ptr %allocaN, align 16
%ba.tmp12 = alloca <3 x float>, align 16
store <3 x float> %loadN, ptr %ba.tmp12, align 16
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 6, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.129, i64 7 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_s549467baf058e667__pack_AR_5_f32(ptr %0, [5 x float] %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.130, i64 9 }, ptr %alloca, align 8
%allocaN = alloca [5 x float], align 4
store [5 x float] %1, ptr %allocaN, align 4
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load [5 x float], ptr %allocaN, align 4
%ba.tmp = alloca [5 x float], align 4
store [5 x float] %load, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 59, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.131, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 6)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [5 x float], ptr %allocaN, align 4
%ba.tmp12 = alloca [5 x float], align 4
store [5 x float] %loadN, ptr %ba.tmp12, align 4
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 59, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 8, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_2(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.132, i64 9 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sd91eb2e81c05dcd4__pack_Foo(ptr %0, { i32, i32 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.133, i64 9 }, ptr %alloca, align 8
%allocaN = alloca { i32, i32 }, align 8
store { i32, i32 } %1, ptr %allocaN, align 4
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load { i32, i32 }, ptr %allocaN, align 4
%ba.tmp = alloca { i32, i32 }, align 8
store { i32, i32 } %load, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 44, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.134, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 6)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { i32, i32 }, ptr %allocaN, align 4
%ba.tmp12 = alloca { i32, i32 }, align 8
store { i32, i32 } %loadN, ptr %ba.tmp12, align 4
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 44, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 8, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_3(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.135, i64 9 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_s3038067ddd716595__pack_vec_3_f32(ptr %0, <3 x float> %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.136, i64 8 }, ptr %alloca, align 8
%allocaN = alloca <3 x float>, align 16
store <3 x float> %1, ptr %allocaN, align 16
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load <3 x float>, ptr %allocaN, align 16
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %load, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.137, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 5)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load <3 x float>, ptr %allocaN, align 16
%ba.tmp12 = alloca <3 x float>, align 16
store <3 x float> %loadN, ptr %ba.tmp12, align 16
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 7, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_4(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.138, i64 8 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sb50fffa856c31fe8__pack_f32(ptr %0, float %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.139, i64 9 }, ptr %alloca, align 8
%allocaN = alloca float, align 4
store float %1, ptr %allocaN, align 4
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load float, ptr %allocaN, align 4
%fNi32 = bitcast float %load to i32
%zN = zext i32 %fNi32 to i64
%ba.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.140, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 6)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load float, ptr %allocaN, align 4
%fNi3212 = bitcast float %loadN to i32
%zN = zext i32 %fNi3212 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 8, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_5(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.141, i64 9 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sd243afec30847211__pack_f32(ptr %0, float %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.142, i64 10 }, ptr %alloca, align 8
%allocaN = alloca float, align 4
store float %1, ptr %allocaN, align 4
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load float, ptr %allocaN, align 4
%fNi32 = bitcast float %load to i32
%zN = zext i32 %fNi32 to i64
%ba.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.143, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 7)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load float, ptr %allocaN, align 4
%fNi3212 = bitcast float %loadN to i32
%zN = zext i32 %fNi3212 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 9, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_6(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.144, i64 10 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_s1e80f4429411a63__pack_vec_3_f32(ptr %0, <3 x float> %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 11 }, ptr %alloca, align 8
%allocaN = alloca <3 x float>, align 16
store <3 x float> %1, ptr %allocaN, align 16
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load <3 x float>, ptr %allocaN, align 16
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %load, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.146, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 8)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load <3 x float>, ptr %allocaN, align 16
%ba.tmp12 = alloca <3 x float>, align 16
store <3 x float> %loadN, ptr %ba.tmp12, align 16
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 10, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_7(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.147, i64 11 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sd428128013c58f8b__pack_vec_3_f32(ptr %0, <3 x float> %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.148, i64 8 }, ptr %alloca, align 8
%allocaN = alloca <3 x float>, align 16
store <3 x float> %1, ptr %allocaN, align 16
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load <3 x float>, ptr %allocaN, align 16
%ba.tmp = alloca <3 x float>, align 16
store <3 x float> %load, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.149, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 5)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load <3 x float>, ptr %allocaN, align 16
%ba.tmp12 = alloca <3 x float>, align 16
store <3 x float> %loadN, ptr %ba.tmp12, align 16
%ba.p2i13 = ptrtoint ptr %ba.tmp12 to i64
%ba.val14 = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i13, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val14)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 7, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_8(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.150, i64 8 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal double @sqrt__f64(double %0) #0 {
entry:
%alloca = alloca double, align 8
store double %0, ptr %alloca, align 8
%sqrt = call double @sqrt(double %0)
ret double %sqrt
}
; Function Attrs: nounwind
define internal void @print__ct_sa2a846ee0ce9045d__pack_f64(ptr %0, double %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.151, i64 12 }, ptr %alloca, align 8
%allocaN = alloca double, align 8
store double %1, ptr %allocaN, align 8
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load double, ptr %allocaN, align 8
%dNi = bitcast double %load to i64
%ba.val = insertvalue { i64, i64 } { i64 11, i64 undef }, i64 %dNi, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.152, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 9)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load double, ptr %allocaN, align 8
%dNi12 = bitcast double %loadN to i64
%ba.val13 = insertvalue { i64, i64 } { i64 11, i64 undef }, i64 %dNi12, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val13)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 11, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_9(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.153, i64 12 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sbc6305862a3a863d__pack_Sx__f32(ptr %0, { i64, [4 x i8] } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.154, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %1, ptr %allocaN, align 8
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load { i64, [4 x i8] }, ptr %allocaN, align 8
%ba.tmp = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %load, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 63, i64 undef }, i64 %ba.p2i, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.155, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { i64, [4 x i8] }, ptr %allocaN, align 8
%ba.tmp9 = alloca { i64, [4 x i8] }, align 8
store { i64, [4 x i8] } %loadN, ptr %ba.tmp9, align 8
%ba.p2i10 = ptrtoint ptr %ba.tmp9 to i64
%ba.val11 = insertvalue { i64, i64 } { i64 63, i64 undef }, i64 %ba.p2i10, 1
%call = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val11)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 2, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_10(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.156, i64 3 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_sbc6305862a3a863d__pack_s64(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.157, i64 3 }, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %allocaN, align 8
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load i64, ptr %allocaN, align 8
%ba.val = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %load, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.158, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ba.val9 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%call = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val9)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 2, i64 1)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_11(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.159, i64 3 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %1) #0 {
entry:
%alloca = alloca { { ptr, i64 }, i32, i32, { ptr, i64 } }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
%ba.tmp26 = alloca { ptr, i64 }, align 8
store { { ptr, i64 }, i32, i32, { ptr, i64 } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.160, i64 15 }, { ptr, i64 } { ptr @str.161, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.111
while.hdr.111: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.112, label %while.exit.113
while.body.112: ; preds = %while.hdr.111
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.114, label %if.merge.115
while.exit.113: ; preds = %while.hdr.111
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.162, i64 1 })
ret { ptr, i64 } %callN
if.then.114: ; preds = %while.body.112
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.163, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.115
if.merge.115: ; preds = %if.then.114, %while.body.112
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [4 x { ptr, i64 }], ptr @field_names, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.167, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
i64 2, label %fv.case20
i64 3, label %fv.case24
]
fv.merge: ; preds = %fv.default, %fv.case24, %fv.case20, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ %fv.val23, %fv.case20 ], [ %fv.val28, %fv.case24 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.111
fv.default: ; preds = %if.merge.115
br label %fv.merge
fv.case: ; preds = %if.merge.115
%fv.field = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 0
store { ptr, i64 } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.115
%fv.field18 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 1
%sN = sext i32 %fv.field18 to i64
%fv.val19 = insertvalue { i64, i64 } { i64 4, i64 undef }, i64 %sN, 1
br label %fv.merge
fv.case20: ; preds = %if.merge.115
%fv.field21 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 2
%sN = sext i32 %fv.field21 to i64
%fv.val23 = insertvalue { i64, i64 } { i64 4, i64 undef }, i64 %sN, 1
br label %fv.merge
fv.case24: ; preds = %if.merge.115
%fv.field25 = extractvalue { { ptr, i64 }, i32, i32, { ptr, i64 } } %loadN, 3
store { ptr, i64 } %fv.field25, ptr %ba.tmp26, align 8
%ba.p2i27 = ptrtoint ptr %ba.tmp26 to i64
%fv.val28 = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i27, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %1) #0 {
entry:
%alloca = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.168, i64 9 }, { ptr, i64 } { ptr @str.169, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.116
while.hdr.116: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.117, label %while.exit.118
while.body.117: ; preds = %while.hdr.116
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.119, label %if.merge.120
while.exit.118: ; preds = %while.hdr.116
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.170, i64 1 })
ret { ptr, i64 } %callN
if.then.119: ; preds = %while.body.117
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.171, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.120
if.merge.120: ; preds = %if.then.119, %while.body.117
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [3 x { ptr, i64 }], ptr @field_names.175, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.176, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, ptr, ptr }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
i64 2, label %fv.case21
]
fv.merge: ; preds = %fv.default, %fv.case21, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val20, %fv.case17 ], [ %fv.val24, %fv.case21 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.116
fv.default: ; preds = %if.merge.120
br label %fv.merge
fv.case: ; preds = %if.merge.120
%fv.field = extractvalue { ptr, ptr, ptr } %loadN, 0
%pNi = ptrtoint ptr %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 18, i64 undef }, i64 %pNi, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.120
%fv.field18 = extractvalue { ptr, ptr, ptr } %loadN, 1
%pNi19 = ptrtoint ptr %fv.field18 to i64
%fv.val20 = insertvalue { i64, i64 } { i64 18, i64 undef }, i64 %pNi19, 1
br label %fv.merge
fv.case21: ; preds = %if.merge.120
%fv.field22 = extractvalue { ptr, ptr, ptr } %loadN, 2
%pNi23 = ptrtoint ptr %fv.field22 to i64
%fv.val24 = insertvalue { i64, i64 } { i64 18, i64 undef }, i64 %pNi23, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %1) #0 {
entry:
%alloca = alloca {}, align 8
store {} %1, ptr %alloca, align 1
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.177, i64 10 }, { ptr, i64 } { ptr @str.178, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.121
while.hdr.121: ; preds = %if.merge.125, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 0
br i1 %icmp, label %while.body.122, label %while.exit.123
while.body.122: ; preds = %while.hdr.121
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.124, label %if.merge.125
while.exit.123: ; preds = %while.hdr.121
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.179, i64 1 })
ret { ptr, i64 } %callN
if.then.124: ; preds = %while.body.122
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.180, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.125
if.merge.125: ; preds = %if.then.124, %while.body.122
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [0 x { ptr, i64 }], ptr @field_names.181, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.182, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load {}, ptr %alloca, align 1
%loadN = load i64, ptr %allocaN, align 8
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } { i64 17, i64 0 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.121
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %1) #0 {
entry:
%alloca = alloca { i64 }, align 8
store { i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.183, i64 3 }, { ptr, i64 } { ptr @str.184, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.126
while.hdr.126: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.127, label %while.exit.128
while.body.127: ; preds = %while.hdr.126
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.129, label %if.merge.130
while.exit.128: ; preds = %while.hdr.126
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.185, i64 1 })
ret { ptr, i64 } %callN
if.then.129: ; preds = %while.body.127
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.186, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.130
if.merge.130: ; preds = %if.then.129, %while.body.127
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [1 x { ptr, i64 }], ptr @field_names.188, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.189, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
]
fv.merge: ; preds = %fv.default, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.126
fv.default: ; preds = %if.merge.130
br label %fv.merge
fv.case: ; preds = %if.merge.130
%fv.field = extractvalue { i64 } %loadN, 0
%fv.val = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 10 }, { ptr, i64 } { ptr @str.191, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.131
while.hdr.131: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.132, label %while.exit.133
while.body.132: ; preds = %while.hdr.131
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.134, label %if.merge.135
while.exit.133: ; preds = %while.hdr.131
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.192, i64 1 })
ret { ptr, i64 } %callN
if.then.134: ; preds = %while.body.132
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.193, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.135
if.merge.135: ; preds = %if.then.134, %while.body.132
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.196, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.197, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
]
fv.merge: ; preds = %fv.default, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.131
fv.default: ; preds = %if.merge.135
br label %fv.merge
fv.case: ; preds = %if.merge.135
%fv.field = extractvalue { ptr, i64 } %loadN, 0
%pNi = ptrtoint ptr %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 26, i64 undef }, i64 %pNi, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.135
%fv.field18 = extractvalue { ptr, i64 } %loadN, 1
%fv.val19 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field18, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %1) #0 {
entry:
%alloca = alloca { ptr, i64, { ptr, ptr, ptr } }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { ptr, i64, { ptr, ptr, ptr } } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.198, i64 5 }, { ptr, i64 } { ptr @str.199, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.136
while.hdr.136: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.137, label %while.exit.138
while.body.137: ; preds = %while.hdr.136
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.139, label %if.merge.140
while.exit.138: ; preds = %while.hdr.136
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.200, i64 1 })
ret { ptr, i64 } %callN
if.then.139: ; preds = %while.body.137
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.201, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.140
if.merge.140: ; preds = %if.then.139, %while.body.137
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [3 x { ptr, i64 }], ptr @field_names.205, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.206, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64, { ptr, ptr, ptr } }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
i64 2, label %fv.case20
]
fv.merge: ; preds = %fv.default, %fv.case20, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ %fv.val22, %fv.case20 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.136
fv.default: ; preds = %if.merge.140
br label %fv.merge
fv.case: ; preds = %if.merge.140
%fv.field = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 0
%pNi = ptrtoint ptr %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 26, i64 undef }, i64 %pNi, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.140
%fv.field18 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 1
%fv.val19 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field18, 1
br label %fv.merge
fv.case20: ; preds = %if.merge.140
%fv.field21 = extractvalue { ptr, i64, { ptr, ptr, ptr } } %loadN, 2
store { ptr, ptr, ptr } %fv.field21, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val22 = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64, i64 }, align 8
store { ptr, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.207, i64 8 }, { ptr, i64 } { ptr @str.208, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.141
while.hdr.141: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.142, label %while.exit.143
while.body.142: ; preds = %while.hdr.141
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.144, label %if.merge.145
while.exit.143: ; preds = %while.hdr.141
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.209, i64 1 })
ret { ptr, i64 } %callN
if.then.144: ; preds = %while.body.142
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.210, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.145
if.merge.145: ; preds = %if.then.144, %while.body.142
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [3 x { ptr, i64 }], ptr @field_names.214, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.215, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
i64 2, label %fv.case20
]
fv.merge: ; preds = %fv.default, %fv.case20, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ %fv.val22, %fv.case20 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.141
fv.default: ; preds = %if.merge.145
br label %fv.merge
fv.case: ; preds = %if.merge.145
%fv.field = extractvalue { ptr, i64, i64 } %loadN, 0
%pNi = ptrtoint ptr %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 29, i64 undef }, i64 %pNi, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.145
%fv.field18 = extractvalue { ptr, i64, i64 } %loadN, 1
%fv.val19 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field18, 1
br label %fv.merge
fv.case20: ; preds = %if.merge.145
%fv.field21 = extractvalue { ptr, i64, i64 } %loadN, 2
%fv.val22 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field21, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, i64, i64, i64 }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, i64, i64, i64 } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.216, i64 17 }, { ptr, i64 } { ptr @str.217, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.146
while.hdr.146: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.147, label %while.exit.148
while.body.147: ; preds = %while.hdr.146
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.149, label %if.merge.150
while.exit.148: ; preds = %while.hdr.146
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.218, i64 1 })
ret { ptr, i64 } %callN
if.then.149: ; preds = %while.body.147
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.219, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.150
if.merge.150: ; preds = %if.then.149, %while.body.147
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [4 x { ptr, i64 }], ptr @field_names.224, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.225, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
i64 2, label %fv.case20
i64 3, label %fv.case23
]
fv.merge: ; preds = %fv.default, %fv.case23, %fv.case20, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ %fv.val22, %fv.case20 ], [ %fv.val25, %fv.case23 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.146
fv.default: ; preds = %if.merge.150
br label %fv.merge
fv.case: ; preds = %if.merge.150
%fv.field = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 0
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.150
%fv.field18 = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 1
%fv.val19 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field18, 1
br label %fv.merge
fv.case20: ; preds = %if.merge.150
%fv.field21 = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 2
%fv.val22 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field21, 1
br label %fv.merge
fv.case23: ; preds = %if.merge.150
%fv.field24 = extractvalue { { ptr, ptr, ptr }, i64, i64, i64 } %loadN, 3
%fv.val25 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %fv.field24, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %1) #0 {
entry:
%alloca = alloca { { ptr, ptr, ptr }, ptr }, align 8
%ba.tmp = alloca { ptr, ptr, ptr }, align 8
store { { ptr, ptr, ptr }, ptr } %1, ptr %alloca, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.226, i64 7 }, { ptr, i64 } { ptr @str.227, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.151
while.hdr.151: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.152, label %while.exit.153
while.body.152: ; preds = %while.hdr.151
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.154, label %if.merge.155
while.exit.153: ; preds = %while.hdr.151
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.228, i64 1 })
ret { ptr, i64 } %callN
if.then.154: ; preds = %while.body.152
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.229, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.155
if.merge.155: ; preds = %if.then.154, %while.body.152
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.232, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.233, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { { ptr, ptr, ptr }, ptr }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
]
fv.merge: ; preds = %fv.default, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val19, %fv.case17 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.151
fv.default: ; preds = %if.merge.155
br label %fv.merge
fv.case: ; preds = %if.merge.155
%fv.field = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 0
store { ptr, ptr, ptr } %fv.field, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 20, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.155
%fv.field18 = extractvalue { { ptr, ptr, ptr }, ptr } %loadN, 1
%pNi = ptrtoint ptr %fv.field18 to i64
%fv.val19 = insertvalue { i64, i64 } { i64 18, i64 undef }, i64 %pNi, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Mat4(ptr %0, { [16 x float] } %1) #0 {
entry:
%alloca = alloca { [16 x float] }, align 8
%ba.tmp = alloca [16 x float], align 4
store { [16 x float] } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.234, i64 4 }, { ptr, i64 } { ptr @str.235, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.156
while.hdr.156: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.157, label %while.exit.158
while.body.157: ; preds = %while.hdr.156
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.159, label %if.merge.160
while.exit.158: ; preds = %while.hdr.156
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.236, i64 1 })
ret { ptr, i64 } %callN
if.then.159: ; preds = %while.body.157
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.237, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.160
if.merge.160: ; preds = %if.then.159, %while.body.157
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [1 x { ptr, i64 }], ptr @field_names.239, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.240, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { [16 x float] }, ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
]
fv.merge: ; preds = %fv.default, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.156
fv.default: ; preds = %if.merge.160
br label %fv.merge
fv.case: ; preds = %if.merge.160
%fv.field = extractvalue { [16 x float] } %loadN, 0
store [16 x float] %fv.field, ptr %ba.tmp, align 4
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 37, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Vec2(ptr %0, { float, float } %1) #0 {
entry:
%alloca = alloca { float, float }, align 8
store { float, float } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.241, i64 4 }, { ptr, i64 } { ptr @str.242, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.161
while.hdr.161: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.162, label %while.exit.163
while.body.162: ; preds = %while.hdr.161
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.164, label %if.merge.165
while.exit.163: ; preds = %while.hdr.161
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.243, i64 1 })
ret { ptr, i64 } %callN
if.then.164: ; preds = %while.body.162
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.244, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.165
if.merge.165: ; preds = %if.then.164, %while.body.162
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.247, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.248, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { float, float }, ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
]
fv.merge: ; preds = %fv.default, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val21, %fv.case17 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.161
fv.default: ; preds = %if.merge.165
br label %fv.merge
fv.case: ; preds = %if.merge.165
%fv.field = extractvalue { float, float } %loadN, 0
%fNi32 = bitcast float %fv.field to i32
%zN = zext i32 %fNi32 to i64
%fv.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.165
%fv.field18 = extractvalue { float, float } %loadN, 1
%fNi3219 = bitcast float %fv.field18 to i32
%zN = zext i32 %fNi3219 to i64
%fv.val21 = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Vec__3__f32(ptr %0, { <3 x float> } %1) #0 {
entry:
%alloca = alloca { <3 x float> }, align 16
%ba.tmp = alloca <3 x float>, align 16
store { <3 x float> } %1, ptr %alloca, align 16
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.249, i64 11 }, { ptr, i64 } { ptr @str.250, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.166
while.hdr.166: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.167, label %while.exit.168
while.body.167: ; preds = %while.hdr.166
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.169, label %if.merge.170
while.exit.168: ; preds = %while.hdr.166
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.251, i64 1 })
ret { ptr, i64 } %callN
if.then.169: ; preds = %while.body.167
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.252, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.170
if.merge.170: ; preds = %if.then.169, %while.body.167
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [1 x { ptr, i64 }], ptr @field_names.254, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.255, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { <3 x float> }, ptr %alloca, align 16
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
]
fv.merge: ; preds = %fv.default, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.166
fv.default: ; preds = %if.merge.170
br label %fv.merge
fv.case: ; preds = %if.merge.170
%fv.field = extractvalue { <3 x float> } %loadN, 0
store <3 x float> %fv.field, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Vec3(ptr %0, { <3 x float> } %1) #0 {
entry:
%alloca = alloca { <3 x float> }, align 16
%ba.tmp = alloca <3 x float>, align 16
store { <3 x float> } %1, ptr %alloca, align 16
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.256, i64 4 }, { ptr, i64 } { ptr @str.257, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.171
while.hdr.171: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.172, label %while.exit.173
while.body.172: ; preds = %while.hdr.171
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.174, label %if.merge.175
while.exit.173: ; preds = %while.hdr.171
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.258, i64 1 })
ret { ptr, i64 } %callN
if.then.174: ; preds = %while.body.172
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.259, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.175
if.merge.175: ; preds = %if.then.174, %while.body.172
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [1 x { ptr, i64 }], ptr @field_names.261, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.262, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { <3 x float> }, ptr %alloca, align 16
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
]
fv.merge: ; preds = %fv.default, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.171
fv.default: ; preds = %if.merge.175
br label %fv.merge
fv.case: ; preds = %if.merge.175
%fv.field = extractvalue { <3 x float> } %loadN, 0
store <3 x float> %fv.field, ptr %ba.tmp, align 16
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%fv.val = insertvalue { i64, i64 } { i64 40, i64 undef }, i64 %ba.p2i, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Complex__u32(ptr %0, { i32, i32 } %1) #0 {
entry:
%alloca = alloca { i32, i32 }, align 8
store { i32, i32 } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.263, i64 12 }, { ptr, i64 } { ptr @str.264, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.176
while.hdr.176: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.177, label %while.exit.178
while.body.177: ; preds = %while.hdr.176
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.179, label %if.merge.180
while.exit.178: ; preds = %while.hdr.176
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.265, i64 1 })
ret { ptr, i64 } %callN
if.then.179: ; preds = %while.body.177
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.266, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.180
if.merge.180: ; preds = %if.then.179, %while.body.177
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.269, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.270, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { i32, i32 }, ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
]
fv.merge: ; preds = %fv.default, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val20, %fv.case17 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.176
fv.default: ; preds = %if.merge.180
br label %fv.merge
fv.case: ; preds = %if.merge.180
%fv.field = extractvalue { i32, i32 } %loadN, 0
%zN = zext i32 %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 8, i64 undef }, i64 %zN, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.180
%fv.field18 = extractvalue { i32, i32 } %loadN, 1
%zN = zext i32 %fv.field18 to i64
%fv.val20 = insertvalue { i64, i64 } { i64 8, i64 undef }, i64 %zN, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @struct_to_string__Foo(ptr %0, { i32, i32 } %1) #0 {
entry:
%alloca = alloca { i32, i32 }, align 8
store { i32, i32 } %1, ptr %alloca, align 4
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.271, i64 3 }, { ptr, i64 } { ptr @str.272, i64 1 })
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.181
while.hdr.181: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.182, label %while.exit.183
while.body.182: ; preds = %while.hdr.181
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.184, label %if.merge.185
while.exit.183: ; preds = %while.hdr.181
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.273, i64 1 })
ret { ptr, i64 } %callN
if.then.184: ; preds = %while.body.182
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.274, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.185
if.merge.185: ; preds = %if.then.184, %while.body.182
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.277, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %fn.load)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.278, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { i32, i32 }, ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case17
]
fv.merge: ; preds = %fv.default, %fv.case17, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val20, %fv.case17 ], [ undef, %fv.default ]
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %fv.phi)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.181
fv.default: ; preds = %if.merge.185
br label %fv.merge
fv.case: ; preds = %if.merge.185
%fv.field = extractvalue { i32, i32 } %loadN, 0
%zN = zext i32 %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 8, i64 undef }, i64 %zN, 1
br label %fv.merge
fv.case17: ; preds = %if.merge.185
%fv.field18 = extractvalue { i32, i32 } %loadN, 1
%zN = zext i32 %fv.field18 to i64
%fv.val20 = insertvalue { i64, i64 } { i64 8, i64 undef }, i64 %zN, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @enum_to_string__Sx__f32(ptr %0, { i64, [4 x i8] } %1) #0 {
entry:
%alloca = alloca { i64, [4 x i8] }, align 8
%fv.utmp = alloca { i64, [4 x i8] }, align 8
%fv.utmp7 = alloca { i64, [4 x i8] }, align 8
%allocaN = alloca { i64, i64 }, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { i64, [4 x i8] } %1, ptr %alloca, align 8
%load = load { i64, [4 x i8] }, ptr %alloca, align 8
%etag = extractvalue { i64, [4 x i8] } %load, 0
%allocaN = alloca i64, align 8
store i64 %etag, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%fn.gep = getelementptr inbounds [2 x { ptr, i64 }], ptr @field_names.282, i64 0, i64 %loadN
%fn.load = load { ptr, i64 }, ptr %fn.gep, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.279, i64 1 }, { ptr, i64 } %fn.load)
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { i64, [4 x i8] }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
switch i64 %loadN, label %fv.default [
i64 0, label %fv.case
i64 1, label %fv.case6
]
if.then.189: ; preds = %fv.merge
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.284, i64 1 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.283, i64 1 }, { ptr, i64 } %callN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.190
if.merge.190: ; preds = %if.then.189, %fv.merge
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
ret { ptr, i64 } %loadN
fv.merge: ; preds = %fv.default, %fv.case6, %fv.case
%fv.phi = phi { i64, i64 } [ %fv.val, %fv.case ], [ %fv.val10, %fv.case6 ], [ undef, %fv.default ]
store { i64, i64 } %fv.phi, ptr %allocaN, align 8
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %loadN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%icmp = icmp sgt i64 %len, 0
br i1 %icmp, label %if.then.189, label %if.merge.190
fv.default: ; preds = %entry
br label %fv.merge
fv.case: ; preds = %entry
store { i64, [4 x i8] } %loadN, ptr %fv.utmp, align 8
%fv.pp = getelementptr inbounds { i64, [4 x i8] }, ptr %fv.utmp, i32 0, i32 1
%fv.field = load i32, ptr %fv.pp, align 4
%sN = sext i32 %fv.field to i64
%fv.val = insertvalue { i64, i64 } { i64 4, i64 undef }, i64 %sN, 1
br label %fv.merge
fv.case6: ; preds = %entry
store { i64, [4 x i8] } %loadN, ptr %fv.utmp7, align 8
%fv.pp8 = getelementptr inbounds { i64, [4 x i8] }, ptr %fv.utmp7, i32 0, i32 1
%fv.field9 = load float, ptr %fv.pp8, align 4
%fNi32 = bitcast float %fv.field9 to i32
%zN = zext i32 %fNi32 to i64
%fv.val10 = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
br label %fv.merge
}
; Function Attrs: nounwind
define internal { ptr, i64 } @vector_to_string__vec_3_f32(ptr %0, <3 x float> %1) #0 {
entry:
%alloca = alloca <3 x float>, align 16
store <3 x float> %1, ptr %alloca, align 16
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.285, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.194
while.hdr.194: ; preds = %if.merge.198, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.195, label %while.exit.196
while.body.195: ; preds = %while.hdr.194
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.197, label %if.merge.198
while.exit.196: ; preds = %while.hdr.194
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.286, i64 1 })
ret { ptr, i64 } %call
if.then.197: ; preds = %while.body.195
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.287, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.198
if.merge.198: ; preds = %if.then.197, %while.body.195
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load <3 x float>, ptr %alloca, align 16
%loadN = load i64, ptr %allocaN, align 8
%ca.tr = trunc i64 %loadN to i32
%ve = extractelement <3 x float> %loadN, i32 %ca.tr
%fNi32 = bitcast float %ve to i32
%zN = zext i32 %fNi32 to i64
%ba.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.194
}
; Function Attrs: nounwind
define internal { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.288, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.205
while.hdr.205: ; preds = %if.merge.209, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.206, label %while.exit.207
while.body.206: ; preds = %while.hdr.205
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.208, label %if.merge.209
while.exit.207: ; preds = %while.hdr.205
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.289, i64 1 })
ret { ptr, i64 } %call
if.then.208: ; preds = %while.body.206
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.290, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.209
if.merge.209: ; preds = %if.then.208, %while.body.206
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [4 x i64], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
store [4 x i64] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [4 x i64], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load i64, ptr %ig.ptr, align 8
%ba.val = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %ig.val, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.205
}
; Function Attrs: nounwind
define internal { ptr, i64 } @array_to_string__AR_16_f32(ptr %0, [16 x float] %1) #0 {
entry:
%alloca = alloca [16 x float], align 4
%ig.tmp = alloca [16 x float], align 4
store [16 x float] %1, ptr %alloca, align 4
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.291, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.210
while.hdr.210: ; preds = %if.merge.214, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 16
br i1 %icmp, label %while.body.211, label %while.exit.212
while.body.211: ; preds = %while.hdr.210
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.213, label %if.merge.214
while.exit.212: ; preds = %while.hdr.210
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.292, i64 1 })
ret { ptr, i64 } %call
if.then.213: ; preds = %while.body.211
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.293, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.214
if.merge.214: ; preds = %if.then.213, %while.body.211
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [16 x float], ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
store [16 x float] %loadN, ptr %ig.tmp, align 4
%ig.ptr = getelementptr [16 x float], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load float, ptr %ig.ptr, align 4
%fNi32 = bitcast float %ig.val to i32
%zN = zext i32 %fNi32 to i64
%ba.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.210
}
; Function Attrs: nounwind
define internal { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %1) #0 {
entry:
%alloca = alloca [1 x { i64, i64 }], align 8
%ig.tmp = alloca [1 x { i64, i64 }], align 8
%ba.tmp = alloca { i64, i64 }, align 8
store [1 x { i64, i64 }] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.294, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.215
while.hdr.215: ; preds = %if.merge.219, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.216, label %while.exit.217
while.body.216: ; preds = %while.hdr.215
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.218, label %if.merge.219
while.exit.217: ; preds = %while.hdr.215
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.295, i64 1 })
ret { ptr, i64 } %call
if.then.218: ; preds = %while.body.216
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.296, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.219
if.merge.219: ; preds = %if.then.218, %while.body.216
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [1 x { i64, i64 }], ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
store [1 x { i64, i64 }] %loadN, ptr %ig.tmp, align 8
%ig.ptr = getelementptr [1 x { i64, i64 }], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.215
}
; Function Attrs: nounwind
define internal { ptr, i64 } @array_to_string__AR_5_f32(ptr %0, [5 x float] %1) #0 {
entry:
%alloca = alloca [5 x float], align 4
%ig.tmp = alloca [5 x float], align 4
store [5 x float] %1, ptr %alloca, align 4
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.297, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.220
while.hdr.220: ; preds = %if.merge.224, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 5
br i1 %icmp, label %while.body.221, label %while.exit.222
while.body.221: ; preds = %while.hdr.220
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.223, label %if.merge.224
while.exit.222: ; preds = %while.hdr.220
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.298, i64 1 })
ret { ptr, i64 } %call
if.then.223: ; preds = %while.body.221
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.299, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.224
if.merge.224: ; preds = %if.then.223, %while.body.221
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load [5 x float], ptr %alloca, align 4
%loadN = load i64, ptr %allocaN, align 8
store [5 x float] %loadN, ptr %ig.tmp, align 4
%ig.ptr = getelementptr [5 x float], ptr %ig.tmp, i64 0, i64 %loadN
%ig.val = load float, ptr %ig.ptr, align 4
%fNi32 = bitcast float %ig.val to i32
%zN = zext i32 %fNi32 to i64
%ba.val = insertvalue { i64, i64 } { i64 10, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.220
}
; Function Attrs: nounwind
define internal { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.300, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.229
while.hdr.229: ; preds = %if.merge.233, %entry
%load = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%icmp = icmp slt i64 %load, %len
br i1 %icmp, label %while.body.230, label %while.exit.231
while.body.230: ; preds = %while.hdr.229
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.232, label %if.merge.233
while.exit.231: ; preds = %while.hdr.229
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.301, i64 1 })
ret { ptr, i64 } %call
if.then.232: ; preds = %while.body.230
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.302, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.233
if.merge.233: ; preds = %if.then.232, %while.body.230
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { ptr, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { ptr, i64 }, ptr %ig.ptr, align 8
store { ptr, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 12, i64 undef }, i64 %ba.p2i, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.229
}
; Function Attrs: nounwind
define internal { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
%ba.tmp = alloca { i64, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.303, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.234
while.hdr.234: ; preds = %if.merge.238, %entry
%load = load i64, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%len = extractvalue { ptr, i64 } %loadN, 1
%icmp = icmp slt i64 %load, %len
br i1 %icmp, label %while.body.235, label %while.exit.236
while.body.235: ; preds = %while.hdr.234
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.237, label %if.merge.238
while.exit.236: ; preds = %while.hdr.234
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.304, i64 1 })
ret { ptr, i64 } %call
if.then.237: ; preds = %while.body.235
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.305, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.238
if.merge.238: ; preds = %if.then.237, %while.body.235
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 %loadN
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
store { i64, i64 } %ig.val, ptr %ba.tmp, align 8
%ba.p2i = ptrtoint ptr %ba.tmp to i64
%ba.val = insertvalue { i64, i64 } { i64 13, i64 undef }, i64 %ba.p2i, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.234
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.265, label %if.else.266
if.then.265: ; preds = %entry
br label %if.merge.267
if.else.266: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.308, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.307, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.267
if.merge.267: ; preds = %if.else.266, %if.then.265
%bp = phi { ptr, i64 } [ { ptr @str.306, i64 4 }, %if.then.265 ], [ %callN, %if.else.266 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.281, label %if.else.282
if.then.281: ; preds = %entry
br label %if.merge.283
if.else.282: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.311, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.310, i64 11 }, { ptr, i64 } %callN)
br label %if.merge.283
if.merge.283: ; preds = %if.else.282, %if.then.281
%bp = phi { ptr, i64 } [ { ptr @str.309, i64 4 }, %if.then.281 ], [ %callN, %if.else.282 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.284, label %if.else.285
if.then.284: ; preds = %entry
br label %if.merge.286
if.else.285: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.314, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.313, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.286
if.merge.286: ; preds = %if.else.285, %if.then.284
%bp = phi { ptr, i64 } [ { ptr @str.312, i64 4 }, %if.then.284 ], [ %callN, %if.else.285 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.287, label %if.else.288
if.then.287: ; preds = %entry
br label %if.merge.289
if.else.288: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.317, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.316, i64 11 }, { ptr, i64 } %callN)
br label %if.merge.289
if.merge.289: ; preds = %if.else.288, %if.then.287
%bp = phi { ptr, i64 } [ { ptr @str.315, i64 4 }, %if.then.287 ], [ %callN, %if.else.288 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.290, label %if.else.291
if.then.290: ; preds = %entry
br label %if.merge.292
if.else.291: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.320, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.319, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.292
if.merge.292: ; preds = %if.else.291, %if.then.290
%bp = phi { ptr, i64 } [ { ptr @str.318, i64 4 }, %if.then.290 ], [ %callN, %if.else.291 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
store ptr %load, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.293, label %if.else.294
if.then.293: ; preds = %entry
br label %if.merge.295
if.else.294: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.323, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.322, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.295
if.merge.295: ; preds = %if.else.294, %if.then.293
%bp = phi { ptr, i64 } [ { ptr @str.321, i64 4 }, %if.then.293 ], [ %callN, %if.else.294 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.296, label %if.else.297
if.then.296: ; preds = %entry
br label %if.merge.298
if.else.297: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.326, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.325, i64 9 }, { ptr, i64 } %callN)
br label %if.merge.298
if.merge.298: ; preds = %if.else.297, %if.then.296
%bp = phi { ptr, i64 } [ { ptr @str.324, i64 4 }, %if.then.296 ], [ %callN, %if.else.297 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.299, label %if.else.300
if.then.299: ; preds = %entry
br label %if.merge.301
if.else.300: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.329, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.328, i64 18 }, { ptr, i64 } %callN)
br label %if.merge.301
if.merge.301: ; preds = %if.else.300, %if.then.299
%bp = phi { ptr, i64 } [ { ptr @str.327, i64 4 }, %if.then.299 ], [ %callN, %if.else.300 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.302, label %if.else.303
if.then.302: ; preds = %entry
br label %if.merge.304
if.else.303: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.332, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.331, i64 12 }, { ptr, i64 } %callN)
br label %if.merge.304
if.merge.304: ; preds = %if.else.303, %if.then.302
%bp = phi { ptr, i64 } [ { ptr @str.330, i64 4 }, %if.then.302 ], [ %callN, %if.else.303 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.305, label %if.else.306
if.then.305: ; preds = %entry
br label %if.merge.307
if.else.306: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.335, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.334, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.307
if.merge.307: ; preds = %if.else.306, %if.then.305
%bp = phi { ptr, i64 } [ { ptr @str.333, i64 4 }, %if.then.305 ], [ %callN, %if.else.306 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.308, label %if.else.309
if.then.308: ; preds = %entry
br label %if.merge.310
if.else.309: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.338, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.337, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.310
if.merge.310: ; preds = %if.else.309, %if.then.308
%bp = phi { ptr, i64 } [ { ptr @str.336, i64 4 }, %if.then.308 ], [ %callN, %if.else.309 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_Vec3(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.311, label %if.else.312
if.then.311: ; preds = %entry
br label %if.merge.313
if.else.312: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.341, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.340, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.313
if.merge.313: ; preds = %if.else.312, %if.then.311
%bp = phi { ptr, i64 } [ { ptr @str.339, i64 4 }, %if.then.311 ], [ %callN, %if.else.312 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.314, label %if.else.315
if.then.314: ; preds = %entry
br label %if.merge.316
if.else.315: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.344, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.343, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.316
if.merge.316: ; preds = %if.else.315, %if.then.314
%bp = phi { ptr, i64 } [ { ptr @str.342, i64 4 }, %if.then.314 ], [ %callN, %if.else.315 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.317, label %if.else.318
if.then.317: ; preds = %entry
br label %if.merge.319
if.else.318: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.347, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.346, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.319
if.merge.319: ; preds = %if.else.318, %if.then.317
%bp = phi { ptr, i64 } [ { ptr @str.345, i64 4 }, %if.then.317 ], [ %callN, %if.else.318 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.320, label %if.else.321
if.then.320: ; preds = %entry
br label %if.merge.322
if.else.321: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.350, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.349, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.322
if.merge.322: ; preds = %if.else.321, %if.then.320
%bp = phi { ptr, i64 } [ { ptr @str.348, i64 4 }, %if.then.320 ], [ %callN, %if.else.321 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.323, label %if.else.324
if.then.323: ; preds = %entry
br label %if.merge.325
if.else.324: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.353, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.352, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.325
if.merge.325: ; preds = %if.else.324, %if.then.323
%bp = phi { ptr, i64 } [ { ptr @str.351, i64 4 }, %if.then.323 ], [ %callN, %if.else.324 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.326, label %if.else.327
if.then.326: ; preds = %entry
br label %if.merge.328
if.else.327: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.356, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.355, i64 3 }, { ptr, i64 } %callN)
br label %if.merge.328
if.merge.328: ; preds = %if.else.327, %if.then.326
%bp = phi { ptr, i64 } [ { ptr @str.354, i64 4 }, %if.then.326 ], [ %callN, %if.else.327 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.329, label %if.else.330
if.then.329: ; preds = %entry
br label %if.merge.331
if.else.330: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.359, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.358, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.331
if.merge.331: ; preds = %if.else.330, %if.then.329
%bp = phi { ptr, i64 } [ { ptr @str.357, i64 4 }, %if.then.329 ], [ %callN, %if.else.330 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_f32(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.332, label %if.else.333
if.then.332: ; preds = %entry
br label %if.merge.334
if.else.333: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.362, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.361, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.334
if.merge.334: ; preds = %if.else.333, %if.then.332
%bp = phi { ptr, i64 } [ { ptr @str.360, i64 4 }, %if.then.332 ], [ %callN, %if.else.333 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_vec_3_f32(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.335, label %if.else.336
if.then.335: ; preds = %entry
br label %if.merge.337
if.else.336: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.365, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.364, i64 14 }, { ptr, i64 } %callN)
br label %if.merge.337
if.merge.337: ; preds = %if.else.336, %if.then.335
%bp = phi { ptr, i64 } [ { ptr @str.363, i64 4 }, %if.then.335 ], [ %callN, %if.else.336 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_AR_5_f32(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.338, label %if.else.339
if.then.338: ; preds = %entry
br label %if.merge.340
if.else.339: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.368, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.367, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.340
if.merge.340: ; preds = %if.else.339, %if.then.338
%bp = phi { ptr, i64 } [ { ptr @str.366, i64 4 }, %if.then.338 ], [ %callN, %if.else.339 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_Foo(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.341, label %if.else.342
if.then.341: ; preds = %entry
br label %if.merge.343
if.else.342: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.371, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.370, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.343
if.merge.343: ; preds = %if.else.342, %if.then.341
%bp = phi { ptr, i64 } [ { ptr @str.369, i64 4 }, %if.then.341 ], [ %callN, %if.else.342 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.344, label %if.else.345
if.then.344: ; preds = %entry
br label %if.merge.346
if.else.345: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.374, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.373, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.346
if.merge.346: ; preds = %if.else.345, %if.then.344
%bp = phi { ptr, i64 } [ { ptr @str.372, i64 4 }, %if.then.344 ], [ %callN, %if.else.345 ]
ret { ptr, i64 } %bp
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_Sx__f32(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
%load = load ptr, ptr %alloca, align 8
%pti = ptrtoint ptr %load to i64
store i64 %pti, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%icmp = icmp eq i64 %loadN, 0
br i1 %icmp, label %if.then.347, label %if.else.348
if.then.347: ; preds = %entry
br label %if.merge.349
if.else.348: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.377, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.376, i64 8 }, { ptr, i64 } %callN)
br label %if.merge.349
if.merge.349: ; preds = %if.else.348, %if.then.347
%bp = phi { ptr, i64 } [ { ptr @str.375, i64 4 }, %if.then.347 ], [ %callN, %if.else.348 ]
ret { ptr, i64 } %bp
}
declare i64 @write(i32, ptr, i64)
declare double @sqrt(double)