Files
sx/examples/expected/0200-generics-generic.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

3458 lines
157 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 [70 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]
@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 [13 x i8] c"**CAllocator\00"
@tn.str.44 = private constant [5 x i8] c"*s64\00"
@tn.str.45 = private constant [7 x i8] c"**void\00"
@tn.str.46 = private constant [8 x i8] c"*string\00"
@tn.str.47 = private constant [6 x i8] c"[]Any\00"
@tn.str.48 = private constant [5 x i8] c"*Any\00"
@tn.str.49 = private constant [7 x i8] c"[1]Any\00"
@tn.str.50 = private constant [8 x i8] c"*[1]Any\00"
@tn.str.51 = private constant [7 x i8] c"*[]Any\00"
@tn.str.52 = private constant [4 x i8] c"*u8\00"
@tn.str.53 = private constant [6 x i8] c"*bool\00"
@tn.str.54 = private constant [5 x i8] c"*f64\00"
@tn.str.55 = private constant [8 x i8] c"*[4]s64\00"
@tn.str.56 = private constant [17 x i8] c"*Source_Location\00"
@tn.str.57 = private constant [11 x i8] c"*Allocator\00"
@tn.str.58 = private constant [9 x i8] c"*Context\00"
@tn.str.59 = private constant [10 x i8] c"*[]string\00"
@tn.str.60 = private constant [6 x i8] c"**GPA\00"
@tn.str.61 = private constant [13 x i8] c"**ArenaChunk\00"
@tn.str.62 = private constant [8 x i8] c"**Arena\00"
@tn.str.63 = private constant [7 x i8] c"*[*]u8\00"
@tn.str.64 = private constant [11 x i8] c"**BufAlloc\00"
@tn.str.65 = private constant [20 x i8] c"**TrackingAllocator\00"
@tn.str.66 = private constant [14 x i8] c"***CAllocator\00"
@tn.str.67 = private constant [6 x i8] c"**s64\00"
@tn.str.68 = private constant [8 x i8] c"***void\00"
@tn.str.69 = private constant [9 x i8] c"**string\00"
@tn.str.70 = private constant [6 x i8] c"**Any\00"
@tn.str.71 = private constant [9 x i8] c"**[1]Any\00"
@tn.str.72 = private constant [8 x i8] c"**[]Any\00"
@tn.str.73 = private constant [5 x i8] c"**u8\00"
@tn.str.74 = private constant [7 x i8] c"**bool\00"
@tn.str.75 = private constant [6 x i8] c"**f64\00"
@__sx_type_names = private constant [70 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 12 }, { ptr, i64 } { ptr @tn.str.44, i64 4 }, { ptr, i64 } { ptr @tn.str.45, i64 6 }, { ptr, i64 } { ptr @tn.str.46, i64 7 }, { ptr, i64 } { ptr @tn.str.47, i64 5 }, { ptr, i64 } { ptr @tn.str.48, i64 4 }, { ptr, i64 } { ptr @tn.str.49, i64 6 }, { ptr, i64 } { ptr @tn.str.50, i64 7 }, { ptr, i64 } { ptr @tn.str.51, i64 6 }, { ptr, i64 } { ptr @tn.str.52, i64 3 }, { ptr, i64 } { ptr @tn.str.53, i64 5 }, { ptr, i64 } { ptr @tn.str.54, i64 4 }, { ptr, i64 } { ptr @tn.str.55, i64 7 }, { ptr, i64 } { ptr @tn.str.56, i64 16 }, { ptr, i64 } { ptr @tn.str.57, i64 10 }, { ptr, i64 } { ptr @tn.str.58, i64 8 }, { ptr, i64 } { ptr @tn.str.59, i64 9 }, { ptr, i64 } { ptr @tn.str.60, i64 5 }, { ptr, i64 } { ptr @tn.str.61, i64 12 }, { ptr, i64 } { ptr @tn.str.62, i64 7 }, { ptr, i64 } { ptr @tn.str.63, i64 6 }, { ptr, i64 } { ptr @tn.str.64, i64 10 }, { ptr, i64 } { ptr @tn.str.65, i64 19 }, { ptr, i64 } { ptr @tn.str.66, i64 13 }, { ptr, i64 } { ptr @tn.str.67, i64 5 }, { ptr, i64 } { ptr @tn.str.68, i64 7 }, { ptr, i64 } { ptr @tn.str.69, i64 8 }, { ptr, i64 } { ptr @tn.str.70, i64 5 }, { ptr, i64 } { ptr @tn.str.71, i64 8 }, { ptr, i64 } { ptr @tn.str.72, i64 7 }, { ptr, i64 } { ptr @tn.str.73, i64 4 }, { ptr, i64 } { ptr @tn.str.74, i64 6 }, { ptr, i64 } { ptr @tn.str.75, i64 5 }]
@str.76 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.77 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.78 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.79 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.80 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.85 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.93 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.94 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.95 = private unnamed_addr constant [9 x i8] c"sum: {}\0A\00", align 1
@str.96 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.97 = private unnamed_addr constant [9 x i8] c"sum: {}\0A\00", align 1
@str.98 = private unnamed_addr constant [9 x i8] c"sum: {}\0A\00", align 1
@str.99 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.100 = private unnamed_addr constant [9 x i8] c"sum: {}\0A\00", align 1
@str.101 = private unnamed_addr constant [16 x i8] c"Source_Location\00", align 1
@str.102 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.103 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.104 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str = private constant [5 x i8] c"file\00"
@fld.str.105 = private constant [5 x i8] c"line\00"
@fld.str.106 = private constant [4 x i8] c"col\00"
@fld.str.107 = 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.105, i64 4 }, { ptr, i64 } { ptr @fld.str.106, i64 3 }, { ptr, i64 } { ptr @fld.str.107, i64 4 }]
@str.108 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.109 = private unnamed_addr constant [10 x i8] c"Allocator\00", align 1
@str.110 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.111 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.112 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.113 = private constant [4 x i8] c"ctx\00"
@fld.str.114 = private constant [6 x i8] c"alloc\00"
@fld.str.115 = private constant [8 x i8] c"dealloc\00"
@field_names.116 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.113, i64 3 }, { ptr, i64 } { ptr @fld.str.114, i64 5 }, { ptr, i64 } { ptr @fld.str.115, i64 7 }]
@str.117 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.118 = private unnamed_addr constant [11 x i8] c"CAllocator\00", align 1
@str.119 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.120 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.121 = private unnamed_addr constant [3 x i8] c", \00", align 1
@field_names.122 = private constant [0 x { ptr, i64 }] zeroinitializer
@str.123 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.124 = private unnamed_addr constant [4 x i8] c"GPA\00", align 1
@str.125 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.126 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.127 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.128 = private constant [12 x i8] c"alloc_count\00"
@field_names.129 = private constant [1 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.128, i64 11 }]
@str.130 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.131 = private unnamed_addr constant [11 x i8] c"ArenaChunk\00", align 1
@str.132 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.133 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.135 = private constant [5 x i8] c"next\00"
@fld.str.136 = private constant [4 x i8] c"cap\00"
@field_names.137 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.135, i64 4 }, { ptr, i64 } { ptr @fld.str.136, i64 3 }]
@str.138 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.139 = private unnamed_addr constant [6 x i8] c"Arena\00", align 1
@str.140 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.141 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.143 = private constant [6 x i8] c"first\00"
@fld.str.144 = private constant [10 x i8] c"end_index\00"
@fld.str.145 = private constant [7 x i8] c"parent\00"
@field_names.146 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.143, i64 5 }, { ptr, i64 } { ptr @fld.str.144, i64 9 }, { ptr, i64 } { ptr @fld.str.145, i64 6 }]
@str.147 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.148 = private unnamed_addr constant [9 x i8] c"BufAlloc\00", align 1
@str.149 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.150 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.151 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.152 = private constant [4 x i8] c"buf\00"
@fld.str.153 = private constant [4 x i8] c"len\00"
@fld.str.154 = private constant [4 x i8] c"pos\00"
@field_names.155 = private constant [3 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.152, i64 3 }, { ptr, i64 } { ptr @fld.str.153, i64 3 }, { ptr, i64 } { ptr @fld.str.154, i64 3 }]
@str.156 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.157 = private unnamed_addr constant [18 x i8] c"TrackingAllocator\00", align 1
@str.158 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.159 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.160 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.161 = private constant [7 x i8] c"parent\00"
@fld.str.162 = private constant [12 x i8] c"alloc_count\00"
@fld.str.163 = private constant [14 x i8] c"dealloc_count\00"
@fld.str.164 = private constant [18 x i8] c"total_alloc_bytes\00"
@field_names.165 = private constant [4 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.161, i64 6 }, { ptr, i64 } { ptr @fld.str.162, i64 11 }, { ptr, i64 } { ptr @fld.str.163, i64 13 }, { ptr, i64 } { ptr @fld.str.164, i64 17 }]
@str.166 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.167 = private unnamed_addr constant [8 x i8] c"Context\00", align 1
@str.168 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@str.169 = private unnamed_addr constant [2 x i8] c"}\00", align 1
@str.170 = private unnamed_addr constant [3 x i8] c", \00", align 1
@fld.str.171 = private constant [10 x i8] c"allocator\00"
@fld.str.172 = private constant [5 x i8] c"data\00"
@field_names.173 = private constant [2 x { ptr, i64 }] [{ ptr, i64 } { ptr @fld.str.171, i64 9 }, { ptr, i64 } { ptr @fld.str.172, i64 4 }]
@str.174 = private unnamed_addr constant [3 x i8] c": \00", align 1
@str.175 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.176 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.177 = private unnamed_addr constant [3 x i8] c", \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
@str.181 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@str.182 = private unnamed_addr constant [2 x i8] c"]\00", align 1
@str.183 = private unnamed_addr constant [3 x i8] c", \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
@str.187 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.188 = private unnamed_addr constant [6 x i8] c"*void\00", align 1
@str.189 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.190 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.191 = private unnamed_addr constant [12 x i8] c"*CAllocator\00", align 1
@str.192 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.193 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.194 = private unnamed_addr constant [5 x i8] c"*GPA\00", align 1
@str.195 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.196 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.197 = private unnamed_addr constant [12 x i8] c"*ArenaChunk\00", align 1
@str.198 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.199 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.200 = private unnamed_addr constant [7 x i8] c"*Arena\00", align 1
@str.201 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.202 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.203 = private unnamed_addr constant [6 x i8] c"[*]u8\00", align 1
@str.204 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.205 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.206 = private unnamed_addr constant [10 x i8] c"*BufAlloc\00", align 1
@str.207 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.208 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.209 = private unnamed_addr constant [19 x i8] c"*TrackingAllocator\00", align 1
@str.210 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.211 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.212 = private unnamed_addr constant [13 x i8] c"**CAllocator\00", align 1
@str.213 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.214 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.215 = private unnamed_addr constant [5 x i8] c"*s64\00", align 1
@str.216 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.217 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.218 = private unnamed_addr constant [7 x i8] c"**void\00", align 1
@str.219 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.220 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.221 = private unnamed_addr constant [8 x i8] c"*string\00", align 1
@str.222 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.223 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.224 = private unnamed_addr constant [5 x i8] c"*Any\00", align 1
@str.225 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.226 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.227 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1
@str.228 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.229 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.230 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1
@str.231 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.232 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.233 = private unnamed_addr constant [4 x i8] c"*u8\00", align 1
@str.234 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.235 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.236 = private unnamed_addr constant [6 x i8] c"*bool\00", align 1
@str.237 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.238 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.239 = private unnamed_addr constant [5 x i8] c"*f64\00", align 1
@str.240 = 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.203
while.hdr.203: ; preds = %if.merge.208, %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.204, label %while.exit.205
while.body.204: ; preds = %while.hdr.203
%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.206, label %if.else.207
while.exit.205: ; preds = %while.hdr.203
ret void
if.then.206: ; preds = %while.body.204
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 48
br label %if.merge.208
if.else.207: ; preds = %while.body.204
%loadN = load i64, ptr %allocaN, align 8
%sub = sub i64 %loadN, 10
%addN = add i64 %sub, 97
br label %if.merge.208
if.merge.208: ; preds = %if.else.207, %if.then.206
%bp = phi i64 [ %addN, %if.then.206 ], [ %addN, %if.else.207 ]
%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.203
}
; 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.201, label %if.merge.202
if.then.201: ; preds = %entry
ret { ptr, i64 } { ptr @str.4, i64 1 }
if.merge.202: ; 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.209
while.hdr.209: ; preds = %if.merge.213, %if.merge.202
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp slt i64 %loadN, 15
br i1 %icmpN, label %while.body.210, label %while.exit.211
while.body.210: ; preds = %while.hdr.209
%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.212, label %if.merge.213
while.exit.211: ; preds = %if.then.212, %while.hdr.209
%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.212: ; preds = %while.body.210
br label %while.exit.211
if.merge.213: ; preds = %while.body.210
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %allocaN, align 8
br label %while.hdr.209
}
; 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
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 35, label %match.arm.47
i64 43, label %match.arm.47
i64 36, label %match.arm.48
i64 41, 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 37, label %match.arm.49
i64 38, label %match.arm.49
i64 39, label %match.arm.49
i64 40, label %match.arm.49
i64 42, label %match.arm.49
i64 44, 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 13, label %match.arm.51
]
match.merge.37: ; preds = %dispatch.merge.178, %dispatch.merge.164, %dispatch.merge.150, %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 [70 x i1], ptr @__sx_type_is_unsigned, i64 0, i64 %refl.tid
%tiu.load = load i1, ptr %tiu.gep, align 1
br i1 %tiu.load, label %if.then.53, label %if.else.54
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
%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
]
match.arm.44: ; No predecessors!
unreachable
match.arm.45: ; No predecessors!
unreachable
match.arm.46: ; No predecessors!
unreachable
match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw20 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw20, label %dispatch.default.151 [
i64 35, label %dispatch.case.152
i64 43, label %dispatch.case.153
]
match.arm.48: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %allocaN, align 8
%ua.raw24 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw24, label %dispatch.default.165 [
i64 36, label %dispatch.case.166
i64 41, label %dispatch.case.167
]
match.arm.49: ; preds = %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.raw28 = extractvalue { i64, i64 } %loadN, 1
%loadN = load { i64, i64 }, ptr %alloca, align 8
switch i64 %ua.raw28, label %dispatch.default.179 [
i64 18, label %dispatch.case.180
i64 22, label %dispatch.case.181
i64 24, label %dispatch.case.182
i64 26, label %dispatch.case.183
i64 28, label %dispatch.case.184
i64 29, label %dispatch.case.185
i64 31, label %dispatch.case.186
i64 33, label %dispatch.case.187
i64 37, label %dispatch.case.188
i64 38, label %dispatch.case.189
i64 39, label %dispatch.case.190
i64 40, label %dispatch.case.191
i64 42, label %dispatch.case.192
i64 44, label %dispatch.case.193
i64 45, label %dispatch.case.194
i64 46, label %dispatch.case.195
i64 47, label %dispatch.case.196
i64 48, label %dispatch.case.197
]
match.arm.50: ; No predecessors!
unreachable
match.arm.51: ; preds = %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%refl.tag32 = extractvalue { i64, i64 } %loadN, 0
%refl.val33 = extractvalue { i64, i64 } %loadN, 1
%refl.istype34 = icmp eq i64 %refl.tag32, 13
%refl.tid35 = select i1 %refl.istype34, i64 %refl.val33, i64 %refl.tag32
%tn.gep = getelementptr inbounds [70 x { ptr, i64 }], ptr @__sx_type_names, i64 0, i64 %refl.tid35
%tn.load = load { ptr, i64 }, ptr %tn.gep, align 8
store { ptr, i64 } %tn.load, ptr %allocaN, align 8
br label %match.merge.37
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.raw37 = extractvalue { i64, i64 } %loadN, 1
%callN = call { ptr, i64 } @uint_to_string(ptr %0, i64 %ua.raw37)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.55
if.else.54: ; preds = %match.arm.39
%loadN = load { i64, i64 }, ptr %alloca, align 8
%ua.raw40 = extractvalue { i64, i64 } %loadN, 1
%callN = call { ptr, i64 } @int_to_string(ptr %0, i64 %ua.raw40)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.55
if.merge.55: ; preds = %if.else.54, %if.then.53
br label %match.merge.37
f32.unbox.81: ; preds = %match.arm.42
%ua.raw42 = extractvalue { i64, i64 } %loadN, 1
%trN = trunc i64 %ua.raw42 to i32
%iNf = bitcast i32 %trN to float
%fpext = fpext float %iNf to double
store double %fpext, ptr %allocaN, align 8
br label %float.merge.83
f64.unbox.82: ; preds = %match.arm.42
%ua.raw43 = extractvalue { i64, i64 } %loadN, 1
%iNd = bitcast i64 %ua.raw43 to double
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.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.76, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.96: ; preds = %match.arm.43
%ua.raw47 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr48 = inttoptr i64 %ua.raw47 to ptr
%ua.load49 = load { { ptr, i64 }, i32, i32, { ptr, i64 } }, ptr %ua.ptr48, align 8
%callN = call { ptr, i64 } @struct_to_string__Source_Location(ptr %0, { { ptr, i64 }, i32, i32, { ptr, i64 } } %ua.load49)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.97: ; preds = %match.arm.43
%ua.raw51 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr52 = inttoptr i64 %ua.raw51 to ptr
%ua.load53 = load { ptr, ptr, ptr }, ptr %ua.ptr52, align 8
%callN = call { ptr, i64 } @struct_to_string__Allocator(ptr %0, { ptr, ptr, ptr } %ua.load53)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.98: ; preds = %match.arm.43
%ua.raw55 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr56 = inttoptr i64 %ua.raw55 to ptr
%ua.load57 = load {}, ptr %ua.ptr56, align 1
%callN = call { ptr, i64 } @struct_to_string__CAllocator(ptr %0, {} %ua.load57)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.99: ; preds = %match.arm.43
%ua.raw59 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr60 = inttoptr i64 %ua.raw59 to ptr
%ua.load61 = load { i64 }, ptr %ua.ptr60, align 8
%callN = call { ptr, i64 } @struct_to_string__GPA(ptr %0, { i64 } %ua.load61)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.100: ; preds = %match.arm.43
%ua.raw63 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr64 = inttoptr i64 %ua.raw63 to ptr
%ua.load65 = load { ptr, i64 }, ptr %ua.ptr64, align 8
%callN = call { ptr, i64 } @struct_to_string__ArenaChunk(ptr %0, { ptr, i64 } %ua.load65)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.101: ; preds = %match.arm.43
%ua.raw67 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr68 = inttoptr i64 %ua.raw67 to ptr
%ua.load69 = load { ptr, i64, { ptr, ptr, ptr } }, ptr %ua.ptr68, align 8
%callN = call { ptr, i64 } @struct_to_string__Arena(ptr %0, { ptr, i64, { ptr, ptr, ptr } } %ua.load69)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.102: ; preds = %match.arm.43
%ua.raw71 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr72 = inttoptr i64 %ua.raw71 to ptr
%ua.load73 = load { ptr, i64, i64 }, ptr %ua.ptr72, align 8
%callN = call { ptr, i64 } @struct_to_string__BufAlloc(ptr %0, { ptr, i64, i64 } %ua.load73)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.103: ; preds = %match.arm.43
%ua.raw75 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr76 = inttoptr i64 %ua.raw75 to ptr
%ua.load77 = load { { ptr, ptr, ptr }, i64, i64, i64 }, ptr %ua.ptr76, align 8
%callN = call { ptr, i64 } @struct_to_string__TrackingAllocator(ptr %0, { { ptr, ptr, ptr }, i64, i64, i64 } %ua.load77)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.case.104: ; preds = %match.arm.43
%ua.raw79 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr80 = inttoptr i64 %ua.raw79 to ptr
%ua.load81 = load { { ptr, ptr, ptr }, ptr }, ptr %ua.ptr80, align 8
%callN = call { ptr, i64 } @struct_to_string__Context(ptr %0, { { ptr, ptr, ptr }, ptr } %ua.load81)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.94
dispatch.merge.150: ; preds = %dispatch.case.153, %dispatch.case.152, %dispatch.default.151
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.151: ; preds = %match.arm.47
store { ptr, i64 } { ptr @str.77, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.150
dispatch.case.152: ; preds = %match.arm.47
%ua.raw84 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr85 = inttoptr i64 %ua.raw84 to ptr
%ua.load86 = load [4 x i64], ptr %ua.ptr85, align 8
%callN = call { ptr, i64 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %ua.load86)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.150
dispatch.case.153: ; preds = %match.arm.47
%ua.raw88 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr89 = inttoptr i64 %ua.raw88 to ptr
%ua.load90 = load [1 x { i64, i64 }], ptr %ua.ptr89, align 8
%callN = call { ptr, i64 } @array_to_string__AR_1_Any(ptr %0, [1 x { i64, i64 }] %ua.load90)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.150
dispatch.merge.164: ; preds = %dispatch.case.167, %dispatch.case.166, %dispatch.default.165
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.165: ; preds = %match.arm.48
store { ptr, i64 } { ptr @str.78, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.164
dispatch.case.166: ; preds = %match.arm.48
%ua.raw93 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr94 = inttoptr i64 %ua.raw93 to ptr
%ua.load95 = load { ptr, i64 }, ptr %ua.ptr94, align 8
%callN = call { ptr, i64 } @slice_to_string__string(ptr %0, { ptr, i64 } %ua.load95)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.164
dispatch.case.167: ; preds = %match.arm.48
%ua.raw97 = extractvalue { i64, i64 } %loadN, 1
%ua.ptr98 = inttoptr i64 %ua.raw97 to ptr
%ua.load99 = load { ptr, i64 }, ptr %ua.ptr98, align 8
%callN = call { ptr, i64 } @slice_to_string__Any(ptr %0, { ptr, i64 } %ua.load99)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.164
dispatch.merge.178: ; preds = %dispatch.case.197, %dispatch.case.196, %dispatch.case.195, %dispatch.case.194, %dispatch.case.193, %dispatch.case.192, %dispatch.case.191, %dispatch.case.190, %dispatch.case.189, %dispatch.case.188, %dispatch.case.187, %dispatch.case.186, %dispatch.case.185, %dispatch.case.184, %dispatch.case.183, %dispatch.case.182, %dispatch.case.181, %dispatch.case.180, %dispatch.default.179
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
store { ptr, i64 } %loadN, ptr %allocaN, align 8
br label %match.merge.37
dispatch.default.179: ; preds = %match.arm.49
store { ptr, i64 } { ptr @str.79, i64 0 }, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.180: ; preds = %match.arm.49
%ua.raw102 = extractvalue { i64, i64 } %loadN, 1
%iNp = inttoptr i64 %ua.raw102 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_void(ptr %0, ptr %iNp)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.181: ; preds = %match.arm.49
%ua.raw104 = extractvalue { i64, i64 } %loadN, 1
%iNp105 = inttoptr i64 %ua.raw104 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_CAllocator(ptr %0, ptr %iNp105)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.182: ; preds = %match.arm.49
%ua.raw107 = extractvalue { i64, i64 } %loadN, 1
%iNp108 = inttoptr i64 %ua.raw107 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_GPA(ptr %0, ptr %iNp108)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.183: ; preds = %match.arm.49
%ua.raw110 = extractvalue { i64, i64 } %loadN, 1
%iNp111 = inttoptr i64 %ua.raw110 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_ArenaChunk(ptr %0, ptr %iNp111)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.184: ; preds = %match.arm.49
%ua.raw113 = extractvalue { i64, i64 } %loadN, 1
%iNp114 = inttoptr i64 %ua.raw113 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_Arena(ptr %0, ptr %iNp114)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.185: ; preds = %match.arm.49
%ua.raw116 = extractvalue { i64, i64 } %loadN, 1
%iNp117 = inttoptr i64 %ua.raw116 to ptr
%callN = call { ptr, i64 } @pointer_to_string__mptr_u8(ptr %0, ptr %iNp117)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.186: ; preds = %match.arm.49
%ua.raw119 = extractvalue { i64, i64 } %loadN, 1
%iNp120 = inttoptr i64 %ua.raw119 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_BufAlloc(ptr %0, ptr %iNp120)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.187: ; preds = %match.arm.49
%ua.raw122 = extractvalue { i64, i64 } %loadN, 1
%iNp123 = inttoptr i64 %ua.raw122 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_TrackingAllocator(ptr %0, ptr %iNp123)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.188: ; preds = %match.arm.49
%ua.raw125 = extractvalue { i64, i64 } %loadN, 1
%iNp126 = inttoptr i64 %ua.raw125 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_CAllocator(ptr %0, ptr %iNp126)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.189: ; preds = %match.arm.49
%ua.raw128 = extractvalue { i64, i64 } %loadN, 1
%iNp129 = inttoptr i64 %ua.raw128 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_s64(ptr %0, ptr %iNp129)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.190: ; preds = %match.arm.49
%ua.raw131 = extractvalue { i64, i64 } %loadN, 1
%iNp132 = inttoptr i64 %ua.raw131 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_ptr_void(ptr %0, ptr %iNp132)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.191: ; preds = %match.arm.49
%ua.raw134 = extractvalue { i64, i64 } %loadN, 1
%iNp135 = inttoptr i64 %ua.raw134 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp135)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.192: ; preds = %match.arm.49
%ua.raw137 = extractvalue { i64, i64 } %loadN, 1
%iNp138 = inttoptr i64 %ua.raw137 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_Any(ptr %0, ptr %iNp138)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.193: ; preds = %match.arm.49
%ua.raw140 = extractvalue { i64, i64 } %loadN, 1
%iNp141 = inttoptr i64 %ua.raw140 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp141)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.194: ; preds = %match.arm.49
%ua.raw143 = extractvalue { i64, i64 } %loadN, 1
%iNp144 = inttoptr i64 %ua.raw143 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp144)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.195: ; preds = %match.arm.49
%ua.raw146 = extractvalue { i64, i64 } %loadN, 1
%iNp147 = inttoptr i64 %ua.raw146 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_u8(ptr %0, ptr %iNp147)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.196: ; preds = %match.arm.49
%ua.raw149 = extractvalue { i64, i64 } %loadN, 1
%iNp150 = inttoptr i64 %ua.raw149 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_bool(ptr %0, ptr %iNp150)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
dispatch.case.197: ; preds = %match.arm.49
%ua.raw152 = extractvalue { i64, i64 } %loadN, 1
%iNp153 = inttoptr i64 %ua.raw152 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_f64(ptr %0, ptr %iNp153)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.178
}
; 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.80, 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.81, 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.82, 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.83, 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.84, 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.85, 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.86, 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.87, 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.88, 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.89, 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.90, 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.91, 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.92, 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.93, 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.94, 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
define i32 @main() #0 {
entry:
%call = call i64 @sum__s64(ptr @__sx_default_context, i64 2, i64 3)
%alloca = alloca i64, align 8
store i64 %call, ptr %alloca, align 8
%load = load i64, ptr %alloca, align 8
call void @print__ct_s95dfd2a009f17129__pack_s64(ptr @__sx_default_context, i64 %load)
%callN = call i64 @sum__s64(ptr @__sx_default_context, i64 40, i64 2)
call void @print__ct_s95dfd2a009f17129__pack_s64(ptr @__sx_default_context, i64 %callN)
%callN = call double @sum__f64(ptr @__sx_default_context, double 4.000000e+01, double 2.500000e+00)
call void @print__ct_s95dfd2a009f17129__pack_f64(ptr @__sx_default_context, double %callN)
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 i64 @sum__s64(ptr %0, i64 %1, i64 %2) #0 {
entry:
%alloca = alloca i64, align 8
store i64 %1, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
%load = load i64, ptr %alloca, align 8
%loadN = load i64, ptr %allocaN, align 8
%add = add i64 %load, %loadN
ret i64 %add
}
; Function Attrs: nounwind
define internal void @print__ct_s95dfd2a009f17129__pack_s64(ptr %0, i64 %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.95, i64 8 }, 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.96, 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 i64, ptr %allocaN, align 8
%ba.val12 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val12)
%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_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.97, i64 8 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal double @sum__f64(ptr %0, double %1, double %2) #0 {
entry:
%alloca = alloca double, align 8
store double %1, ptr %alloca, align 8
%allocaN = alloca double, align 8
store double %2, ptr %allocaN, align 8
%load = load double, ptr %alloca, align 8
%loadN = load double, ptr %allocaN, align 8
%fadd = fadd double %load, %loadN
ret double %fadd
}
; Function Attrs: nounwind
define internal void @print__ct_s95dfd2a009f17129__pack_f64(ptr %0, double %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.98, i64 8 }, 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.99, 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 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 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_1(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.100, i64 8 })
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.101, i64 15 }, { ptr, i64 } { ptr @str.102, 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.105
while.hdr.105: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.106, label %while.exit.107
while.body.106: ; preds = %while.hdr.105
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.108, label %if.merge.109
while.exit.107: ; preds = %while.hdr.105
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.103, i64 1 })
ret { ptr, i64 } %callN
if.then.108: ; preds = %while.body.106
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.104, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.109
if.merge.109: ; preds = %if.then.108, %while.body.106
%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.108, 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.105
fv.default: ; preds = %if.merge.109
br label %fv.merge
fv.case: ; preds = %if.merge.109
%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.109
%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.109
%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.109
%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.109, i64 9 }, { ptr, i64 } { ptr @str.110, 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.110
while.hdr.110: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.111, label %while.exit.112
while.body.111: ; preds = %while.hdr.110
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.113, label %if.merge.114
while.exit.112: ; preds = %while.hdr.110
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.111, i64 1 })
ret { ptr, i64 } %callN
if.then.113: ; preds = %while.body.111
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.112, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.114
if.merge.114: ; preds = %if.then.113, %while.body.111
%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.116, 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.117, 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.110
fv.default: ; preds = %if.merge.114
br label %fv.merge
fv.case: ; preds = %if.merge.114
%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.114
%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.114
%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.118, i64 10 }, { ptr, i64 } { ptr @str.119, 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.115
while.hdr.115: ; preds = %if.merge.119, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 0
br i1 %icmp, label %while.body.116, label %while.exit.117
while.body.116: ; preds = %while.hdr.115
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.118, label %if.merge.119
while.exit.117: ; preds = %while.hdr.115
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 1 })
ret { ptr, i64 } %callN
if.then.118: ; preds = %while.body.116
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.119
if.merge.119: ; preds = %if.then.118, %while.body.116
%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.122, 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.123, 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.115
}
; 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.124, i64 3 }, { ptr, i64 } { ptr @str.125, 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.120
while.hdr.120: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.121, label %while.exit.122
while.body.121: ; preds = %while.hdr.120
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.123, label %if.merge.124
while.exit.122: ; preds = %while.hdr.120
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 1 })
ret { ptr, i64 } %callN
if.then.123: ; preds = %while.body.121
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.124
if.merge.124: ; preds = %if.then.123, %while.body.121
%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.129, 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.130, 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.120
fv.default: ; preds = %if.merge.124
br label %fv.merge
fv.case: ; preds = %if.merge.124
%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.131, i64 10 }, { ptr, i64 } { ptr @str.132, 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.125
while.hdr.125: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.126, label %while.exit.127
while.body.126: ; preds = %while.hdr.125
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.128, label %if.merge.129
while.exit.127: ; preds = %while.hdr.125
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 1 })
ret { ptr, i64 } %callN
if.then.128: ; preds = %while.body.126
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.129
if.merge.129: ; preds = %if.then.128, %while.body.126
%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.137, 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.138, 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.125
fv.default: ; preds = %if.merge.129
br label %fv.merge
fv.case: ; preds = %if.merge.129
%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.129
%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.139, i64 5 }, { ptr, i64 } { ptr @str.140, 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.130
while.hdr.130: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.131, label %while.exit.132
while.body.131: ; preds = %while.hdr.130
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.133, label %if.merge.134
while.exit.132: ; preds = %while.hdr.130
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 1 })
ret { ptr, i64 } %callN
if.then.133: ; preds = %while.body.131
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.142, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.134
if.merge.134: ; preds = %if.then.133, %while.body.131
%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.146, 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.147, 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.130
fv.default: ; preds = %if.merge.134
br label %fv.merge
fv.case: ; preds = %if.merge.134
%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.134
%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.134
%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.148, i64 8 }, { ptr, i64 } { ptr @str.149, 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.135
while.hdr.135: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 3
br i1 %icmp, label %while.body.136, label %while.exit.137
while.body.136: ; preds = %while.hdr.135
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.138, label %if.merge.139
while.exit.137: ; preds = %while.hdr.135
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.150, i64 1 })
ret { ptr, i64 } %callN
if.then.138: ; preds = %while.body.136
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.151, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.139
if.merge.139: ; preds = %if.then.138, %while.body.136
%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.155, 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.156, 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.135
fv.default: ; preds = %if.merge.139
br label %fv.merge
fv.case: ; preds = %if.merge.139
%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.139
%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.139
%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.157, i64 17 }, { ptr, i64 } { ptr @str.158, 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.140
while.hdr.140: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.141, label %while.exit.142
while.body.141: ; preds = %while.hdr.140
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.143, label %if.merge.144
while.exit.142: ; preds = %while.hdr.140
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.159, i64 1 })
ret { ptr, i64 } %callN
if.then.143: ; preds = %while.body.141
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.160, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.144
if.merge.144: ; preds = %if.then.143, %while.body.141
%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.165, 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.166, 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.140
fv.default: ; preds = %if.merge.144
br label %fv.merge
fv.case: ; preds = %if.merge.144
%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.144
%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.144
%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.144
%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.167, i64 7 }, { ptr, i64 } { ptr @str.168, 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.145
while.hdr.145: ; preds = %fv.merge, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 2
br i1 %icmp, label %while.body.146, label %while.exit.147
while.body.146: ; preds = %while.hdr.145
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.148, label %if.merge.149
while.exit.147: ; preds = %while.hdr.145
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.169, i64 1 })
ret { ptr, i64 } %callN
if.then.148: ; preds = %while.body.146
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.170, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.149
if.merge.149: ; preds = %if.then.148, %while.body.146
%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.173, 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.174, 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.145
fv.default: ; preds = %if.merge.149
br label %fv.merge
fv.case: ; preds = %if.merge.149
%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.149
%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 } @array_to_string__AR_4_s64(ptr %0, [4 x i64] %1) #0 {
entry:
%alloca = alloca [4 x i64], align 8
%ig.tmp = alloca [4 x i64], align 8
store [4 x i64] %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.175, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.154
while.hdr.154: ; preds = %if.merge.158, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 4
br i1 %icmp, label %while.body.155, label %while.exit.156
while.body.155: ; preds = %while.hdr.154
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.157, label %if.merge.158
while.exit.156: ; preds = %while.hdr.154
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.176, i64 1 })
ret { ptr, i64 } %call
if.then.157: ; preds = %while.body.155
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.177, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.158
if.merge.158: ; preds = %if.then.157, %while.body.155
%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.154
}
; 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.178, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.159
while.hdr.159: ; preds = %if.merge.163, %entry
%load = load i64, ptr %allocaN, align 8
%icmp = icmp slt i64 %load, 1
br i1 %icmp, label %while.body.160, label %while.exit.161
while.body.160: ; preds = %while.hdr.159
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.162, label %if.merge.163
while.exit.161: ; preds = %while.hdr.159
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.179, i64 1 })
ret { ptr, i64 } %call
if.then.162: ; preds = %while.body.160
%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.163
if.merge.163: ; preds = %if.then.162, %while.body.160
%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.159
}
; 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.181, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.168
while.hdr.168: ; preds = %if.merge.172, %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.169, label %while.exit.170
while.body.169: ; preds = %while.hdr.168
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.171, label %if.merge.172
while.exit.170: ; preds = %while.hdr.168
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.182, i64 1 })
ret { ptr, i64 } %call
if.then.171: ; preds = %while.body.169
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.183, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.172
if.merge.172: ; preds = %if.then.171, %while.body.169
%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.168
}
; 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.184, i64 1 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
br label %while.hdr.173
while.hdr.173: ; preds = %if.merge.177, %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.174, label %while.exit.175
while.body.174: ; preds = %while.hdr.173
%loadN = load i64, ptr %allocaN, align 8
%icmpN = icmp sgt i64 %loadN, 0
br i1 %icmpN, label %if.then.176, label %if.merge.177
while.exit.175: ; preds = %while.hdr.173
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.185, i64 1 })
ret { ptr, i64 } %call
if.then.176: ; preds = %while.body.174
%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.177
if.merge.177: ; preds = %if.then.176, %while.body.174
%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.173
}
; 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.198, label %if.else.199
if.then.198: ; preds = %entry
br label %if.merge.200
if.else.199: ; 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.189, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.188, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.200
if.merge.200: ; preds = %if.else.199, %if.then.198
%bp = phi { ptr, i64 } [ { ptr @str.187, i64 4 }, %if.then.198 ], [ %callN, %if.else.199 ]
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.214, label %if.else.215
if.then.214: ; preds = %entry
br label %if.merge.216
if.else.215: ; 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.192, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.191, i64 11 }, { ptr, i64 } %callN)
br label %if.merge.216
if.merge.216: ; preds = %if.else.215, %if.then.214
%bp = phi { ptr, i64 } [ { ptr @str.190, i64 4 }, %if.then.214 ], [ %callN, %if.else.215 ]
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.217, label %if.else.218
if.then.217: ; preds = %entry
br label %if.merge.219
if.else.218: ; 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.195, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.194, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.219
if.merge.219: ; preds = %if.else.218, %if.then.217
%bp = phi { ptr, i64 } [ { ptr @str.193, i64 4 }, %if.then.217 ], [ %callN, %if.else.218 ]
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.220, label %if.else.221
if.then.220: ; preds = %entry
br label %if.merge.222
if.else.221: ; 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.198, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.197, i64 11 }, { ptr, i64 } %callN)
br label %if.merge.222
if.merge.222: ; preds = %if.else.221, %if.then.220
%bp = phi { ptr, i64 } [ { ptr @str.196, i64 4 }, %if.then.220 ], [ %callN, %if.else.221 ]
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.223, label %if.else.224
if.then.223: ; preds = %entry
br label %if.merge.225
if.else.224: ; 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.201, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.200, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.225
if.merge.225: ; preds = %if.else.224, %if.then.223
%bp = phi { ptr, i64 } [ { ptr @str.199, i64 4 }, %if.then.223 ], [ %callN, %if.else.224 ]
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.226, label %if.else.227
if.then.226: ; preds = %entry
br label %if.merge.228
if.else.227: ; 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.204, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.203, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.228
if.merge.228: ; preds = %if.else.227, %if.then.226
%bp = phi { ptr, i64 } [ { ptr @str.202, i64 4 }, %if.then.226 ], [ %callN, %if.else.227 ]
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.229, label %if.else.230
if.then.229: ; preds = %entry
br label %if.merge.231
if.else.230: ; 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.207, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.206, i64 9 }, { ptr, i64 } %callN)
br label %if.merge.231
if.merge.231: ; preds = %if.else.230, %if.then.229
%bp = phi { ptr, i64 } [ { ptr @str.205, i64 4 }, %if.then.229 ], [ %callN, %if.else.230 ]
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.232, label %if.else.233
if.then.232: ; preds = %entry
br label %if.merge.234
if.else.233: ; 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.210, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.209, i64 18 }, { ptr, i64 } %callN)
br label %if.merge.234
if.merge.234: ; preds = %if.else.233, %if.then.232
%bp = phi { ptr, i64 } [ { ptr @str.208, i64 4 }, %if.then.232 ], [ %callN, %if.else.233 ]
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.235, label %if.else.236
if.then.235: ; preds = %entry
br label %if.merge.237
if.else.236: ; 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.213, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.212, i64 12 }, { ptr, i64 } %callN)
br label %if.merge.237
if.merge.237: ; preds = %if.else.236, %if.then.235
%bp = phi { ptr, i64 } [ { ptr @str.211, i64 4 }, %if.then.235 ], [ %callN, %if.else.236 ]
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.238, label %if.else.239
if.then.238: ; preds = %entry
br label %if.merge.240
if.else.239: ; 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.216, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.215, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.240
if.merge.240: ; preds = %if.else.239, %if.then.238
%bp = phi { ptr, i64 } [ { ptr @str.214, i64 4 }, %if.then.238 ], [ %callN, %if.else.239 ]
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.241, label %if.else.242
if.then.241: ; preds = %entry
br label %if.merge.243
if.else.242: ; 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.219, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.218, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.243
if.merge.243: ; preds = %if.else.242, %if.then.241
%bp = phi { ptr, i64 } [ { ptr @str.217, i64 4 }, %if.then.241 ], [ %callN, %if.else.242 ]
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.244, label %if.else.245
if.then.244: ; preds = %entry
br label %if.merge.246
if.else.245: ; 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.222, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.221, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.246
if.merge.246: ; preds = %if.else.245, %if.then.244
%bp = phi { ptr, i64 } [ { ptr @str.220, i64 4 }, %if.then.244 ], [ %callN, %if.else.245 ]
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.247, label %if.else.248
if.then.247: ; preds = %entry
br label %if.merge.249
if.else.248: ; 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.225, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.224, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.249
if.merge.249: ; preds = %if.else.248, %if.then.247
%bp = phi { ptr, i64 } [ { ptr @str.223, i64 4 }, %if.then.247 ], [ %callN, %if.else.248 ]
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.250, label %if.else.251
if.then.250: ; preds = %entry
br label %if.merge.252
if.else.251: ; 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.228, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.227, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.252
if.merge.252: ; preds = %if.else.251, %if.then.250
%bp = phi { ptr, i64 } [ { ptr @str.226, i64 4 }, %if.then.250 ], [ %callN, %if.else.251 ]
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.253, label %if.else.254
if.then.253: ; preds = %entry
br label %if.merge.255
if.else.254: ; 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.231, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.230, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.255
if.merge.255: ; preds = %if.else.254, %if.then.253
%bp = phi { ptr, i64 } [ { ptr @str.229, i64 4 }, %if.then.253 ], [ %callN, %if.else.254 ]
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.256, label %if.else.257
if.then.256: ; preds = %entry
br label %if.merge.258
if.else.257: ; 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.234, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.233, i64 3 }, { ptr, i64 } %callN)
br label %if.merge.258
if.merge.258: ; preds = %if.else.257, %if.then.256
%bp = phi { ptr, i64 } [ { ptr @str.232, i64 4 }, %if.then.256 ], [ %callN, %if.else.257 ]
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.259, label %if.else.260
if.then.259: ; preds = %entry
br label %if.merge.261
if.else.260: ; 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.237, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.236, i64 5 }, { ptr, i64 } %callN)
br label %if.merge.261
if.merge.261: ; preds = %if.else.260, %if.then.259
%bp = phi { ptr, i64 } [ { ptr @str.235, i64 4 }, %if.then.259 ], [ %callN, %if.else.260 ]
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.262, label %if.else.263
if.then.262: ; preds = %entry
br label %if.merge.264
if.else.263: ; 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.240, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.239, i64 4 }, { ptr, i64 } %callN)
br label %if.merge.264
if.merge.264: ; preds = %if.else.263, %if.then.262
%bp = phi { ptr, i64 } [ { ptr @str.238, i64 4 }, %if.then.262 ], [ %callN, %if.else.263 ]
ret { ptr, i64 } %bp
}
declare i64 @write(i32, ptr, i64)