std: the prelude becomes a pure re-export facade — implementations move to std/core.sx, std/fmt.sx, std/list.sx

std.sx now contains only alias declarations (the re-export mechanism:
own decls carry one flat-import level) over three part-files: core.sx
(builtins, libc escape hatch, Source_Location/Allocator/Context/Into,
the reserved `string` decl — which needs and permits no alias), fmt.sx
(print/format/any_to_string/string ops/cstring/alloc_slice), list.sx
(List). The namespace tail is unchanged; the part-file namespaces
(core/fmt/list) carry alongside it. Consumer surface is byte-identical
— every bare prelude name resolves through the aliases (0120/0121
machinery). 37 .ir snapshots re-pinned: pure string-constant
renumbering from the changed import graph (digit-normalized diff is
empty). Gates: zig build test 426/426, suite 588/588, m3te 23/23,
game SxChess builds + bundles.
This commit is contained in:
agra
2026-06-11 19:25:49 +03:00
parent 340be402a5
commit 49a36bb492
43 changed files with 35649 additions and 35322 deletions

View File

@@ -577,8 +577,8 @@ Wiring a new bundling step:
| `implementation_plan.md` | Archive of completed work (closures, protocols, etc.). Do not pick up tasks from here. | | `implementation_plan.md` | Archive of completed work (closures, protocols, etc.). Do not pick up tasks from here. |
| `readme.md` | User-facing language overview — **maintained**. Update it whenever a user-facing sx change lands (new/changed syntax, semantics, gating diagnostics, language behavior), per the docs-track-changes rule. | | `readme.md` | User-facing language overview — **maintained**. Update it whenever a user-facing sx change lands (new/changed syntax, semantics, gating diagnostics, language behavior), per the docs-track-changes rule. |
| `CLAUDE.md` | This file. Session instructions. | | `CLAUDE.md` | This file. Session instructions. |
| `library/modules/std.sx` | The prelude (print/format/List/string ops/Context/Allocator) + the namespace tail (`mem`/`xml`/`log`/`fs`/`process`/`socket`/`json`/`cli`/`hash`/`test` carried to flat importers). | | `library/modules/std.sx` | The prelude FACADE — pure re-exports (alias decls) over the part-files `std/core.sx` (builtins, libc escape hatch, Context/Allocator/Into/Source_Location/string), `std/fmt.sx` (print/format/*_to_string/string ops), `std/list.sx` (List) + the namespace tail (`mem`/`xml`/`log`/`fs`/`process`/`socket`/`json`/`cli`/`hash`/`test` carried to flat importers). No implementations live here. |
| `library/modules/std/` | Stdlib modules: mem (allocators), fs, process, socket, json, cli, hash, xml, log, trace, test — all but trace carried by the std.sx tail; direct file imports give bare access. | | `library/modules/std/` | Stdlib modules: core, fmt, list (the prelude part-files — consumers reach them through std.sx, not directly), mem (allocators), fs, process, socket, json, cli, hash, xml, log, trace, test — all but trace and the part-files carried by the std.sx tail; direct file imports give bare access. |
| `library/modules/ffi/` | FFI bindings: objc, objc_block, sdl3, opengl, raylib, stb, stb_truetype, wasm. | | `library/modules/ffi/` | FFI bindings: objc, objc_block, sdl3, opengl, raylib, stb, stb_truetype, wasm. |
| `library/modules/math/` | scalar / vector2 / matrix44 — one spelling: `#import "modules/math"` (directory import). | | `library/modules/math/` | scalar / vector2 / matrix44 — one spelling: `#import "modules/math"` (directory import). |
| `library/modules/build.sx` | `BuildOptions` compile-time build DSL. See "Bundling lives in sx" above. | | `library/modules/build.sx` | `BuildOptions` compile-time build DSL. See "Bundling lives in sx" above. |

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -12,6 +12,51 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind
declare void @out.1(ptr) #0
; Function Attrs: nounwind
declare ptr @cstring(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @int_to_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @uint_to_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @bool_to_string(ptr, i1) #0
; Function Attrs: nounwind
declare ptr @float_to_string(ptr, double) #0
; Function Attrs: nounwind
declare void @hex_group(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare [4 x i64] @decompose_u16x4(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @int_to_hex_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @concat(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @any_to_string(ptr, [2 x i64]) #0
; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0
; Function Attrs: nounwind
declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
@@ -94,106 +139,67 @@ declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @cstring(ptr, i64) #0 declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @int_to_string(ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @uint_to_string(ptr, i64) #0 declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @bool_to_string(ptr, i1) #0 declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @float_to_string(ptr, double) #0 declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @hex_group(ptr, ptr, i64, i64) #0 declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare [4 x i64] @decompose_u16x4(ptr, i64) #0 declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @int_to_hex_string(ptr, i64) #0 declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @concat(ptr, ptr, ptr) #0 declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0 declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @any_to_string(ptr, [2 x i64]) #0 declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0 declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -369,166 +375,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -726,64 +732,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -813,97 +819,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -942,7 +948,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i64 @accept_c(ptr %0) #0 { define internal i64 @accept_c(ptr %0) #0 {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -2,30 +2,30 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null
@str.144 = private unnamed_addr constant [5 x i8] c"noop\00", align 1 @str.144 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.145 = private unnamed_addr constant [4 x i8] c"()V\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @SX_JNI_CLS_noop____V = internal global ptr null
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @SX_JNI_MID_noop____V = internal global ptr null
@str.146 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.147 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.149 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.150 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -39,85 +39,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -333,7 +255,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -429,7 +351,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -437,7 +359,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -447,13 +369,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -461,7 +383,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -475,7 +397,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -483,7 +405,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -494,7 +416,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -551,7 +473,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -559,7 +481,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -570,7 +492,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -590,7 +512,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -598,7 +520,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -609,7 +531,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -619,67 +541,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -855,166 +861,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1212,64 +1218,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1299,97 +1305,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1428,7 +1434,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
@@ -1456,7 +1462,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont br label %jni.cont
@@ -1481,7 +1487,7 @@ jni.miss7: ; preds = %jni.cont
store ptr %jni.global.cls12, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls12, ptr @SX_JNI_CLS_noop____V, align 8
%9 = getelementptr inbounds ptr, ptr %jni.ifs4, i32 33 %9 = getelementptr inbounds ptr, ptr %jni.ifs4, i32 33
%jni.GetMethodID13 = load ptr, ptr %9, align 8 %jni.GetMethodID13 = load ptr, ptr %9, align 8
%jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.144, ptr @str.145) %jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.146, ptr @str.147)
store ptr %jni.fresh.mid14, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid14, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont8 br label %jni.cont8
@@ -1533,14 +1539,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.148, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.149, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1556,6 +1562,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.150, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1 @str.144 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()I\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()I\00", align 1
@SX_JNI_CLS_getCount____I = internal global ptr null @SX_JNI_CLS_getCount____I = internal global ptr null
@SX_JNI_MID_getCount____I = internal global ptr null @SX_JNI_MID_getCount____I = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i32 @read_int(ptr %0, ptr %1, ptr %2) #0 { define internal i32 @read_int(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getCount____I, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getCount____I, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getCount____I, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getCount____I, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1 @str.144 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()J\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()J\00", align 1
@SX_JNI_CLS_currentTimeMillis____J = internal global ptr null @SX_JNI_CLS_currentTimeMillis____J = internal global ptr null
@SX_JNI_MID_currentTimeMillis____J = internal global ptr null @SX_JNI_MID_currentTimeMillis____J = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i64 @read_long(ptr %0, ptr %1, ptr %2) #0 { define internal i64 @read_long(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_currentTimeMillis____J, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_currentTimeMillis____J, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_currentTimeMillis____J, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_currentTimeMillis____J, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1 @str.144 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()D\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()D\00", align 1
@SX_JNI_CLS_getValue____D = internal global ptr null @SX_JNI_CLS_getValue____D = internal global ptr null
@SX_JNI_MID_getValue____D = internal global ptr null @SX_JNI_MID_getValue____D = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal double @read_double(ptr %0, ptr %1, ptr %2) #0 { define internal double @read_double(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getValue____D, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getValue____D, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getValue____D, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getValue____D, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1 @str.144 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1
@SX_JNI_CLS_isShown____Z = internal global ptr null @SX_JNI_CLS_isShown____Z = internal global ptr null
@SX_JNI_MID_isShown____Z = internal global ptr null @SX_JNI_MID_isShown____Z = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i1 @read_bool(ptr %0, ptr %1, ptr %2) #0 { define internal i1 @read_bool(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_isShown____Z, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_isShown____Z, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_isShown____Z, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_isShown____Z, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1 @str.144 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.143 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1 @str.145 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1
@SX_JNI_CLS_getWindow____Landroid_view_Window_ = internal global ptr null @SX_JNI_CLS_getWindow____Landroid_view_Window_ = internal global ptr null
@SX_JNI_MID_getWindow____Landroid_view_Window_ = internal global ptr null @SX_JNI_MID_getWindow____Landroid_view_Window_ = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal ptr @get_window(ptr %0, ptr %1, ptr %2) #0 { define internal ptr @get_window(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Landroid_view_Window_, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Landroid_view_Window_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Landroid_view_Window_, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Landroid_view_Window_, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [4 x i8] c"max\00", align 1 @str.144 = private unnamed_addr constant [4 x i8] c"max\00", align 1
@str.143 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1 @str.145 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1
@SX_JNI_CLS_max___II_I = internal global ptr null @SX_JNI_CLS_max___II_I = internal global ptr null
@SX_JNI_MID_max___II_I = internal global ptr null @SX_JNI_MID_max___II_I = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i32 @call_static_max(ptr %0, ptr %1, ptr %2) #0 { define internal i32 @call_static_max(ptr %0, ptr %1, ptr %2) #0 {
@@ -1451,7 +1457,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_max___II_I, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_max___II_I, align 8
%4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 113 %4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 113
%jni.GetStaticMethodID = load ptr, ptr %4, align 8 %jni.GetStaticMethodID = load ptr, ptr %4, align 8
%jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_max___II_I, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_max___II_I, align 8
br label %jni.cont br label %jni.cont
@@ -1505,14 +1511,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1528,6 +1534,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1 @str.144 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.143 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1 @str.145 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1
@SX_JNI_CLS_getWindow____Ljava_lang_Object_ = internal global ptr null @SX_JNI_CLS_getWindow____Ljava_lang_Object_ = internal global ptr null
@SX_JNI_MID_getWindow____Ljava_lang_Object_ = internal global ptr null @SX_JNI_MID_getWindow____Ljava_lang_Object_ = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
@@ -1455,7 +1461,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Ljava_lang_Object_, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Ljava_lang_Object_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Ljava_lang_Object_, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Ljava_lang_Object_, align 8
br label %jni.cont br label %jni.cont
@@ -1508,14 +1514,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1531,6 +1537,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1 @str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.127 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.129 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.128 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.130 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.129 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.131 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.130 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.132 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.131 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.133 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.132 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.134 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.133 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.135 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.134 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.136 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.135 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.137 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.136 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.138 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.137 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.139 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.138 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.140 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.139 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.141 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.140 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.142 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.141 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.143 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.142 = private unnamed_addr constant [5 x i8] c"noop\00", align 1 @str.144 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.143 = private unnamed_addr constant [4 x i8] c"()V\00", align 1 @str.145 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null @SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null @SX_JNI_MID_noop____V = internal global ptr null
@str.144 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.146 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.147 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.148 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -37,85 +37,7 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.1(ptr) #0
; Function Attrs: nounwind
define internal ptr @CAllocator.alloc_bytes(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_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes(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_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 { define internal { ptr, i64 } @cstring(ptr %0, i64 %1) #0 {
@@ -331,7 +253,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8 store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.129, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +349,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11 if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -435,7 +357,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.129, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -445,13 +367,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.130, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15 br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11 if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.131, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -459,7 +381,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.132, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +395,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12 if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.133, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -481,7 +403,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.134, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -492,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.135, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +471,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31 if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.136, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -557,7 +479,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.137, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -568,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.138, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +510,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4 if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.139, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, 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
@@ -596,7 +518,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.140, i64 2 }) %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 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.141, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.143, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38 br label %if.merge.38
@@ -617,67 +539,151 @@ if.merge.38: ; preds = %if.then.37, %while.
} }
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 define internal ptr @CAllocator.alloc_bytes(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 ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 define internal void @CAllocator.dealloc_bytes(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 ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @GPA.init(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare ptr @GPA.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare void @GPA.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.add_chunk(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0 declare void @Arena.init(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0 declare void @Arena.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0 declare void @Arena.deinit(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0 declare ptr @Arena.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @Arena.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0 declare void @BufAlloc.init(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0 declare void @BufAlloc.reset(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0 declare ptr @BufAlloc.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0 declare void @TrackingAllocator.init(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0 declare void @TrackingAllocator.report(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0 declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -853,166 +859,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1210,64 +1216,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -1297,97 +1303,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -1426,7 +1432,7 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
@@ -1454,7 +1460,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.142, ptr @str.143) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.144, ptr @str.145)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont br label %jni.cont
@@ -1506,14 +1512,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.146, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.145, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.147, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8 %load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1529,6 +1535,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.148, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }

View File

@@ -2,10 +2,10 @@
@g_held_view = internal global ptr null @g_held_view = internal global ptr null
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null } @__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [9 x i8] c"onCreate\00", align 1 @str = private unnamed_addr constant [9 x i8] c"onCreate\00", align 1
@str.164 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1 @str.166 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1
@jni.parent.path = private unnamed_addr constant [21 x i8] c"android/app/Activity\00", align 1 @jni.parent.path = private unnamed_addr constant [21 x i8] c"android/app/Activity\00", align 1
@str.165 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1 @str.167 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
@str.166 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1 @str.168 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1
@jni.ctor.path = private unnamed_addr constant [25 x i8] c"android/view/SurfaceView\00", align 1 @jni.ctor.path = private unnamed_addr constant [25 x i8] c"android/view/SurfaceView\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
@@ -19,6 +19,51 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64) declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind
declare void @out.1(ptr) #0
; Function Attrs: nounwind
declare ptr @cstring(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @int_to_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @uint_to_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @bool_to_string(ptr, i1) #0
; Function Attrs: nounwind
declare ptr @float_to_string(ptr, double) #0
; Function Attrs: nounwind
declare void @hex_group(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare [4 x i64] @decompose_u16x4(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @int_to_hex_string(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @concat(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @any_to_string(ptr, [2 x i64]) #0
; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0
; Function Attrs: nounwind
declare void @out.2(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #0
@@ -101,106 +146,67 @@ declare ptr @TrackingAllocator.alloc_bytes(ptr, ptr, i64) #0
declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @cstring(ptr, i64) #0 declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @int_to_string(ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.4(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @uint_to_string(ptr, i64) #0 declare void @CAllocator.dealloc_bytes.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @bool_to_string(ptr, i1) #0 declare i64 @GPA.init.6(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @float_to_string(ptr, double) #0 declare ptr @GPA.alloc_bytes.7(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @hex_group(ptr, ptr, i64, i64) #0 declare void @GPA.dealloc_bytes.8(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare [4 x i64] @decompose_u16x4(ptr, i64) #0 declare void @Arena.add_chunk.9(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @int_to_hex_string(ptr, i64) #0 declare void @Arena.init.10(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @concat(ptr, ptr, ptr) #0 declare void @Arena.reset.11(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0 declare void @Arena.deinit.12(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @Arena.alloc_bytes.13(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @any_to_string(ptr, [2 x i64]) #0 declare void @Arena.dealloc_bytes.14(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0 declare void @BufAlloc.init.15(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0 declare void @BufAlloc.reset.16(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.17(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.18(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.4(ptr) #0 declare void @TrackingAllocator.init.19(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0 declare i64 @TrackingAllocator.leak_count.20(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0 declare void @TrackingAllocator.report.21(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.22(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @TrackingAllocator.dealloc_bytes.23(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.reset.9(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.10(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.init.13(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.14(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.19(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.20(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.21(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0 declare ptr @escape(ptr, ptr) #0
@@ -376,166 +382,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0 declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.22(i32, ptr, i64) #0 declare i64 @read.24(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.23(i32) #0 declare i32 @close.25(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0 declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0 declare ptr @mem_realloc.26(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0 declare ptr @CAllocator.alloc_bytes.27(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0 declare void @CAllocator.dealloc_bytes.28(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @GPA.init.27(ptr) #0 declare i64 @GPA.init.29(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0 declare ptr @GPA.alloc_bytes.30(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0 declare void @GPA.dealloc_bytes.31(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0 declare void @Arena.add_chunk.32(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0 declare void @Arena.init.33(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.reset.32(ptr, ptr) #0 declare void @Arena.reset.34(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.deinit.33(ptr, ptr) #0 declare void @Arena.deinit.35(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0 declare ptr @Arena.alloc_bytes.36(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0 declare void @Arena.dealloc_bytes.37(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.init.36(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0 declare void @BufAlloc.init.38(ptr sret({ ptr, i64, i64 }), ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.reset.37(ptr, ptr) #0 declare void @BufAlloc.reset.39(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0 declare ptr @BufAlloc.alloc_bytes.40(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0 declare void @BufAlloc.dealloc_bytes.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0 declare void @TrackingAllocator.init.42(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0 declare i64 @TrackingAllocator.leak_count.43(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.report.42(ptr, ptr) #0 declare void @TrackingAllocator.report.44(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0 declare ptr @TrackingAllocator.alloc_bytes.45(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0 declare void @TrackingAllocator.dealloc_bytes.46(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.45(ptr, i32, ...) #0 declare i32 @open.47(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.46(i32) #0 declare i32 @close.48(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.47(i32, ptr, i64) #0 declare i64 @read.49(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.48(i32, i64, i32) #0 declare i64 @lseek.50(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.49(ptr) #0 declare i32 @unlink.51(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.50(ptr) #0 declare i32 @rmdir.52(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.51(ptr, i32) #0 declare i32 @mkdir.53(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.52(ptr, i32) #0 declare i32 @access.54(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.53(ptr, i32) #0 declare i32 @chmod.55(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.54(ptr, ptr) #0 declare i32 @rename.56(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.55(ptr, ptr) #0 declare i1 @File.is_valid.57(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.56(ptr, ptr) #0 declare i1 @File.close.58(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.57(ptr, ptr, ptr) #0 declare i64 @File.read.59(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.58(ptr, ptr, ptr) #0 declare i64 @File.write.60(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0 declare i64 @File.seek.61(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.60(ptr, i64) #0 declare i32 @mode_to_flags.62(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.61(ptr, ptr, i64) #0 declare i64 @open_file.63(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.64(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.63(ptr, ptr, ptr) #0 declare i1 @write_file.65(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.64(ptr, ptr, ptr) #0 declare i1 @append_file.66(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.65(ptr, ptr) #0 declare i1 @exists.67(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.66(ptr, ptr) #0 declare i1 @delete_file.68(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.67(ptr, ptr) #0 declare i1 @delete_dir.69(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.68(ptr, ptr) #0 declare i1 @create_dir.70(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.69(ptr, ptr, i32) #0 declare i1 @set_mode.71(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.70(ptr, ptr, ptr) #0 declare i1 @move.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.71(ptr, ptr) #0 declare i1 @create_dir_all.73(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.72(ptr, ptr, ptr) #0 declare i1 @copy_file.74(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.73(ptr, ptr) #0 declare ptr @basename.75(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0 declare ptr @dirname.76(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0 declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -733,64 +739,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0 declare i64 @build_options() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @spaces.75(ptr, i32) #0 declare ptr @spaces.77(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_len.76() #0 declare i32 @sx_trace_len.78() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @sx_trace_truncated.77() #0 declare i32 @sx_trace_truncated.79() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.78(i32) #0 declare i64 @sx_trace_frame_at.80(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @to_string.79(ptr) #0 declare ptr @to_string.81(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_current.80(ptr) #0 declare void @print_current.82(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @print_interpreter_frames.81(ptr) #0 declare void @print_interpreter_frames.83(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @popen.82(ptr, ptr) #0 declare ptr @popen.84(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @pclose.83(ptr) #0 declare i32 @pclose.85(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @fread.84(ptr, i64, i64, ptr) #0 declare i64 @fread.86(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @feof.85(ptr) #0 declare i32 @feof.87(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @getenv.86(ptr) #0 declare ptr @getenv.88(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @strlen.87(ptr) #0 declare i64 @strlen.89(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @system.88(ptr) #0 declare i32 @system.90(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0 declare void @run.91(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @env.92(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @find_executable.93(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @_exit.92(i32) #0 declare void @_exit.94(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @exit.93(ptr, i8, ptr) #0 declare void @exit.95(ptr, i8, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.94(ptr, i1, ptr, ptr) #0 declare void @assert.96(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0 declare ptr @_NSGetArgv() #0
@@ -820,97 +826,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0 declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @parse.95(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0 declare void @parse.97(ptr sret({ { { ptr, i64 }, { ptr, i64 }, i64, i1, { ptr, i64 }, { ptr, i64 }, [16 x { i1, { ptr, i64 } }] }, i32 }), ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @open.96(ptr, i32, ...) #0 declare i32 @open.98(ptr, i32, ...) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @close.97(i32) #0 declare i32 @close.99(i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @read.98(i32, ptr, i64) #0 declare i64 @read.100(i32, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @lseek.99(i32, i64, i32) #0 declare i64 @lseek.101(i32, i64, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @unlink.100(ptr) #0 declare i32 @unlink.102(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rmdir.101(ptr) #0 declare i32 @rmdir.103(ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mkdir.102(ptr, i32) #0 declare i32 @mkdir.104(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @access.103(ptr, i32) #0 declare i32 @access.105(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @chmod.104(ptr, i32) #0 declare i32 @chmod.106(ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @rename.105(ptr, ptr) #0 declare i32 @rename.107(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.is_valid.106(ptr, ptr) #0 declare i1 @File.is_valid.108(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @File.close.107(ptr, ptr) #0 declare i1 @File.close.109(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.read.108(ptr, ptr, ptr) #0 declare i64 @File.read.110(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.write.109(ptr, ptr, ptr) #0 declare i64 @File.write.111(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0 declare i64 @File.seek.112(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i32 @mode_to_flags.111(ptr, i64) #0 declare i32 @mode_to_flags.113(ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @open_file.112(ptr, ptr, i64) #0 declare i64 @open_file.114(ptr, ptr, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0 declare void @read_file.115(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @write_file.114(ptr, ptr, ptr) #0 declare i1 @write_file.116(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @append_file.115(ptr, ptr, ptr) #0 declare i1 @append_file.117(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @exists.116(ptr, ptr) #0 declare i1 @exists.118(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_file.117(ptr, ptr) #0 declare i1 @delete_file.119(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @delete_dir.118(ptr, ptr) #0 declare i1 @delete_dir.120(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir.119(ptr, ptr) #0 declare i1 @create_dir.121(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @set_mode.120(ptr, ptr, i32) #0 declare i1 @set_mode.122(ptr, ptr, i32) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @move.121(ptr, ptr, ptr) #0 declare i1 @move.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @create_dir_all.122(ptr, ptr) #0 declare i1 @create_dir_all.124(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @copy_file.123(ptr, ptr, ptr) #0 declare i1 @copy_file.125(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @basename.124(ptr, ptr) #0 declare ptr @basename.126(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @dirname.125(ptr, ptr) #0 declare ptr @dirname.127(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0 declare i64 @rotr(ptr, i64, i64) #0
@@ -949,118 +955,118 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0 declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @assert.126(ptr, i1) #0 declare void @assert.128(ptr, i1) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.127(i64, ptr) #0 declare void @BuildOptions.add_link_flag.129(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.add_framework.128(i64, ptr) #0 declare void @BuildOptions.add_framework.130(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.129(i64, ptr) #0 declare void @BuildOptions.set_output_path.131(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.130(i64, ptr) #0 declare void @BuildOptions.set_wasm_shell.132(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.131(i64, ptr, ptr) #0 declare void @BuildOptions.add_asset_dir.133(i64, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.132(i64) #0 declare i64 @BuildOptions.asset_dir_count.134(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.133(i64, i64) #0 declare ptr @BuildOptions.asset_dir_src_at.135(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.134(i64, i64) #0 declare ptr @BuildOptions.asset_dir_dest_at.136(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.135(i64, ptr) #0 declare void @BuildOptions.set_post_link_callback.137(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.136(i64, ptr) #0 declare void @BuildOptions.set_post_link_module.138(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.137(i64) #0 declare ptr @BuildOptions.binary_path.139(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.138(i64, ptr) #0 declare void @BuildOptions.set_bundle_path.140(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.139(i64, ptr) #0 declare void @BuildOptions.set_bundle_id.141(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.140(i64, ptr) #0 declare void @BuildOptions.set_codesign_identity.142(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.141(i64, ptr) #0 declare void @BuildOptions.set_provisioning_profile.143(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.142(i64) #0 declare ptr @BuildOptions.bundle_path.144(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.143(i64) #0 declare ptr @BuildOptions.bundle_id.145(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.144(i64) #0 declare ptr @BuildOptions.codesign_identity.146(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.145(i64) #0 declare ptr @BuildOptions.provisioning_profile.147(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.146(i64) #0 declare ptr @BuildOptions.target_triple.148(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.147(i64) #0 declare i1 @BuildOptions.is_macos.149(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.148(i64) #0 declare i1 @BuildOptions.is_ios.150(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.149(i64) #0 declare i1 @BuildOptions.is_ios_device.151(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.150(i64) #0 declare i1 @BuildOptions.is_ios_simulator.152(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.151(i64) #0 declare i1 @BuildOptions.is_android.153(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.152(i64) #0 declare i64 @BuildOptions.framework_count.154(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.153(i64, i64) #0 declare ptr @BuildOptions.framework_at.155(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.154(i64) #0 declare i64 @BuildOptions.framework_path_count.156(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.155(i64, i64) #0 declare ptr @BuildOptions.framework_path_at.157(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.156(i64, ptr) #0 declare void @BuildOptions.set_manifest_path.158(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.157(i64, ptr) #0 declare void @BuildOptions.set_keystore_path.159(i64, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.158(i64) #0 declare ptr @BuildOptions.manifest_path.160(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.159(i64) #0 declare ptr @BuildOptions.keystore_path.161(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.160(i64) #0 declare i64 @BuildOptions.jni_main_count.162(i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.161(i64, i64) #0 declare ptr @BuildOptions.jni_main_foreign_path_at.163(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.162(i64, i64) #0 declare ptr @BuildOptions.jni_main_java_source_at.164(i64, i64) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare i64 @build_options.163() #0 declare i64 @build_options.165() #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define i32 @main() #0 { define i32 @main() #0 {
@@ -1100,7 +1106,7 @@ entry:
%jni.parent.cls = call ptr %jni.FindClass(ptr %load, ptr @jni.parent.path) %jni.parent.cls = call ptr %jni.FindClass(ptr %load, ptr @jni.parent.path)
%4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %4, align 8 %jni.GetMethodID = load ptr, ptr %4, align 8
%jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.164) %jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.166)
%jni.parent.cls.slot = alloca ptr, align 8 %jni.parent.cls.slot = alloca ptr, align 8
store ptr %jni.parent.cls, ptr %jni.parent.cls.slot, align 8 store ptr %jni.parent.cls, ptr %jni.parent.cls.slot, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 91 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 91
@@ -1116,7 +1122,7 @@ entry:
%jni.ctor.cls = call ptr %jni.FindClass9(ptr %load, ptr @jni.ctor.path) %jni.ctor.cls = call ptr %jni.FindClass9(ptr %load, ptr @jni.ctor.path)
%7 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 33 %7 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 33
%jni.GetMethodID10 = load ptr, ptr %7, align 8 %jni.GetMethodID10 = load ptr, ptr %7, align 8
%jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.165, ptr @str.166) %jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.167, ptr @str.168)
%8 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 28 %8 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 28
%jni.NewObject = load ptr, ptr %8, align 8 %jni.NewObject = load ptr, ptr %8, align 8
%jni.new.obj = call ptr %jni.NewObject(ptr %load, ptr %jni.ctor.cls, ptr %jni.ctor.mid, ptr %loadN) %jni.new.obj = call ptr %jni.NewObject(ptr %load, ptr %jni.ctor.cls, ptr %jni.ctor.mid, ptr %loadN)

View File

@@ -1,498 +1,76 @@
Vector :: ($N: int, $T: Type) -> Type #builtin; // The prelude facade: every name here is a RE-EXPORT. The implementations
out :: (str: string) -> void #builtin; // live in the part-files (std/core.sx — compiler-coupled primitives,
// sqrt :: (x: $T) -> T #builtin; // std/fmt.sx — formatting + string helpers, std/list.sx — List); each
// sin :: (x: $T) -> T #builtin; // alias below is an ordinary OWN declaration of this file, so a flat
// cos :: (x: $T) -> T #builtin; // `#import "modules/std.sx"` sees the whole prelude bare, one hop —
size_of :: ($T: Type) -> s64 #builtin; // visibility never chains, aliases are the re-export mechanism. The
align_of :: ($T: Type) -> s64 #builtin; // part-file namespaces (`core` / `fmt` / `list`) and the namespace tail at
// Low-level libc bindings, used by allocator implementations to avoid // the bottom are carried to flat importers the same one level.
// recursing through `context.allocator`. The bare `malloc`/`free`
// spellings are NOT declared: the Allocator protocol + the std/mem.sx
// helpers are the allocation surface (`free` is the typed slice helper
// there). Raw libc escape hatch: `libc_malloc` / `libc_free`.
libc_malloc :: (size: s64) -> *void #foreign libc "malloc";
libc_free :: (ptr: *void) -> void #foreign libc "free";
memcpy :: (dst: *void, src: *void, size: s64) -> *void #foreign libc "memcpy"; core :: #import "modules/std/core.sx";
memset :: (dst: *void, val: s64, size: s64) -> void #foreign libc "memset"; fmt :: #import "modules/std/fmt.sx";
type_of :: (val: $T) -> Type #builtin; list :: #import "modules/std/list.sx";
type_name :: ($T: Type) -> string #builtin;
field_count :: ($T: Type) -> s64 #builtin;
field_name :: ($T: Type, idx: s64) -> string #builtin;
field_value :: (s: $T, idx: s64) -> Any #builtin;
is_flags :: ($T: Type) -> bool #builtin;
type_is_unsigned :: ($T: Type) -> bool #builtin;
field_value_int :: ($T: Type, idx: s64) -> s64 #builtin;
field_index :: ($T: Type, val: T) -> s64 #builtin;
error_tag_name :: (e: $T) -> string #builtin;
// Call-site location, synthesized by the `#caller_location` directive when it
// is a parameter's default value (ERR E4.1b). `process.exit` / `assert` use it
// to report where they were invoked.
Source_Location :: struct {
file: string;
line: s32;
col: s32;
func: string;
}
string :: []u8 #builtin;
#import "modules/std/mem.sx"; #import "modules/std/mem.sx";
// --- Allocator protocol (impls live in std/mem.sx) --- // --- core: builtins, libc escape hatch, compiler-resolved types ---
// (`string` has no alias here: it is a reserved type name — its #builtin
// declaration in core.sx resolves program-wide and cannot be re-bound.)
// Bytes-level primitives carry the `_bytes` suffix so the typed Vector :: core.Vector;
// helpers in std/mem.sx own the bare names (`alloc(T, n)`, `free(s)`). out :: core.out;
Allocator :: protocol #inline { size_of :: core.size_of;
alloc_bytes :: (size: s64) -> *void; align_of :: core.align_of;
dealloc_bytes :: (ptr: *void); libc_malloc :: core.libc_malloc;
} libc_free :: core.libc_free;
memcpy :: core.memcpy;
memset :: core.memset;
type_of :: core.type_of;
type_name :: core.type_name;
field_count :: core.field_count;
field_name :: core.field_name;
field_value :: core.field_value;
is_flags :: core.is_flags;
type_is_unsigned :: core.type_is_unsigned;
field_value_int :: core.field_value_int;
field_index :: core.field_index;
error_tag_name :: core.error_tag_name;
Source_Location :: core.Source_Location;
Allocator :: core.Allocator;
Context :: core.Context;
Into :: core.Into;
// --- Context --- // --- fmt: formatting, string helpers, slice/string allocation ---
Context :: struct { cstring :: fmt.cstring;
allocator: Allocator; alloc_slice :: fmt.alloc_slice;
data: *void; int_to_string :: fmt.int_to_string;
} uint_to_string :: fmt.uint_to_string;
bool_to_string :: fmt.bool_to_string;
float_to_string :: fmt.float_to_string;
hex_group :: fmt.hex_group;
decompose_u16x4 :: fmt.decompose_u16x4;
int_to_hex_string :: fmt.int_to_hex_string;
concat :: fmt.concat;
substr :: fmt.substr;
path_join :: fmt.path_join;
struct_to_string :: fmt.struct_to_string;
vector_to_string :: fmt.vector_to_string;
array_to_string :: fmt.array_to_string;
slice_to_string :: fmt.slice_to_string;
pointer_to_string :: fmt.pointer_to_string;
flags_to_string :: fmt.flags_to_string;
enum_to_string :: fmt.enum_to_string;
optional_to_string :: fmt.optional_to_string;
any_to_string :: fmt.any_to_string;
build_format :: fmt.build_format;
format :: fmt.format;
print :: fmt.print;
// --- Slice & string allocation --- // --- list ---
cstring :: (size: s64) -> string { List :: list.List;
raw := context.allocator.alloc_bytes(size + 1);
memset(raw, 0, size + 1);
s : string = ---;
s.ptr = xx raw;
s.len = size;
s
}
alloc_slice :: ($T: Type, count: s64) -> []T {
raw := context.allocator.alloc_bytes(count * size_of(T));
memset(raw, 0, count * size_of(T));
s : []T = ---;
s.ptr = xx raw;
s.len = count;
s
}
int_to_string :: (n: s64) -> string {
if n == 0 { return "0"; }
neg := n < 0;
// Extract digits straight from `n` without ever negating it: `0 - n`
// overflows for s64::MIN (its magnitude is unrepresentable as a
// positive s64). sx `%` truncates toward zero, so `n % 10` keeps n's
// sign; take each remainder's absolute value for the digit.
tmp := cstring(20);
i := 19;
v := n;
while v != 0 {
d := v % 10;
if d < 0 { d = 0 - d; }
tmp[i] = d + 48;
v = v / 10;
i -= 1;
}
if neg { tmp[i] = 45; i -= 1; }
substr(tmp, i + 1, 19 - i)
}
// Unsigned decimal of `n`'s 64 bits — renders the full u64 range
// (0 .. 18446744073709551615). Used by `any_to_string` for unsigned
// integer values, which an s64-based formatter would misread (e.g. a
// u64 all-ones value as -1).
uint_to_string :: (n: s64) -> string {
if n == 0 { return "0"; }
// Long division by 10 across the four unsigned 16-bit limbs, most
// significant first. Each step folds the running remainder into the
// next limb; the per-step accumulator stays well within s64
// (max 9*65536 + 65535), so signed `/` and `%` are exact.
g := decompose_u16x4(n);
tmp := cstring(20);
i := 19;
while g[0] != 0 or g[1] != 0 or g[2] != 0 or g[3] != 0 {
rem := 0;
k := 0;
while k < 4 {
acc := rem * 65536 + g[k];
g[k] = acc / 10;
rem = acc % 10;
k += 1;
}
tmp[i] = rem + 48;
i -= 1;
}
substr(tmp, i + 1, 19 - i)
}
bool_to_string :: (b: bool) -> string {
if b then "true" else "false"
}
float_to_string :: (f: f64) -> string {
neg := f < 0.0;
v := if neg then 0.0 - f else f;
int_part := cast(s64) v;
frac := cast(s64) ((v - cast(f64) int_part) * 1000000.0);
if frac < 0 { frac = 0 - frac; }
istr := int_to_string(int_part);
fstr := int_to_string(frac);
il := istr.len;
fl := fstr.len;
prefix := if neg then 1 else 0;
total := prefix + il + 1 + 6;
buf := cstring(total);
pos := 0;
if neg { buf[0] = 45; pos = 1; }
memcpy(@buf[pos], istr.ptr, il);
pos = pos + il;
buf[pos] = 46;
pos += 1;
pad := 6 - fl;
memset(@buf[pos], 48, pad);
pos = pos + pad;
memcpy(@buf[pos], fstr.ptr, fl);
buf
}
hex_group :: (buf: string, offset: s64, val: s64) {
i := offset + 3;
v := val;
while i >= offset {
d := v % 16;
buf[i] = if d < 10 then d + 48 else d - 10 + 97;
v = v / 16;
i -= 1;
}
}
// Split the 64 bits of `n` into four unsigned 16-bit limbs, most
// significant first: [g3, g2, g1, g0]. A negative input is treated as
// its two's-complement unsigned bit pattern — each limb is corrected
// back into 0..65535 — so callers get correct unsigned arithmetic out
// of a signed-only integer type. Shared by the hex and unsigned-decimal
// formatters.
decompose_u16x4 :: (n: s64) -> [4]s64 {
g0 := n % 65536;
if g0 < 0 { g0 = g0 + 65536; }
r1 := (n - g0) / 65536;
g1 := r1 % 65536;
if g1 < 0 { g1 = g1 + 65536; }
r2 := (r1 - g1) / 65536;
g2 := r2 % 65536;
if g2 < 0 { g2 = g2 + 65536; }
r3 := (r2 - g2) / 65536;
g3 := r3 % 65536;
if g3 < 0 { g3 = g3 + 65536; }
limbs : [4]s64 = ---;
limbs[0] = g3;
limbs[1] = g2;
limbs[2] = g1;
limbs[3] = g0;
limbs
}
int_to_hex_string :: (n: s64) -> string {
if n == 0 { return "0"; }
g := decompose_u16x4(n);
buf := cstring(16);
hex_group(buf, 0, g[0]);
hex_group(buf, 4, g[1]);
hex_group(buf, 8, g[2]);
hex_group(buf, 12, g[3]);
// Skip leading zeros (keep at least 1 digit)
start := 0;
while start < 15 {
if buf[start] != 48 { break; }
start += 1;
}
substr(buf, start, 16 - start)
}
concat :: (a: string, b: string) -> string {
al := a.len;
bl := b.len;
buf := cstring(al + bl);
memcpy(buf.ptr, a.ptr, al);
memcpy(@buf[al], b.ptr, bl);
buf
}
substr :: (s: string, start: s64, len: s64) -> string {
buf := cstring(len);
memcpy(buf.ptr, @s[start], len);
buf
}
// Join path components with the POSIX separator ('/'). Skips empty
// components and collapses duplicate separators at component
// boundaries. Used for bundle paths where Apple .app and Android APK
// both expect POSIX-style paths.
path_join :: (..parts: []string) -> string {
result := "";
i := 0;
while i < parts.len {
p := parts[i];
if p.len > 0 {
if result.len > 0 {
tail := result[result.len - 1];
head := p[0];
if tail == 47 {
if head == 47 {
p = substr(p, 1, p.len - 1);
}
} else {
if head != 47 {
result = concat(result, "/");
}
}
}
result = concat(result, p);
}
i += 1;
}
result
}
struct_to_string :: (s: $T) -> string {
result := concat(type_name(T), "{");
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, field_name(T, i));
result = concat(result, ": ");
result = concat(result, any_to_string(field_value(s, i)));
i += 1;
}
concat(result, "}")
}
vector_to_string :: (v: $T) -> string {
result := "[";
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(v, i)));
i += 1;
}
concat(result, "]")
}
array_to_string :: (a: $T) -> string {
result := "[";
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(a, i)));
i += 1;
}
concat(result, "]")
}
slice_to_string :: (items: []$T) -> string {
result := "[";
i := 0;
while i < items.len {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(items, i)));
i += 1;
}
concat(result, "]")
}
pointer_to_string :: (p: $T) -> string {
addr : s64 = xx p;
if addr == 0 { "null" } else {
concat(type_name(T), concat("@0x", int_to_hex_string(addr)))
}
}
flags_to_string :: (val: $T) -> string {
v := cast(s64) val;
result := "";
i := 0;
while i < field_count(T) {
fv := field_value_int(T, i);
if v & fv {
if result.len > 0 { result = concat(result, " | "); }
result = concat(result, concat(".", field_name(T, i)));
}
i += 1;
}
if result.len == 0 { result = "0"; }
result
}
enum_to_string :: (u: $T) -> string {
if is_flags(T) { return flags_to_string(u); }
idx := field_index(T, u);
result := concat(".", field_name(T, idx));
payload := field_value(u, idx);
pstr := any_to_string(payload);
if pstr.len > 0 {
result = concat(result, concat("(", concat(pstr, ")")));
}
result
}
optional_to_string :: (o: $T) -> string {
if o == null { return "null"; }
return any_to_string(o!);
}
any_to_string :: (val: Any) -> string {
result := "<?>";
type := type_of(val);
if type == {
case void: result = "";
case int: {
if type_is_unsigned(type) { result = uint_to_string(xx val); }
else { result = int_to_string(xx val); }
}
case string: { s : string = xx val; result = s; }
case bool: result = bool_to_string(xx val);
case float: result = float_to_string(xx val);
case struct: result = struct_to_string(cast(type) val);
case enum: result = enum_to_string(cast(type) val);
case error_set: { tagid : u32 = xx val; result = error_tag_name(tagid); }
case vector: result = vector_to_string(cast(type) val);
case array: result = array_to_string(cast(type) val);
case slice: result = slice_to_string(cast(type) val);
case pointer: result = pointer_to_string(cast(type) val);
case optional: result = optional_to_string(cast(type) val);
case type: result = type_name(val);
}
result
}
build_format :: (fmt: string) -> string {
code := "result := \"\"; ";
seg_start := 0;
i := 0;
arg_idx := 0;
while i < fmt.len {
if fmt[i] == 123 {
if i + 1 < fmt.len {
if fmt[i + 1] == 125 {
if i > seg_start {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start));
code = concat(code, ")); ");
}
code = concat(code, "result = concat(result, any_to_string(args[");
code = concat(code, int_to_string(arg_idx));
code = concat(code, "])); ");
arg_idx += 1;
i += 2;
seg_start = i;
} else if fmt[i + 1] == 123 {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start + 1));
code = concat(code, ")); ");
i += 2;
seg_start = i;
} else {
i += 1;
}
} else {
i += 1;
}
} else if fmt[i] == 125 {
if i + 1 < fmt.len {
if fmt[i + 1] == 125 {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start + 1));
code = concat(code, ")); ");
i += 2;
seg_start = i;
} else {
i += 1;
}
} else {
i += 1;
}
} else {
i += 1;
}
}
if seg_start < fmt.len {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(fmt.len - seg_start));
code = concat(code, ")); ");
}
code
}
format :: ($fmt: string, ..$args) -> string {
#insert build_format(fmt);
#insert "return result;";
}
print :: ($fmt: string, ..$args) {
#insert build_format(fmt);
#insert "out(result);";
}
// User-space `xx` extension. `xx val : T` where the built-in conversion
// ladder makes no progress falls through to an `impl Into(T) for Source`
// lookup; the compiler monomorphises `convert` for the (Source, T) pair
// and emits a direct call. Compile-time only — no vtable, no runtime
// dispatch.
Into :: protocol(Target: Type) {
convert :: () -> Target;
}
List :: struct ($T: Type) {
items: [*]T = null;
len: s64 = 0;
cap: s64 = 0;
append :: (list: *List(T), item: T, alloc: Allocator = context.allocator) {
if list.len >= list.cap {
new_cap := if list.cap == 0 then 4 else list.cap * 2;
new_items : [*]T = xx alloc.alloc_bytes(new_cap * size_of(T));
if list.len > 0 {
memcpy(new_items, list.items, list.len * size_of(T));
alloc.dealloc_bytes(list.items);
}
list.items = new_items;
list.cap = new_cap;
}
list.items[list.len] = item;
list.len += 1;
}
ensure_capacity :: (list: *List(T), n: s64, alloc: Allocator = context.allocator) {
if list.cap >= n { return; }
new_cap := if list.cap == 0 then 4 else list.cap;
while new_cap < n { new_cap = new_cap * 2; }
new_items : [*]T = xx alloc.alloc_bytes(new_cap * size_of(T));
if list.len > 0 {
memcpy(new_items, list.items, list.len * size_of(T));
alloc.dealloc_bytes(list.items);
}
list.items = new_items;
list.cap = new_cap;
}
deinit :: (list: *List(T), alloc: Allocator = context.allocator) {
if list.items != null {
alloc.dealloc_bytes(list.items);
}
list.items = null;
list.len = 0;
list.cap = 0;
}
}
// --- The stdlib namespace tail: flat-importing std.sx carries these --- // --- The stdlib namespace tail: flat-importing std.sx carries these ---
mem :: #import "modules/std/mem.sx"; mem :: #import "modules/std/mem.sx";

View File

@@ -0,0 +1,68 @@
// The compiler-coupled prelude primitives: #builtin declarations, the libc
// escape hatch, and the types the compiler resolves by NAME program-wide
// (`Context`, `Allocator`, `Into`, `Source_Location`, `string`). Consumers
// never import this file directly — std.sx re-exports every name here.
Vector :: ($N: int, $T: Type) -> Type #builtin;
out :: (str: string) -> void #builtin;
// sqrt :: (x: $T) -> T #builtin;
// sin :: (x: $T) -> T #builtin;
// cos :: (x: $T) -> T #builtin;
size_of :: ($T: Type) -> s64 #builtin;
align_of :: ($T: Type) -> s64 #builtin;
// Low-level libc bindings, used by allocator implementations to avoid
// recursing through `context.allocator`. The bare `malloc`/`free`
// spellings are NOT declared: the Allocator protocol + the std/mem.sx
// helpers are the allocation surface (`free` is the typed slice helper
// there). Raw libc escape hatch: `libc_malloc` / `libc_free`.
libc_malloc :: (size: s64) -> *void #foreign libc "malloc";
libc_free :: (ptr: *void) -> void #foreign libc "free";
memcpy :: (dst: *void, src: *void, size: s64) -> *void #foreign libc "memcpy";
memset :: (dst: *void, val: s64, size: s64) -> void #foreign libc "memset";
type_of :: (val: $T) -> Type #builtin;
type_name :: ($T: Type) -> string #builtin;
field_count :: ($T: Type) -> s64 #builtin;
field_name :: ($T: Type, idx: s64) -> string #builtin;
field_value :: (s: $T, idx: s64) -> Any #builtin;
is_flags :: ($T: Type) -> bool #builtin;
type_is_unsigned :: ($T: Type) -> bool #builtin;
field_value_int :: ($T: Type, idx: s64) -> s64 #builtin;
field_index :: ($T: Type, val: T) -> s64 #builtin;
error_tag_name :: (e: $T) -> string #builtin;
// Call-site location, synthesized by the `#caller_location` directive when it
// is a parameter's default value (ERR E4.1b). `process.exit` / `assert` use it
// to report where they were invoked.
Source_Location :: struct {
file: string;
line: s32;
col: s32;
func: string;
}
string :: []u8 #builtin;
// --- Allocator protocol (impls live in std/mem.sx) ---
// Bytes-level primitives carry the `_bytes` suffix so the typed
// helpers in std/mem.sx own the bare names (`alloc(T, n)`, `free(s)`).
Allocator :: protocol #inline {
alloc_bytes :: (size: s64) -> *void;
dealloc_bytes :: (ptr: *void);
}
// --- Context ---
Context :: struct {
allocator: Allocator;
data: *void;
}
// User-space `xx` extension. `xx val : T` where the built-in conversion
// ladder makes no progress falls through to an `impl Into(T) for Source`
// lookup; the compiler monomorphises `convert` for the (Source, T) pair
// and emits a direct call. Compile-time only — no vtable, no runtime
// dispatch.
Into :: protocol(Target: Type) {
convert :: () -> Target;
}

392
library/modules/std/fmt.sx Normal file
View File

@@ -0,0 +1,392 @@
// Formatting + string helpers: the `*_to_string` family, `any_to_string`,
// the comptime `format` / `print` pair, and the slice/string allocation
// helpers they build on. Consumers never import this file directly —
// std.sx re-exports every public name here.
#import "modules/std/core.sx";
// --- Slice & string allocation ---
cstring :: (size: s64) -> string {
raw := context.allocator.alloc_bytes(size + 1);
memset(raw, 0, size + 1);
s : string = ---;
s.ptr = xx raw;
s.len = size;
s
}
alloc_slice :: ($T: Type, count: s64) -> []T {
raw := context.allocator.alloc_bytes(count * size_of(T));
memset(raw, 0, count * size_of(T));
s : []T = ---;
s.ptr = xx raw;
s.len = count;
s
}
int_to_string :: (n: s64) -> string {
if n == 0 { return "0"; }
neg := n < 0;
// Extract digits straight from `n` without ever negating it: `0 - n`
// overflows for s64::MIN (its magnitude is unrepresentable as a
// positive s64). sx `%` truncates toward zero, so `n % 10` keeps n's
// sign; take each remainder's absolute value for the digit.
tmp := cstring(20);
i := 19;
v := n;
while v != 0 {
d := v % 10;
if d < 0 { d = 0 - d; }
tmp[i] = d + 48;
v = v / 10;
i -= 1;
}
if neg { tmp[i] = 45; i -= 1; }
substr(tmp, i + 1, 19 - i)
}
// Unsigned decimal of `n`'s 64 bits — renders the full u64 range
// (0 .. 18446744073709551615). Used by `any_to_string` for unsigned
// integer values, which an s64-based formatter would misread (e.g. a
// u64 all-ones value as -1).
uint_to_string :: (n: s64) -> string {
if n == 0 { return "0"; }
// Long division by 10 across the four unsigned 16-bit limbs, most
// significant first. Each step folds the running remainder into the
// next limb; the per-step accumulator stays well within s64
// (max 9*65536 + 65535), so signed `/` and `%` are exact.
g := decompose_u16x4(n);
tmp := cstring(20);
i := 19;
while g[0] != 0 or g[1] != 0 or g[2] != 0 or g[3] != 0 {
rem := 0;
k := 0;
while k < 4 {
acc := rem * 65536 + g[k];
g[k] = acc / 10;
rem = acc % 10;
k += 1;
}
tmp[i] = rem + 48;
i -= 1;
}
substr(tmp, i + 1, 19 - i)
}
bool_to_string :: (b: bool) -> string {
if b then "true" else "false"
}
float_to_string :: (f: f64) -> string {
neg := f < 0.0;
v := if neg then 0.0 - f else f;
int_part := cast(s64) v;
frac := cast(s64) ((v - cast(f64) int_part) * 1000000.0);
if frac < 0 { frac = 0 - frac; }
istr := int_to_string(int_part);
fstr := int_to_string(frac);
il := istr.len;
fl := fstr.len;
prefix := if neg then 1 else 0;
total := prefix + il + 1 + 6;
buf := cstring(total);
pos := 0;
if neg { buf[0] = 45; pos = 1; }
memcpy(@buf[pos], istr.ptr, il);
pos = pos + il;
buf[pos] = 46;
pos += 1;
pad := 6 - fl;
memset(@buf[pos], 48, pad);
pos = pos + pad;
memcpy(@buf[pos], fstr.ptr, fl);
buf
}
hex_group :: (buf: string, offset: s64, val: s64) {
i := offset + 3;
v := val;
while i >= offset {
d := v % 16;
buf[i] = if d < 10 then d + 48 else d - 10 + 97;
v = v / 16;
i -= 1;
}
}
// Split the 64 bits of `n` into four unsigned 16-bit limbs, most
// significant first: [g3, g2, g1, g0]. A negative input is treated as
// its two's-complement unsigned bit pattern — each limb is corrected
// back into 0..65535 — so callers get correct unsigned arithmetic out
// of a signed-only integer type. Shared by the hex and unsigned-decimal
// formatters.
decompose_u16x4 :: (n: s64) -> [4]s64 {
g0 := n % 65536;
if g0 < 0 { g0 = g0 + 65536; }
r1 := (n - g0) / 65536;
g1 := r1 % 65536;
if g1 < 0 { g1 = g1 + 65536; }
r2 := (r1 - g1) / 65536;
g2 := r2 % 65536;
if g2 < 0 { g2 = g2 + 65536; }
r3 := (r2 - g2) / 65536;
g3 := r3 % 65536;
if g3 < 0 { g3 = g3 + 65536; }
limbs : [4]s64 = ---;
limbs[0] = g3;
limbs[1] = g2;
limbs[2] = g1;
limbs[3] = g0;
limbs
}
int_to_hex_string :: (n: s64) -> string {
if n == 0 { return "0"; }
g := decompose_u16x4(n);
buf := cstring(16);
hex_group(buf, 0, g[0]);
hex_group(buf, 4, g[1]);
hex_group(buf, 8, g[2]);
hex_group(buf, 12, g[3]);
// Skip leading zeros (keep at least 1 digit)
start := 0;
while start < 15 {
if buf[start] != 48 { break; }
start += 1;
}
substr(buf, start, 16 - start)
}
concat :: (a: string, b: string) -> string {
al := a.len;
bl := b.len;
buf := cstring(al + bl);
memcpy(buf.ptr, a.ptr, al);
memcpy(@buf[al], b.ptr, bl);
buf
}
substr :: (s: string, start: s64, len: s64) -> string {
buf := cstring(len);
memcpy(buf.ptr, @s[start], len);
buf
}
// Join path components with the POSIX separator ('/'). Skips empty
// components and collapses duplicate separators at component
// boundaries. Used for bundle paths where Apple .app and Android APK
// both expect POSIX-style paths.
path_join :: (..parts: []string) -> string {
result := "";
i := 0;
while i < parts.len {
p := parts[i];
if p.len > 0 {
if result.len > 0 {
tail := result[result.len - 1];
head := p[0];
if tail == 47 {
if head == 47 {
p = substr(p, 1, p.len - 1);
}
} else {
if head != 47 {
result = concat(result, "/");
}
}
}
result = concat(result, p);
}
i += 1;
}
result
}
struct_to_string :: (s: $T) -> string {
result := concat(type_name(T), "{");
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, field_name(T, i));
result = concat(result, ": ");
result = concat(result, any_to_string(field_value(s, i)));
i += 1;
}
concat(result, "}")
}
vector_to_string :: (v: $T) -> string {
result := "[";
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(v, i)));
i += 1;
}
concat(result, "]")
}
array_to_string :: (a: $T) -> string {
result := "[";
i := 0;
while i < field_count(T) {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(a, i)));
i += 1;
}
concat(result, "]")
}
slice_to_string :: (items: []$T) -> string {
result := "[";
i := 0;
while i < items.len {
if i > 0 { result = concat(result, ", "); }
result = concat(result, any_to_string(field_value(items, i)));
i += 1;
}
concat(result, "]")
}
pointer_to_string :: (p: $T) -> string {
addr : s64 = xx p;
if addr == 0 { "null" } else {
concat(type_name(T), concat("@0x", int_to_hex_string(addr)))
}
}
flags_to_string :: (val: $T) -> string {
v := cast(s64) val;
result := "";
i := 0;
while i < field_count(T) {
fv := field_value_int(T, i);
if v & fv {
if result.len > 0 { result = concat(result, " | "); }
result = concat(result, concat(".", field_name(T, i)));
}
i += 1;
}
if result.len == 0 { result = "0"; }
result
}
enum_to_string :: (u: $T) -> string {
if is_flags(T) { return flags_to_string(u); }
idx := field_index(T, u);
result := concat(".", field_name(T, idx));
payload := field_value(u, idx);
pstr := any_to_string(payload);
if pstr.len > 0 {
result = concat(result, concat("(", concat(pstr, ")")));
}
result
}
optional_to_string :: (o: $T) -> string {
if o == null { return "null"; }
return any_to_string(o!);
}
any_to_string :: (val: Any) -> string {
result := "<?>";
type := type_of(val);
if type == {
case void: result = "";
case int: {
if type_is_unsigned(type) { result = uint_to_string(xx val); }
else { result = int_to_string(xx val); }
}
case string: { s : string = xx val; result = s; }
case bool: result = bool_to_string(xx val);
case float: result = float_to_string(xx val);
case struct: result = struct_to_string(cast(type) val);
case enum: result = enum_to_string(cast(type) val);
case error_set: { tagid : u32 = xx val; result = error_tag_name(tagid); }
case vector: result = vector_to_string(cast(type) val);
case array: result = array_to_string(cast(type) val);
case slice: result = slice_to_string(cast(type) val);
case pointer: result = pointer_to_string(cast(type) val);
case optional: result = optional_to_string(cast(type) val);
case type: result = type_name(val);
}
result
}
build_format :: (fmt: string) -> string {
code := "result := \"\"; ";
seg_start := 0;
i := 0;
arg_idx := 0;
while i < fmt.len {
if fmt[i] == 123 {
if i + 1 < fmt.len {
if fmt[i + 1] == 125 {
if i > seg_start {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start));
code = concat(code, ")); ");
}
code = concat(code, "result = concat(result, any_to_string(args[");
code = concat(code, int_to_string(arg_idx));
code = concat(code, "])); ");
arg_idx += 1;
i += 2;
seg_start = i;
} else if fmt[i + 1] == 123 {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start + 1));
code = concat(code, ")); ");
i += 2;
seg_start = i;
} else {
i += 1;
}
} else {
i += 1;
}
} else if fmt[i] == 125 {
if i + 1 < fmt.len {
if fmt[i + 1] == 125 {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(i - seg_start + 1));
code = concat(code, ")); ");
i += 2;
seg_start = i;
} else {
i += 1;
}
} else {
i += 1;
}
} else {
i += 1;
}
}
if seg_start < fmt.len {
code = concat(code, "result = concat(result, substr(fmt, ");
code = concat(code, int_to_string(seg_start));
code = concat(code, ", ");
code = concat(code, int_to_string(fmt.len - seg_start));
code = concat(code, ")); ");
}
code
}
format :: ($fmt: string, ..$args) -> string {
#insert build_format(fmt);
#insert "return result;";
}
print :: ($fmt: string, ..$args) {
#insert build_format(fmt);
#insert "out(result);";
}

View File

@@ -0,0 +1,46 @@
// The growable container of the prelude. Consumers never import this file
// directly — std.sx re-exports `List`.
#import "modules/std/core.sx";
List :: struct ($T: Type) {
items: [*]T = null;
len: s64 = 0;
cap: s64 = 0;
append :: (list: *List(T), item: T, alloc: Allocator = context.allocator) {
if list.len >= list.cap {
new_cap := if list.cap == 0 then 4 else list.cap * 2;
new_items : [*]T = xx alloc.alloc_bytes(new_cap * size_of(T));
if list.len > 0 {
memcpy(new_items, list.items, list.len * size_of(T));
alloc.dealloc_bytes(list.items);
}
list.items = new_items;
list.cap = new_cap;
}
list.items[list.len] = item;
list.len += 1;
}
ensure_capacity :: (list: *List(T), n: s64, alloc: Allocator = context.allocator) {
if list.cap >= n { return; }
new_cap := if list.cap == 0 then 4 else list.cap;
while new_cap < n { new_cap = new_cap * 2; }
new_items : [*]T = xx alloc.alloc_bytes(new_cap * size_of(T));
if list.len > 0 {
memcpy(new_items, list.items, list.len * size_of(T));
alloc.dealloc_bytes(list.items);
}
list.items = new_items;
list.cap = new_cap;
}
deinit :: (list: *List(T), alloc: Allocator = context.allocator) {
if list.items != null {
alloc.dealloc_bytes(list.items);
}
list.items = null;
list.len = 0;
list.cap = 0;
}
}

View File

@@ -465,8 +465,11 @@ site.)
**Namespace aliases carry one level.** A namespaced import is an ordinary **Namespace aliases carry one level.** A namespaced import is an ordinary
declaration, and flat-importing the module that declares it makes the alias declaration, and flat-importing the module that declares it makes the alias
usable in the importer — there is no `pub` keyword. The stdlib prelude uses usable in the importer — there is no `pub` keyword. The stdlib prelude uses
exactly this: `#import "modules/std.sx"` gives every bare prelude name exactly this: std.sx is itself a pure re-export facade (every bare prelude
(`print`, `List`, `Context`, …) plus the carried namespaces of std's tail name is an alias into the `std/core.sx` / `std/fmt.sx` / `std/list.sx`
part-files), and `#import "modules/std.sx"` gives every bare prelude name
(`print`, `List`, `Context`, …) plus the carried namespaces — the
part-files (`core`, `fmt`, `list`) and std's tail
(`mem`, `fs`, `process`, `socket`, `json`, `cli`, `hash`, `xml`, `log`, `test`): (`mem`, `fs`, `process`, `socket`, `json`, `cli`, `hash`, `xml`, `log`, `test`):
```sx ```sx