mem: typed allocation helpers + drop bare malloc/free (Phase 2.2); resolve 0119 as |>-contract clarification

This commit is contained in:
agra
2026-06-11 16:17:39 +03:00
parent 3e10809d7e
commit 84e0fb0752
51 changed files with 33256 additions and 32716 deletions

View File

@@ -4,34 +4,34 @@
@__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_objc_cstr_dealloc = internal constant [8 x i8] c"dealloc\00"
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.162 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.163 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.164 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.165 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.166 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.167 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.168 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.169 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.170 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.171 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.172 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.173 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.174 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.175 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.176 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.177 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@str.178 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.164 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.165 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.166 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.167 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.168 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.169 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.170 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.171 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.172 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.173 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.174 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.175 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.176 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.177 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.178 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.179 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@str.180 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.181 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@OBJC_IVAR_NAME_ = private unnamed_addr constant [11 x i8] c"__sx_state\00"
@OBJC_IVAR_TYPE_ = private unnamed_addr constant [3 x i8] c"^v\00"
@OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
@OBJC_CLASS_NAME_.180 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_CLASS_NAME_.182 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"bump\00"
@OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.181 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.182 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.183 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.184 = private unnamed_addr constant [4 x i8] c"@@:\00"
@OBJC_METH_VAR_NAME_.183 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.184 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.185 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.186 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -44,6 +44,9 @@ declare ptr @memcpy(ptr, ptr, i64)
declare ptr @memset(ptr, i32, i64)
; 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:
@@ -336,7 +339,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.162, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.164, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -432,7 +435,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
if.then.12: ; preds = %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.163, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.165, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -440,7 +443,7 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.164, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.166, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -450,13 +453,13 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.165, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.167, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.13
if.merge.13: ; preds = %if.then.12, %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.166, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.168, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -464,7 +467,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.167, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.169, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -478,7 +481,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
if.then.23: ; preds = %if.else.10
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.168, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.170, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -486,7 +489,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.169, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.171, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -497,7 +500,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.170, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.172, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -554,7 +557,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
if.then.32: ; preds = %if.then.29
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.171, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.173, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -562,7 +565,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.172, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.174, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -573,7 +576,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.173, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.175, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -593,7 +596,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
if.then.35: ; preds = %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.174, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.176, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -601,7 +604,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.175, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.177, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -612,7 +615,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.176, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.178, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.36
@@ -622,64 +625,67 @@ if.merge.36: ; preds = %if.then.35, %while.
}
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.1(ptr, ptr, i64) #0
declare ptr @mem_realloc.1(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.2(ptr, ptr, ptr) #0
declare ptr @CAllocator.alloc_bytes.2(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
declare void @CAllocator.dealloc_bytes.3(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.4(ptr, ptr, i64) #0
declare i64 @GPA.init.4(ptr) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.5(ptr, ptr, ptr) #0
declare ptr @GPA.alloc_bytes.5(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
declare void @GPA.dealloc_bytes.6(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
declare void @Arena.add_chunk.7(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
declare void @Arena.init.8(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
declare void @Arena.reset.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.10(ptr, ptr, i64) #0
declare void @Arena.deinit.10(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.11(ptr, ptr, ptr) #0
declare ptr @Arena.alloc_bytes.11(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
declare void @Arena.dealloc_bytes.12(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
declare ptr @BufAlloc.init.13(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.14(ptr, ptr, i64) #0
declare void @BufAlloc.reset.14(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.15(ptr, ptr, ptr) #0
declare ptr @BufAlloc.alloc_bytes.15(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
declare void @BufAlloc.dealloc_bytes.16(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
declare void @TrackingAllocator.init.17(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
declare i64 @TrackingAllocator.leak_count.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.19(ptr, ptr, i64) #0
declare void @TrackingAllocator.report.19(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.20(ptr, ptr, ptr) #0
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
declare ptr @escape(ptr, ptr) #0
@@ -855,163 +861,166 @@ declare i32 @listen(i32, i32) #0
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @read.21(i32, ptr, i64) #0
declare i64 @read.22(i32, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @close.22(i32) #0
declare i32 @close.23(i32) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc_bytes.23(ptr, ptr, i64) #0
declare ptr @mem_realloc.24(ptr, ptr, ptr, i64, i64, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc_bytes.24(ptr, ptr, ptr) #0
declare ptr @CAllocator.alloc_bytes.25(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @GPA.init.25(ptr) #0
declare void @CAllocator.dealloc_bytes.26(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc_bytes.26(ptr, ptr, i64) #0
declare i64 @GPA.init.27(ptr) #0
; Function Attrs: nounwind
declare void @GPA.dealloc_bytes.27(ptr, ptr, ptr) #0
declare ptr @GPA.alloc_bytes.28(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.28(ptr, ptr, i64) #0
declare void @GPA.dealloc_bytes.29(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.init.29(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
declare void @Arena.add_chunk.30(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.30(ptr, ptr) #0
declare void @Arena.init.31(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.deinit.31(ptr, ptr) #0
declare void @Arena.reset.32(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc_bytes.32(ptr, ptr, i64) #0
declare void @Arena.deinit.33(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.dealloc_bytes.33(ptr, ptr, ptr) #0
declare ptr @Arena.alloc_bytes.34(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.34(ptr, ptr, i64) #0
declare void @Arena.dealloc_bytes.35(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.35(ptr, ptr) #0
declare ptr @BufAlloc.init.36(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc_bytes.36(ptr, ptr, i64) #0
declare void @BufAlloc.reset.37(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc_bytes.37(ptr, ptr, ptr) #0
declare ptr @BufAlloc.alloc_bytes.38(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.38(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
declare void @BufAlloc.dealloc_bytes.39(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.39(ptr, ptr) #0
declare void @TrackingAllocator.init.40(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.40(ptr, ptr) #0
declare i64 @TrackingAllocator.leak_count.41(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc_bytes.41(ptr, ptr, i64) #0
declare void @TrackingAllocator.report.42(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc_bytes.42(ptr, ptr, ptr) #0
declare ptr @TrackingAllocator.alloc_bytes.43(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @open.43(ptr, i32, ...) #0
declare void @TrackingAllocator.dealloc_bytes.44(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @close.44(i32) #0
declare i32 @open.45(ptr, i32, ...) #0
; Function Attrs: nounwind
declare i64 @read.45(i32, ptr, i64) #0
declare i32 @close.46(i32) #0
; Function Attrs: nounwind
declare i64 @lseek.46(i32, i64, i32) #0
declare i64 @read.47(i32, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @unlink.47(ptr) #0
declare i64 @lseek.48(i32, i64, i32) #0
; Function Attrs: nounwind
declare i32 @rmdir.48(ptr) #0
declare i32 @unlink.49(ptr) #0
; Function Attrs: nounwind
declare i32 @mkdir.49(ptr, i32) #0
declare i32 @rmdir.50(ptr) #0
; Function Attrs: nounwind
declare i32 @access.50(ptr, i32) #0
declare i32 @mkdir.51(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @chmod.51(ptr, i32) #0
declare i32 @access.52(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @rename.52(ptr, ptr) #0
declare i32 @chmod.53(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @File.is_valid.53(ptr, ptr) #0
declare i32 @rename.54(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.54(ptr, ptr) #0
declare i1 @File.is_valid.55(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.55(ptr, ptr, ptr) #0
declare i1 @File.close.56(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.56(ptr, ptr, ptr) #0
declare i64 @File.read.57(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.57(ptr, ptr, i64, i64) #0
declare i64 @File.write.58(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.58(ptr, i64) #0
declare i64 @File.seek.59(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i64 @open_file.59(ptr, ptr, i64) #0
declare i32 @mode_to_flags.60(ptr, i64) #0
; Function Attrs: nounwind
declare void @read_file.60(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare i64 @open_file.61(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @write_file.61(ptr, ptr, ptr) #0
declare void @read_file.62(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.62(ptr, ptr, ptr) #0
declare i1 @write_file.63(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.63(ptr, ptr) #0
declare i1 @append_file.64(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.64(ptr, ptr) #0
declare i1 @exists.65(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.65(ptr, ptr) #0
declare i1 @delete_file.66(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.66(ptr, ptr) #0
declare i1 @delete_dir.67(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.67(ptr, ptr, i32) #0
declare i1 @create_dir.68(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @move.68(ptr, ptr, ptr) #0
declare i1 @set_mode.69(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.69(ptr, ptr) #0
declare i1 @move.70(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.70(ptr, ptr, ptr) #0
declare i1 @create_dir_all.71(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.71(ptr, ptr) #0
declare i1 @copy_file.72(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.72(ptr, ptr) #0
declare ptr @basename.73(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.74(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Array.add(ptr, ptr, ptr, ptr) #0
@@ -1209,64 +1218,64 @@ declare ptr @BuildOptions.jni_main_java_source_at(i64, i64) #0
declare i64 @build_options() #0
; Function Attrs: nounwind
declare ptr @spaces.73(ptr, i32) #0
declare ptr @spaces.75(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @sx_trace_len.74() #0
declare i32 @sx_trace_len.76() #0
; Function Attrs: nounwind
declare i32 @sx_trace_truncated.75() #0
declare i32 @sx_trace_truncated.77() #0
; Function Attrs: nounwind
declare i64 @sx_trace_frame_at.76(i32) #0
declare i64 @sx_trace_frame_at.78(i32) #0
; Function Attrs: nounwind
declare ptr @to_string.77(ptr) #0
declare ptr @to_string.79(ptr) #0
; Function Attrs: nounwind
declare void @print_current.78(ptr) #0
declare void @print_current.80(ptr) #0
; Function Attrs: nounwind
declare void @print_interpreter_frames.79(ptr) #0
declare void @print_interpreter_frames.81(ptr) #0
; Function Attrs: nounwind
declare ptr @popen.80(ptr, ptr) #0
declare ptr @popen.82(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pclose.81(ptr) #0
declare i32 @pclose.83(ptr) #0
; Function Attrs: nounwind
declare i64 @fread.82(ptr, i64, i64, ptr) #0
declare i64 @fread.84(ptr, i64, i64, ptr) #0
; Function Attrs: nounwind
declare i32 @feof.83(ptr) #0
declare i32 @feof.85(ptr) #0
; Function Attrs: nounwind
declare ptr @getenv.84(ptr) #0
declare ptr @getenv.86(ptr) #0
; Function Attrs: nounwind
declare i64 @strlen.85(ptr) #0
declare i64 @strlen.87(ptr) #0
; Function Attrs: nounwind
declare i32 @system.86(ptr) #0
declare i32 @system.88(ptr) #0
; Function Attrs: nounwind
declare void @run.87(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
declare void @run.89(ptr sret({ { i32, { ptr, i64 } }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @env.88(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare void @env.90(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @find_executable.89(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare void @find_executable.91(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @_exit.90(i32) #0
declare void @_exit.92(i32) #0
; Function Attrs: nounwind
declare void @exit.91(ptr, i8, ptr) #0
declare void @exit.93(ptr, i8, ptr) #0
; Function Attrs: nounwind
declare void @assert.92(ptr, i1, ptr, ptr) #0
declare void @assert.94(ptr, i1, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @_NSGetArgv() #0
@@ -1296,97 +1305,97 @@ declare ptr @Parsed.value_of(ptr, ptr, ptr) #0
declare i1 @is_long_flag(ptr, ptr) #0
; Function Attrs: nounwind
declare void @parse.93(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.95(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 i32 @open.94(ptr, i32, ...) #0
declare i32 @open.96(ptr, i32, ...) #0
; Function Attrs: nounwind
declare i32 @close.95(i32) #0
declare i32 @close.97(i32) #0
; Function Attrs: nounwind
declare i64 @read.96(i32, ptr, i64) #0
declare i64 @read.98(i32, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @lseek.97(i32, i64, i32) #0
declare i64 @lseek.99(i32, i64, i32) #0
; Function Attrs: nounwind
declare i32 @unlink.98(ptr) #0
declare i32 @unlink.100(ptr) #0
; Function Attrs: nounwind
declare i32 @rmdir.99(ptr) #0
declare i32 @rmdir.101(ptr) #0
; Function Attrs: nounwind
declare i32 @mkdir.100(ptr, i32) #0
declare i32 @mkdir.102(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @access.101(ptr, i32) #0
declare i32 @access.103(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @chmod.102(ptr, i32) #0
declare i32 @chmod.104(ptr, i32) #0
; Function Attrs: nounwind
declare i32 @rename.103(ptr, ptr) #0
declare i32 @rename.105(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.is_valid.104(ptr, ptr) #0
declare i1 @File.is_valid.106(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @File.close.105(ptr, ptr) #0
declare i1 @File.close.107(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.read.106(ptr, ptr, ptr) #0
declare i64 @File.read.108(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.write.107(ptr, ptr, ptr) #0
declare i64 @File.write.109(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @File.seek.108(ptr, ptr, i64, i64) #0
declare i64 @File.seek.110(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @mode_to_flags.109(ptr, i64) #0
declare i32 @mode_to_flags.111(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @open_file.110(ptr, ptr, i64) #0
declare i64 @open_file.112(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @read_file.111(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
declare void @read_file.113(ptr sret({ { ptr, i64 }, i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @write_file.112(ptr, ptr, ptr) #0
declare i1 @write_file.114(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @append_file.113(ptr, ptr, ptr) #0
declare i1 @append_file.115(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @exists.114(ptr, ptr) #0
declare i1 @exists.116(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_file.115(ptr, ptr) #0
declare i1 @delete_file.117(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @delete_dir.116(ptr, ptr) #0
declare i1 @delete_dir.118(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir.117(ptr, ptr) #0
declare i1 @create_dir.119(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @set_mode.118(ptr, ptr, i32) #0
declare i1 @set_mode.120(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i1 @move.119(ptr, ptr, ptr) #0
declare i1 @move.121(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @create_dir_all.120(ptr, ptr) #0
declare i1 @create_dir_all.122(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @copy_file.121(ptr, ptr, ptr) #0
declare i1 @copy_file.123(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @basename.122(ptr, ptr) #0
declare ptr @basename.124(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @dirname.123(ptr, ptr) #0
declare ptr @dirname.125(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @rotr(ptr, i64, i64) #0
@@ -1425,118 +1434,118 @@ declare [64 x i8] @sha256_hex(ptr, ptr) #0
declare void @sha256_file(ptr sret({ [64 x i8], i1 }), ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.124(ptr, i1) #0
declare void @assert.126(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.125(i64, ptr) #0
declare void @BuildOptions.add_link_flag.127(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.126(i64, ptr) #0
declare void @BuildOptions.add_framework.128(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.127(i64, ptr) #0
declare void @BuildOptions.set_output_path.129(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.128(i64, ptr) #0
declare void @BuildOptions.set_wasm_shell.130(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.129(i64, ptr, ptr) #0
declare void @BuildOptions.add_asset_dir.131(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.130(i64) #0
declare i64 @BuildOptions.asset_dir_count.132(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.131(i64, i64) #0
declare ptr @BuildOptions.asset_dir_src_at.133(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.132(i64, i64) #0
declare ptr @BuildOptions.asset_dir_dest_at.134(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.133(i64, ptr) #0
declare void @BuildOptions.set_post_link_callback.135(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.134(i64, ptr) #0
declare void @BuildOptions.set_post_link_module.136(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.135(i64) #0
declare ptr @BuildOptions.binary_path.137(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.136(i64, ptr) #0
declare void @BuildOptions.set_bundle_path.138(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.137(i64, ptr) #0
declare void @BuildOptions.set_bundle_id.139(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.138(i64, ptr) #0
declare void @BuildOptions.set_codesign_identity.140(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.139(i64, ptr) #0
declare void @BuildOptions.set_provisioning_profile.141(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.140(i64) #0
declare ptr @BuildOptions.bundle_path.142(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.141(i64) #0
declare ptr @BuildOptions.bundle_id.143(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.142(i64) #0
declare ptr @BuildOptions.codesign_identity.144(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.143(i64) #0
declare ptr @BuildOptions.provisioning_profile.145(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.144(i64) #0
declare ptr @BuildOptions.target_triple.146(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.145(i64) #0
declare i1 @BuildOptions.is_macos.147(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.146(i64) #0
declare i1 @BuildOptions.is_ios.148(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.147(i64) #0
declare i1 @BuildOptions.is_ios_device.149(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.148(i64) #0
declare i1 @BuildOptions.is_ios_simulator.150(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.149(i64) #0
declare i1 @BuildOptions.is_android.151(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.150(i64) #0
declare i64 @BuildOptions.framework_count.152(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.151(i64, i64) #0
declare ptr @BuildOptions.framework_at.153(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.152(i64) #0
declare i64 @BuildOptions.framework_path_count.154(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.153(i64, i64) #0
declare ptr @BuildOptions.framework_path_at.155(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.154(i64, ptr) #0
declare void @BuildOptions.set_manifest_path.156(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.155(i64, ptr) #0
declare void @BuildOptions.set_keystore_path.157(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.156(i64) #0
declare ptr @BuildOptions.manifest_path.158(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.157(i64) #0
declare ptr @BuildOptions.keystore_path.159(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.158(i64) #0
declare i64 @BuildOptions.jni_main_count.160(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.159(i64, i64) #0
declare ptr @BuildOptions.jni_main_foreign_path_at.161(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.160(i64, i64) #0
declare ptr @BuildOptions.jni_main_java_source_at.162(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.161() #0
declare i64 @build_options.163() #0
; Function Attrs: nounwind
define internal void @SxFoo.bump(ptr %0, ptr %1) #0 {
@@ -1579,14 +1588,14 @@ entry:
define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.177, i64 9 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.179, i64 9 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.178, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.180, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 9)
@@ -1602,7 +1611,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.179, i64 9 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.181, i64 9 })
ret { ptr, i64 } %call
}
@@ -1682,17 +1691,17 @@ declare ptr @class_getInstanceVariable(ptr, ptr)
define internal void @__sx_objc_defined_class_init() {
entry:
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.180, i64 0)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.182, i64 0)
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
%metacls = call ptr @object_getClass(ptr %cls)
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
%1 = call i8 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
call void @objc_registerClassPair(ptr %cls)
store ptr %cls, ptr @__SxFoo_class, align 8
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.181)
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.182)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.183)
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.184)
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.183)
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.184)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.185)
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.186)
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
ret void