Files
sx/examples/expected/1202-ffi-cc-c-large-aggregate.ir
agra ba28488d99 P5.5: migrate the 35 BuildOptions accessors off #compiler to VM-native abi(.compiler)
`BuildOptions :: struct #compiler { ...35 methods... }` becomes
`BuildOptions :: struct { }` (an opaque null-sentinel handle) plus 35 free
`ufcs (self: BuildOptions, …) abi(.compiler)` decls in build.sx, each serviced
by a new `comptime_vm.callBuildOptionFn` arm (off `callCompilerFn`). No legacy
`compiler_lib` handler: the names are registered in `bound_fns` with a single
bailing stub only so `weldedCompilerFn` accepts them.

- String lifetime: setters dupe the arg into the persistent `Vm.gpa` (the
  Compilation allocator, threaded into both `tryEval` and `runBuildCallback` —
  not the per-eval VM arena) and write/append to the threaded `BuildConfig`.
  Getters read the field/slice or compute the target predicate from the triple.
- Dispatch routing (Option B): a `#run`/const-init entry that directly calls a
  compiler-domain/welded fn (`emit_llvm.entryNeedsVm`) runs on the VM with no
  legacy fallback regardless of the `-Dcomptime-flat` gate, so gate-OFF stays
  green without a legacy BuildOptions handler (P5.7 retires the legacy interp).
- Mark the 5 `platform/bundle.sx` getter-calling helpers `abi(.compiler)` (they
  are comptime-only bundler code; otherwise their now-welded getter calls trip
  the runtime-call gate).
- 37 `.ir` snapshots regenerated (std transitively imports build.sx → string-
  pool/type-table indices shift); verified `.ir`-only, zero behavior-stream diffs.

BuildOptions `compiler_call` strict bails gone (1609/1614/1615 strict-clean);
1616 now bails on a separate, pre-existing unported bitwise/shift VM gap (`shr`),
to port first in P5.6. 703/0 both gates.

Also sweep the outdated "flat memory" terminology to "comptime/byte-addressable"
across comptime_vm + the plan/checkpoint/CLAUDE docs: the comptime VM is
arena-backed, byte-addressable memory where `Addr` is a real host pointer, not a
flat contiguous address space (flag names `-Dcomptime-flat`/`SX_COMPTIME_FLAT` kept).
2026-06-19 13:21:09 +03:00

1220 lines
31 KiB
Plaintext

@__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 }
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @out(ptr, ptr) #0
declare ptr @malloc(i64)
declare void @free(ptr)
declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64)
; Function Attrs: nounwind
declare void @out.1(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @alloc_string(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 i64 @cstring_len(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @from_cstring(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @to_cstring(ptr, ptr) #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, ptr) #0
; Function Attrs: nounwind
declare ptr @mem_realloc(ptr, ptr, ptr, i64, i64, i64) #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
declare i32 @open(ptr, i32, ...) #0
; Function Attrs: nounwind
declare i32 @close(i32) #0
; Function Attrs: nounwind
declare i64 @read(i32, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @lseek(i32, i64, i32) #0
; Function Attrs: nounwind
declare i32 @unlink(ptr) #0
; Function Attrs: nounwind
declare i32 @rmdir(ptr) #0
; Function Attrs: nounwind
declare i32 @mkdir(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @access(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @chmod(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @rename(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.is_valid(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @open_file(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @read_file(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @spaces(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @sx_trace_len() #0
; Function Attrs: nounwind
declare i32 @sx_trace_truncated() #0
; Function Attrs: nounwind
declare i64 @sx_trace_frame_at(i32) #0
; Function Attrs: nounwind
declare ptr @to_string(ptr) #0
; Function Attrs: nounwind
declare void @print_current(ptr) #0
; Function Attrs: nounwind
declare void @print_interpreter_frames(ptr) #0
; Function Attrs: nounwind
declare ptr @popen(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pclose(ptr) #0
; Function Attrs: nounwind
declare i64 @fread(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind
declare i32 @feof(ptr) #0
; Function Attrs: nounwind
declare ptr @getenv(ptr) #0
; Function Attrs: nounwind
declare i32 @system(ptr) #0
; Function Attrs: nounwind
declare void @run(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @env(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @find_executable(ptr, ptr) #0
; Function Attrs: nounwind
declare void @_exit(i32) #0
; Function Attrs: nounwind
declare void @exit(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare void @assert(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @socket(i32, i32, i32) #0
; Function Attrs: nounwind
declare i32 @setsockopt(i32, i32, i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @bind(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #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
declare i1 @File.is_valid.24(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.25(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.26(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.27(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.28(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.29(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @open_file.30(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @read_file.31(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file.32(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.33(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.34(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.35(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.36(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.37(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.38(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move.39(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.40(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.41(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.42(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.43(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Array.deinit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Object.put(ptr, ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Object.deinit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Sink.put_byte(ptr, ptr, i8) #0
; Function Attrs: nounwind
declare i32 @Sink.put(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Sink.flush(ptr, ptr) #0
; Function Attrs: nounwind
declare i8 @hex_digit(ptr, i64) #0
; Function Attrs: nounwind
declare i32 @write_u_escape(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare i32 @write_string(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @write_int(ptr, i64, ptr) #0
; Function Attrs: nounwind
declare i32 @write_value(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @write_array(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @write_object(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @write_to_buffer(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @write_to_file(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @hex_value(ptr, i8) #0
; Function Attrs: nounwind
declare i64 @encode_utf8(ptr, i64, ptr) #0
; Function Attrs: nounwind
declare void @Parser.skip_ws(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Parser.expect_lit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Parser.read_hex4(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @Parser.decode_into(ptr, ptr, i64, i64, ptr) #0
; Function Attrs: nounwind
declare void @Parser.parse_string(ptr sret({ { ptr, i64 }, i32 }), ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Parser.parse_number(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Parser.parse_array(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @Parser.parse_object(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @Parser.parse_value(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
; Function Attrs: nounwind
declare void @c_object_paths(ptr sret({ ptr, i64, i64 })) #0
; Function Attrs: nounwind
declare void @link_libraries(ptr sret({ ptr, i64, i64 })) #0
; Function Attrs: nounwind
declare ptr @emit_object() #0
; Function Attrs: nounwind
declare ptr @build_output() #0
; Function Attrs: nounwind
declare ptr @build_target() #0
; Function Attrs: nounwind
declare void @build_frameworks(ptr sret({ ptr, i64, i64 })) #0
; Function Attrs: nounwind
declare void @build_flags(ptr sret({ ptr, i64, i64 })) #0
; Function Attrs: nounwind
declare void @link(ptr, ptr, ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @build_options() #0
; Function Attrs: nounwind
declare void @add_link_flag(i64, ptr) #0
; Function Attrs: nounwind
declare void @add_framework(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_output_path(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_wasm_shell(i64, ptr) #0
; Function Attrs: nounwind
declare void @add_asset_dir(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @asset_dir_count(i64) #0
; Function Attrs: nounwind
declare ptr @asset_dir_src_at(i64, i64) #0
; Function Attrs: nounwind
declare ptr @asset_dir_dest_at(i64, i64) #0
; Function Attrs: nounwind
declare void @set_post_link_module(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @binary_path(i64) #0
; Function Attrs: nounwind
declare void @set_bundle_path(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_bundle_id(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_codesign_identity(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_provisioning_profile(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @bundle_path(i64) #0
; Function Attrs: nounwind
declare ptr @bundle_id(i64) #0
; Function Attrs: nounwind
declare ptr @codesign_identity(i64) #0
; Function Attrs: nounwind
declare ptr @provisioning_profile(i64) #0
; Function Attrs: nounwind
declare ptr @target_triple(i64) #0
; Function Attrs: nounwind
declare i1 @is_macos(i64) #0
; Function Attrs: nounwind
declare i1 @is_ios(i64) #0
; Function Attrs: nounwind
declare i1 @is_ios_device(i64) #0
; Function Attrs: nounwind
declare i1 @is_ios_simulator(i64) #0
; Function Attrs: nounwind
declare i1 @is_android(i64) #0
; Function Attrs: nounwind
declare i64 @framework_count(i64) #0
; Function Attrs: nounwind
declare ptr @framework_at(i64, i64) #0
; Function Attrs: nounwind
declare i64 @framework_path_count(i64) #0
; Function Attrs: nounwind
declare ptr @framework_path_at(i64, i64) #0
; Function Attrs: nounwind
declare void @set_manifest_path(i64, ptr) #0
; Function Attrs: nounwind
declare void @set_keystore_path(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @manifest_path(i64) #0
; Function Attrs: nounwind
declare ptr @keystore_path(i64) #0
; Function Attrs: nounwind
declare i64 @jni_main_count(i64) #0
; Function Attrs: nounwind
declare ptr @jni_main_runtime_path_at(i64, i64) #0
; Function Attrs: nounwind
declare ptr @jni_main_java_source_at(i64, i64) #0
; Function Attrs: nounwind
declare void @on_build(ptr) #0
; Function Attrs: nounwind
declare i1 @default_pipeline(ptr, {}) #0
; Function Attrs: nounwind
declare ptr @spaces.44(ptr, i32) #0
; Function Attrs: nounwind
declare ptr @to_string.45(ptr) #0
; Function Attrs: nounwind
declare void @print_current.46(ptr) #0
; Function Attrs: nounwind
declare void @print_interpreter_frames.47(ptr) #0
; Function Attrs: nounwind
declare void @run.48(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @env.49(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @find_executable.50(ptr, ptr) #0
; Function Attrs: nounwind
declare void @exit.51(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare void @assert.52(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0
; Function Attrs: nounwind
declare ptr @_NSGetArgc() #0
; Function Attrs: nounwind
declare void @exit_ok(ptr) #0
; Function Attrs: nounwind
declare void @exit_usage(ptr) #0
; Function Attrs: nounwind
declare i64 @os_argc(ptr) #0
; Function Attrs: nounwind
declare ptr @os_args(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Parsed.is_set(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind
declare void @parse.53(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
declare i1 @File.is_valid.54(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.55(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.56(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.57(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.58(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.59(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @open_file.60(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @read_file.61(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file.62(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.63(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.64(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.65(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.66(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.67(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.68(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move.69(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.70(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.71(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.72(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.73(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i64 @big_sigma0(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @big_sigma1(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @small_sigma0(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @small_sigma1(ptr, i64) #0
; Function Attrs: nounwind
declare void @Sha256.process_block(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Sha256.update(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare [64 x i8] @Sha256.final(ptr, ptr) #0
; Function Attrs: nounwind
declare i8 @nibble_hex(ptr, i64) #0
; Function Attrs: nounwind
declare void @init(ptr sret({ [8 x i64], [64 x i8], i64, i64 }), ptr) #0
; Function Attrs: nounwind
declare [64 x i8] @sha256_hex(ptr, ptr) #0
; Function Attrs: nounwind
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i64 @accept_c(ptr %0) #0 {
entry:
%byval.load = load { i64, i64, i64, i64 }, ptr %0, align 8
%alloca = alloca { i64, i64, i64, i64 }, align 8
store { i64, i64, i64, i64 } %byval.load, ptr %alloca, align 8
%load = load { i64, i64, i64, i64 }, ptr %alloca, align 8
%sg = extractvalue { i64, i64, i64, i64 } %load, 0
%loadN = load { i64, i64, i64, i64 }, ptr %alloca, align 8
%sgN = extractvalue { i64, i64, i64, i64 } %loadN, 1
%add = add i64 %sg, %sgN
%loadN = load { i64, i64, i64, i64 }, ptr %alloca, align 8
%sgN = extractvalue { i64, i64, i64, i64 } %loadN, 2
%addN = add i64 %add, %sgN
%loadN = load { i64, i64, i64, i64 }, ptr %alloca, align 8
%sgN = extractvalue { i64, i64, i64, i64 } %loadN, 3
%addN = add i64 %addN, %sgN
ret i64 %addN
}
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
%alloca = alloca { i64, i64, i64, i64 }, align 8
store { i64, i64, i64, i64 } { i64 1, i64 10, i64 100, i64 1000 }, ptr %alloca, align 8
%load = load { i64, i64, i64, i64 }, ptr %alloca, align 8
%byval.tmp = alloca { i64, i64, i64, i64 }, align 8
store { i64, i64, i64, i64 } %load, ptr %byval.tmp, align 8
%call = call i64 @accept_c(ptr %byval.tmp)
%icmp = icmp ne i64 %call, 1111
br i1 %icmp, label %if.then.0, label %if.merge.1
if.then.0: ; preds = %entry
ret i32 1
if.merge.1: ; preds = %entry
ret i32 0
}
; Function Attrs: nounwind
define internal ptr @__thunk_CAllocator_Allocator_alloc_bytes(ptr %0, ptr %1, i64 %2) #0 {
entry:
%call = call ptr @CAllocator.alloc_bytes(ptr %0, ptr %1, i64 %2)
ret ptr %call
}
; Function Attrs: nounwind
define internal void @__thunk_CAllocator_Allocator_dealloc_bytes(ptr %0, ptr %1, ptr %2) #0 {
entry:
call void @CAllocator.dealloc_bytes(ptr %0, ptr %1, ptr %2)
ret void
}
; Function Attrs: nounwind
define internal void @List__string.append(ptr %0, ptr %1, { ptr, i64 } %2, { ptr, ptr, ptr } %3) #0 {
entry:
%alloca = alloca ptr, align 8
%allocaN = alloca i64, align 8
%allocaN = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } %2, ptr %allocaN, align 8
%allocaN = alloca { ptr, ptr, ptr }, align 8
store { ptr, ptr, ptr } %3, ptr %allocaN, align 8
%load = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %load, align 8
%sg = extractvalue { ptr, i64, i64 } %loadN, 1
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 2
%icmp = icmp sge i64 %sg, %sgN
br i1 %icmp, label %if.then.2, label %if.merge.3
if.then.2: ; preds = %entry
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 2
%icmpN = icmp eq i64 %sgN, 0
br i1 %icmpN, label %if.then.4, label %if.else.5
if.merge.3: ; preds = %if.merge.8, %entry
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 1
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 0
%igp.ptr = getelementptr { ptr, i64 }, ptr %sgN, i64 %sgN
store { ptr, i64 } %loadN, ptr %igp.ptr, align 8
%loadN = load ptr, ptr %alloca, align 8
%gep = getelementptr inbounds nuw { ptr, i64, i64 }, ptr %loadN, i32 0, i32 1
%loadN = load i64, ptr %gep, align 8
%add = add i64 %loadN, 1
store i64 %add, ptr %gep, align 8
ret void
if.then.4: ; preds = %if.then.2
br label %if.merge.6
if.else.5: ; preds = %if.then.2
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 2
%mul = mul i64 %sgN, 2
br label %if.merge.6
if.merge.6: ; preds = %if.else.5, %if.then.4
%bp = phi i64 [ 4, %if.then.4 ], [ %mul, %if.else.5 ]
store i64 %bp, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%mulN = mul i64 %loadN, 16
%loadN = load { ptr, ptr, ptr }, ptr %allocaN, align 8
%sgN = extractvalue { ptr, ptr, ptr } %loadN, 0
%sgN = extractvalue { ptr, ptr, ptr } %loadN, 1
%icall = call ptr %sgN(ptr %0, ptr %sgN, i64 %mulN)
store ptr %icall, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 1
%icmpN = icmp sgt i64 %sgN, 0
br i1 %icmpN, label %if.then.7, label %if.merge.8
if.then.7: ; preds = %if.merge.6
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 0
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 1
%mulN = mul i64 %sgN, 16
%call = call ptr @memcpy(ptr %loadN, ptr %sgN, i64 %mulN)
%loadN = load ptr, ptr %alloca, align 8
%loadN = load { ptr, i64, i64 }, ptr %loadN, align 8
%sgN = extractvalue { ptr, i64, i64 } %loadN, 0
%loadN = load { ptr, ptr, ptr }, ptr %allocaN, align 8
%sgN = extractvalue { ptr, ptr, ptr } %loadN, 0
%sgN = extractvalue { ptr, ptr, ptr } %loadN, 2
call void %sgN(ptr %0, ptr %sgN, ptr %sgN)
br label %if.merge.8
if.merge.8: ; preds = %if.then.7, %if.merge.6
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%gepN = getelementptr inbounds nuw { ptr, i64, i64 }, ptr %loadN, i32 0, i32 0
store ptr %loadN, ptr %gepN, align 8
%loadN = load i64, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%gepN = getelementptr inbounds nuw { ptr, i64, i64 }, ptr %loadN, i32 0, i32 2
store i64 %loadN, ptr %gepN, align 8
br label %if.merge.3
}