P5.4 core: drive the whole build from sx default_pipeline (no auto-emit/link)
The compiler's post-IR role shrinks to: codegen -> invoke the build callback. There is NO Zig auto-emit / auto-link anymore; emit + link are sx-called actions. - emit_object() is now an ACTION (verify + emit via a host BuildHooks vtable), returning the object path. New query primitives build_output/build_target/ build_frameworks/build_flags (data reads from the merged BuildConfig). - library/modules/build.sx imports compiler.sx and defines default_pipeline: emit_object -> gather c_object_paths -> link(objs, output, libs, fws, flags, target). The std<->build import cycle is handled by the resolver. - The compiler FORCE-LOWERS default_pipeline (well-known name) and AUTO-INVOKES it post-codegen when no on_build/set_post_link_callback override was registered (driver's final fallback: invokeByName default_pipeline). - Prelude-less programs (e.g. asm tests) don't import build.sx, so the BUILD path auto-imports modules/build.sx (idempotent if already transitive) so default_pipeline is always available. JIT sx run is untouched (emits in-process). - Removed the build cache short-circuits (incompatible with the always-run sx driver; a future cache can live in default_pipeline). Benign 37-.ir churn (build.sx grew); zero behavior changes (verified diff is .ir-only). 705/0 both gates.
This commit is contained in:
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
@@ -557,6 +557,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -671,6 +695,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1092,3 +1119,104 @@ entry:
|
|||||||
call void @CAllocator.dealloc_bytes(ptr %0, ptr %1, ptr %2)
|
call void @CAllocator.dealloc_bytes(ptr %0, ptr %1, ptr %2)
|
||||||
ret void
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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_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"
|
@__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 = private unnamed_addr constant [2 x i8] c"0\00", align 1
|
||||||
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
@str.113 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
||||||
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.114 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.115 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.116 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
@str.117 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
||||||
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
@str.118 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
||||||
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.119 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.120 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.121 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.122 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.123 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.124 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.125 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.126 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.127 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.127 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
|
@str.128 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
|
||||||
@str.128 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.129 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.129 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
|
@str.130 = 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_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_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_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
|
||||||
@OBJC_CLASS_NAME_.130 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
|
@OBJC_CLASS_NAME_.131 = 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_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_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
|
||||||
@OBJC_METH_VAR_NAME_.131 = private unnamed_addr constant [8 x i8] c"dealloc\00"
|
@OBJC_METH_VAR_NAME_.132 = private unnamed_addr constant [8 x i8] c"dealloc\00"
|
||||||
@OBJC_METH_VAR_TYPE_.132 = private unnamed_addr constant [4 x i8] c"v@:\00"
|
@OBJC_METH_VAR_TYPE_.133 = private unnamed_addr constant [4 x i8] c"v@:\00"
|
||||||
@OBJC_METH_VAR_NAME_.133 = private unnamed_addr constant [6 x i8] c"alloc\00"
|
@OBJC_METH_VAR_NAME_.134 = private unnamed_addr constant [6 x i8] c"alloc\00"
|
||||||
@OBJC_METH_VAR_TYPE_.134 = private unnamed_addr constant [4 x i8] c"@@:\00"
|
@OBJC_METH_VAR_TYPE_.135 = private unnamed_addr constant [4 x i8] c"@@:\00"
|
||||||
|
|
||||||
declare i64 @write(i32, ptr, i64)
|
declare i64 @write(i32, ptr, i64)
|
||||||
|
|
||||||
@@ -282,7 +282,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.112, i64 14 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.113, 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
|
||||||
@@ -378,7 +378,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
|
|||||||
|
|
||||||
if.then.12: ; preds = %if.then.9
|
if.then.12: ; preds = %if.then.9
|
||||||
%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.113, i64 36 })
|
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, 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
|
||||||
@@ -386,7 +386,7 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.114, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, 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
|
||||||
@@ -396,13 +396,13 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.115, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.13
|
br label %if.merge.13
|
||||||
|
|
||||||
if.merge.13: ; preds = %if.then.12, %if.then.9
|
if.merge.13: ; preds = %if.then.12, %if.then.9
|
||||||
%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.116, i64 43 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, 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
|
||||||
@@ -410,7 +410,7 @@ if.merge.13: ; preds = %if.then.12, %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.117, i64 5 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, 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
|
||||||
@@ -424,7 +424,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
|
|||||||
|
|
||||||
if.then.23: ; preds = %if.else.10
|
if.then.23: ; preds = %if.else.10
|
||||||
%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.118, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, 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
|
||||||
@@ -432,7 +432,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.119, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, 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
|
||||||
@@ -443,7 +443,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.120, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, 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
|
||||||
@@ -500,7 +500,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
|
|||||||
|
|
||||||
if.then.32: ; preds = %if.then.29
|
if.then.32: ; preds = %if.then.29
|
||||||
%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.121, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, 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
|
||||||
@@ -508,7 +508,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.122, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 2 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
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
|
||||||
@@ -519,7 +519,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.123, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, 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
|
||||||
@@ -539,7 +539,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
|
|||||||
|
|
||||||
if.then.35: ; preds = %while.exit.2
|
if.then.35: ; preds = %while.exit.2
|
||||||
%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.124, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, 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
|
||||||
@@ -547,7 +547,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.125, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, 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
|
||||||
@@ -558,7 +558,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.126, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.36
|
br label %if.merge.36
|
||||||
|
|
||||||
@@ -1059,6 +1059,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1173,6 +1197,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1647,6 +1674,9 @@ declare ptr @BuildOptions.jni_main_runtime_path_at.110(i64, i64) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline.112(ptr, i64) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define internal void @SxFoo.bump(ptr %0, ptr %1) #0 {
|
define internal void @SxFoo.bump(ptr %0, ptr %1) #0 {
|
||||||
entry:
|
entry:
|
||||||
@@ -1688,14 +1718,14 @@ entry:
|
|||||||
define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 {
|
define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.127, i64 9 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.128, i64 9 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.128, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.129, 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 9)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 9)
|
||||||
@@ -1709,10 +1739,111 @@ 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.129, i64 9 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.130, i64 9 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.37, label %if.merge.38
|
||||||
|
|
||||||
|
if.then.37: ; 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.39, label %if.else.40
|
||||||
|
|
||||||
|
if.merge.38: ; preds = %if.merge.43, %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.39: ; preds = %if.then.37
|
||||||
|
br label %if.merge.41
|
||||||
|
|
||||||
|
if.else.40: ; preds = %if.then.37
|
||||||
|
%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.41
|
||||||
|
|
||||||
|
if.merge.41: ; preds = %if.else.40, %if.then.39
|
||||||
|
%bp = phi i64 [ 4, %if.then.39 ], [ %mul, %if.else.40 ]
|
||||||
|
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.42, label %if.merge.43
|
||||||
|
|
||||||
|
if.then.42: ; preds = %if.merge.41
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.then.42, %if.merge.41
|
||||||
|
%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.38
|
||||||
|
}
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @object_getIvar(ptr, ptr) #0
|
declare ptr @object_getIvar(ptr, ptr) #0
|
||||||
|
|
||||||
@@ -1789,17 +1920,17 @@ declare ptr @class_getInstanceVariable(ptr, ptr)
|
|||||||
define internal void @__sx_objc_defined_class_init() {
|
define internal void @__sx_objc_defined_class_init() {
|
||||||
entry:
|
entry:
|
||||||
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
|
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
|
||||||
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.130, i64 0)
|
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.131, i64 0)
|
||||||
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
|
%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)
|
%metacls = call ptr @object_getClass(ptr %cls)
|
||||||
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
%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_)
|
%1 = call i8 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
|
||||||
call void @objc_registerClassPair(ptr %cls)
|
call void @objc_registerClassPair(ptr %cls)
|
||||||
store ptr %cls, ptr @__SxFoo_class, align 8
|
store ptr %cls, ptr @__SxFoo_class, align 8
|
||||||
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.131)
|
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.132)
|
||||||
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.132)
|
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.133)
|
||||||
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.133)
|
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.134)
|
||||||
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.134)
|
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.135)
|
||||||
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
|
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
|
||||||
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
|
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
|
||||||
ret void
|
ret void
|
||||||
|
|||||||
@@ -4,50 +4,50 @@
|
|||||||
@__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 }
|
||||||
@__sx_objc_cstr_dealloc = internal constant [8 x i8] c"dealloc\00"
|
@__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 = private unnamed_addr constant [2 x i8] c"0\00", align 1
|
||||||
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
@str.113 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
||||||
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.114 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.115 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.116 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
@str.117 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
||||||
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
@str.118 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
||||||
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.119 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.120 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.121 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.122 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.123 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.124 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.125 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.126 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.127 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.127 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
|
@str.128 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
|
||||||
@str.128 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
|
@str.129 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
|
||||||
@str.129 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
|
@str.130 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
|
||||||
@str.130 = private unnamed_addr constant [8 x i8] c"release\00", align 1
|
@str.131 = private unnamed_addr constant [8 x i8] c"release\00", align 1
|
||||||
@str.131 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
|
@str.132 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
|
||||||
@str.132 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.133 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.133 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
|
@str.134 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
|
||||||
@str.134 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
|
@str.135 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
|
||||||
@str.135 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.136 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.136 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
|
@str.137 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
|
||||||
@str.137 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
|
@str.138 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
|
||||||
@str.138 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.139 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.139 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
|
@str.140 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
|
||||||
@str.140 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
|
@str.141 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
|
||||||
@str.141 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.142 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.142 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
|
@str.143 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
|
||||||
@str.143 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
|
@str.144 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
|
||||||
@str.144 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.145 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
|
@str.146 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
|
||||||
@OBJC_IVAR_NAME_ = private unnamed_addr constant [11 x i8] c"__sx_state\00"
|
@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_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_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
|
||||||
@OBJC_CLASS_NAME_.146 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
|
@OBJC_CLASS_NAME_.147 = 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_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_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
|
||||||
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [8 x i8] c"dealloc\00"
|
@OBJC_METH_VAR_NAME_.148 = private unnamed_addr constant [8 x i8] c"dealloc\00"
|
||||||
@OBJC_METH_VAR_TYPE_.148 = private unnamed_addr constant [4 x i8] c"v@:\00"
|
@OBJC_METH_VAR_TYPE_.149 = private unnamed_addr constant [4 x i8] c"v@:\00"
|
||||||
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [6 x i8] c"alloc\00"
|
@OBJC_METH_VAR_NAME_.150 = private unnamed_addr constant [6 x i8] c"alloc\00"
|
||||||
@OBJC_METH_VAR_TYPE_.150 = private unnamed_addr constant [4 x i8] c"@@:\00"
|
@OBJC_METH_VAR_TYPE_.151 = private unnamed_addr constant [4 x i8] c"@@:\00"
|
||||||
|
|
||||||
declare i64 @write(i32, ptr, i64)
|
declare i64 @write(i32, ptr, i64)
|
||||||
|
|
||||||
@@ -298,7 +298,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.112, i64 14 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.113, 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
|
||||||
@@ -394,7 +394,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.113, i64 36 })
|
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, 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
|
||||||
@@ -402,7 +402,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.114, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, 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
|
||||||
@@ -412,13 +412,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.115, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, 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.116, i64 43 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, 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
|
||||||
@@ -426,7 +426,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.117, i64 5 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, 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
|
||||||
@@ -440,7 +440,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.118, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, 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
|
||||||
@@ -448,7 +448,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.119, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, 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
|
||||||
@@ -459,7 +459,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.120, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, 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
|
||||||
@@ -516,7 +516,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.121, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, 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
|
||||||
@@ -524,7 +524,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.122, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 2 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
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
|
||||||
@@ -535,7 +535,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.123, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, 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
|
||||||
@@ -555,7 +555,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.124, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, 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
|
||||||
@@ -563,7 +563,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.125, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, 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
|
||||||
@@ -574,7 +574,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.126, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, 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
|
||||||
|
|
||||||
@@ -1075,6 +1075,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1189,6 +1213,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1663,6 +1690,9 @@ declare ptr @BuildOptions.jni_main_runtime_path_at.110(i64, i64) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline.112(ptr, i64) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @objc_getClass(ptr) #0
|
declare ptr @objc_getClass(ptr) #0
|
||||||
|
|
||||||
@@ -1748,7 +1778,7 @@ entry:
|
|||||||
%allocaN = alloca ptr, align 8
|
%allocaN = alloca ptr, align 8
|
||||||
%allocaN = alloca ptr, align 8
|
%allocaN = alloca ptr, align 8
|
||||||
%allocaN = alloca ptr, align 8
|
%allocaN = alloca ptr, align 8
|
||||||
%call = call ptr @objc_getClass(ptr @str.127)
|
%call = call ptr @objc_getClass(ptr @str.128)
|
||||||
store ptr %call, ptr %alloca, align 8
|
store ptr %call, ptr %alloca, align 8
|
||||||
%load = load ptr, ptr %alloca, align 8
|
%load = load ptr, ptr %alloca, align 8
|
||||||
%icmp = icmp eq ptr %load, null
|
%icmp = icmp eq ptr %load, null
|
||||||
@@ -1759,7 +1789,7 @@ if.then.0: ; preds = %entry
|
|||||||
ret i32 1
|
ret i32 1
|
||||||
|
|
||||||
if.merge.1: ; preds = %entry
|
if.merge.1: ; preds = %entry
|
||||||
%callN = call ptr @sel_registerName(ptr @str.128)
|
%callN = call ptr @sel_registerName(ptr @str.129)
|
||||||
store ptr %callN, ptr %allocaN, align 8
|
store ptr %callN, ptr %allocaN, align 8
|
||||||
%loadN = load ptr, ptr %alloca, align 8
|
%loadN = load ptr, ptr %alloca, align 8
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
@@ -1774,7 +1804,7 @@ if.then.39: ; preds = %if.merge.1
|
|||||||
ret i32 1
|
ret i32 1
|
||||||
|
|
||||||
if.merge.40: ; preds = %if.merge.1
|
if.merge.40: ; preds = %if.merge.1
|
||||||
%callN = call ptr @sel_registerName(ptr @str.129)
|
%callN = call ptr @sel_registerName(ptr @str.130)
|
||||||
store ptr %callN, ptr %allocaN, align 8
|
store ptr %callN, ptr %allocaN, align 8
|
||||||
store ptr @objc_msgSend, ptr %allocaN, align 8
|
store ptr @objc_msgSend, ptr %allocaN, align 8
|
||||||
%loadN = load ptr, ptr %alloca, align 8
|
%loadN = load ptr, ptr %alloca, align 8
|
||||||
@@ -1791,7 +1821,7 @@ if.then.41: ; preds = %if.merge.40
|
|||||||
ret i32 1
|
ret i32 1
|
||||||
|
|
||||||
if.merge.42: ; preds = %if.merge.40
|
if.merge.42: ; preds = %if.merge.40
|
||||||
%callN = call ptr @sel_registerName(ptr @str.130)
|
%callN = call ptr @sel_registerName(ptr @str.131)
|
||||||
store ptr %callN, ptr %allocaN, align 8
|
store ptr %callN, ptr %allocaN, align 8
|
||||||
store ptr @objc_msgSend, ptr %allocaN, align 8
|
store ptr @objc_msgSend, ptr %allocaN, align 8
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
@@ -1838,14 +1868,14 @@ entry:
|
|||||||
define internal void @print__ct_s354c93d7643e1bdf__pack(ptr %0) #0 {
|
define internal void @print__ct_s354c93d7643e1bdf__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.131, i64 27 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.132, i64 27 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.132, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.133, 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 27)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
|
||||||
@@ -1859,7 +1889,7 @@ 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.133, i64 27 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.134, i64 27 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1867,14 +1897,14 @@ entry:
|
|||||||
define internal void @print__ct_sfe783e2b27a4beff__pack(ptr %0) #0 {
|
define internal void @print__ct_sfe783e2b27a4beff__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.134, i64 26 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.135, i64 26 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.135, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.136, 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 26)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 26)
|
||||||
@@ -1888,7 +1918,7 @@ entry:
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
|
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.136, i64 26 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.137, i64 26 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1896,14 +1926,14 @@ entry:
|
|||||||
define internal void @print__ct_scaebdbbd10c81716__pack(ptr %0) #0 {
|
define internal void @print__ct_scaebdbbd10c81716__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.137, i64 27 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.138, i64 27 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.138, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.139, 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 27)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
|
||||||
@@ -1917,7 +1947,7 @@ entry:
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define internal { ptr, i64 } @__insert_2(ptr %0) #0 {
|
define internal { ptr, i64 } @__insert_2(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.139, i64 27 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.140, i64 27 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1925,14 +1955,14 @@ entry:
|
|||||||
define internal void @print__ct_s7c1052877b8cc801__pack(ptr %0) #0 {
|
define internal void @print__ct_s7c1052877b8cc801__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.140, i64 35 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.141, i64 35 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.141, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.142, 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 35)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 35)
|
||||||
@@ -1946,7 +1976,7 @@ entry:
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define internal { ptr, i64 } @__insert_3(ptr %0) #0 {
|
define internal { ptr, i64 } @__insert_3(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.142, i64 35 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.143, i64 35 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1954,14 +1984,14 @@ entry:
|
|||||||
define internal void @print__ct_sed4e79fbcbd67966__pack(ptr %0) #0 {
|
define internal void @print__ct_sed4e79fbcbd67966__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.143, i64 12 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.144, i64 12 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.144, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.145, 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 12)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 12)
|
||||||
@@ -1975,10 +2005,111 @@ entry:
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define internal { ptr, i64 } @__insert_4(ptr %0) #0 {
|
define internal { ptr, i64 } @__insert_4(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.145, i64 12 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 12 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.45, label %if.merge.46
|
||||||
|
|
||||||
|
if.then.45: ; 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.47, label %if.else.48
|
||||||
|
|
||||||
|
if.merge.46: ; preds = %if.merge.51, %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.47: ; preds = %if.then.45
|
||||||
|
br label %if.merge.49
|
||||||
|
|
||||||
|
if.else.48: ; preds = %if.then.45
|
||||||
|
%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.49
|
||||||
|
|
||||||
|
if.merge.49: ; preds = %if.else.48, %if.then.47
|
||||||
|
%bp = phi i64 [ 4, %if.then.47 ], [ %mul, %if.else.48 ]
|
||||||
|
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.50, label %if.merge.51
|
||||||
|
|
||||||
|
if.then.50: ; preds = %if.merge.49
|
||||||
|
%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.51
|
||||||
|
|
||||||
|
if.merge.51: ; preds = %if.then.50, %if.merge.49
|
||||||
|
%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.46
|
||||||
|
}
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define ptr @__SxFoo_alloc_imp(ptr %0, ptr %1) #0 {
|
define ptr @__SxFoo_alloc_imp(ptr %0, ptr %1) #0 {
|
||||||
entry:
|
entry:
|
||||||
@@ -2033,17 +2164,17 @@ declare i8 @class_addIvar(ptr, ptr, i64, i8, ptr)
|
|||||||
define internal void @__sx_objc_defined_class_init() {
|
define internal void @__sx_objc_defined_class_init() {
|
||||||
entry:
|
entry:
|
||||||
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
|
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
|
||||||
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.146, i64 0)
|
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.147, i64 0)
|
||||||
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
|
%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)
|
%metacls = call ptr @object_getClass(ptr %cls)
|
||||||
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
||||||
%1 = call i1 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
|
%1 = call i1 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
|
||||||
call void @objc_registerClassPair(ptr %cls)
|
call void @objc_registerClassPair(ptr %cls)
|
||||||
store ptr %cls, ptr @__SxFoo_class, align 8
|
store ptr %cls, ptr @__SxFoo_class, align 8
|
||||||
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
|
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.148)
|
||||||
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.148)
|
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.149)
|
||||||
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
|
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.150)
|
||||||
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.150)
|
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.151)
|
||||||
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
|
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
|
||||||
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
|
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
|
||||||
ret void
|
ret void
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -3,26 +3,26 @@
|
|||||||
@OBJC_SELECTOR_REFERENCES_init = internal global ptr null
|
@OBJC_SELECTOR_REFERENCES_init = internal global ptr null
|
||||||
@OBJC_SELECTOR_REFERENCES_release = internal global ptr null
|
@OBJC_SELECTOR_REFERENCES_release = internal global 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.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
@str.113 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
||||||
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.114 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.115 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.116 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
@str.117 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
||||||
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
@str.118 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
||||||
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.119 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.120 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.121 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.122 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.123 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.124 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.125 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.126 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.127 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.127 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
|
@str.128 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
|
||||||
@str.128 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.129 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.129 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
|
@str.130 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
|
||||||
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"init\00"
|
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"init\00"
|
||||||
@OBJC_METH_VAR_NAME_.130 = private unnamed_addr constant [8 x i8] c"release\00"
|
@OBJC_METH_VAR_NAME_.131 = private unnamed_addr constant [8 x i8] c"release\00"
|
||||||
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
|
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
|
||||||
|
|
||||||
declare i64 @write(i32, ptr, i64)
|
declare i64 @write(i32, ptr, i64)
|
||||||
@@ -274,7 +274,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.112, i64 14 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.113, 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
|
||||||
@@ -370,7 +370,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
|
|||||||
|
|
||||||
if.then.12: ; preds = %if.then.9
|
if.then.12: ; preds = %if.then.9
|
||||||
%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.113, i64 36 })
|
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, 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
|
||||||
@@ -378,7 +378,7 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.114, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, 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
|
||||||
@@ -388,13 +388,13 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.115, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.13
|
br label %if.merge.13
|
||||||
|
|
||||||
if.merge.13: ; preds = %if.then.12, %if.then.9
|
if.merge.13: ; preds = %if.then.12, %if.then.9
|
||||||
%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.116, i64 43 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, 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
|
||||||
@@ -402,7 +402,7 @@ if.merge.13: ; preds = %if.then.12, %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.117, i64 5 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, 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
|
||||||
@@ -416,7 +416,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
|
|||||||
|
|
||||||
if.then.23: ; preds = %if.else.10
|
if.then.23: ; preds = %if.else.10
|
||||||
%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.118, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, 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
|
||||||
@@ -424,7 +424,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.119, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, 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
|
||||||
@@ -435,7 +435,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.120, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, 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
|
||||||
@@ -492,7 +492,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
|
|||||||
|
|
||||||
if.then.32: ; preds = %if.then.29
|
if.then.32: ; preds = %if.then.29
|
||||||
%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.121, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, 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
|
||||||
@@ -500,7 +500,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.122, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 2 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
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
|
||||||
@@ -511,7 +511,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.123, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, 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
|
||||||
@@ -531,7 +531,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
|
|||||||
|
|
||||||
if.then.35: ; preds = %while.exit.2
|
if.then.35: ; preds = %while.exit.2
|
||||||
%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.124, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, 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
|
||||||
@@ -539,7 +539,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.125, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, 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
|
||||||
@@ -550,7 +550,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.126, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.36
|
br label %if.merge.36
|
||||||
|
|
||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1639,6 +1666,9 @@ declare ptr @BuildOptions.jni_main_runtime_path_at.110(i64, i64) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline.112(ptr, i64) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define i32 @main() #0 {
|
define i32 @main() #0 {
|
||||||
entry:
|
entry:
|
||||||
@@ -1673,14 +1703,14 @@ entry:
|
|||||||
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.127, i64 3 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.128, i64 3 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.128, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.129, 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)
|
||||||
@@ -1694,10 +1724,111 @@ 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.129, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.130, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.37, label %if.merge.38
|
||||||
|
|
||||||
|
if.then.37: ; 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.39, label %if.else.40
|
||||||
|
|
||||||
|
if.merge.38: ; preds = %if.merge.43, %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.39: ; preds = %if.then.37
|
||||||
|
br label %if.merge.41
|
||||||
|
|
||||||
|
if.else.40: ; preds = %if.then.37
|
||||||
|
%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.41
|
||||||
|
|
||||||
|
if.merge.41: ; preds = %if.else.40, %if.then.39
|
||||||
|
%bp = phi i64 [ 4, %if.then.39 ], [ %mul, %if.else.40 ]
|
||||||
|
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.42, label %if.merge.43
|
||||||
|
|
||||||
|
if.then.42: ; preds = %if.merge.41
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.then.42, %if.merge.41
|
||||||
|
%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.38
|
||||||
|
}
|
||||||
|
|
||||||
declare ptr @objc_msgSend(ptr, ptr)
|
declare ptr @objc_msgSend(ptr, ptr)
|
||||||
|
|
||||||
declare ptr @sel_registerName(ptr)
|
declare ptr @sel_registerName(ptr)
|
||||||
@@ -1706,7 +1837,7 @@ define internal void @__sx_objc_selector_init() {
|
|||||||
entry:
|
entry:
|
||||||
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
||||||
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_init, align 8
|
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_init, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.130)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.131)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_release, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_release, align 8
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -8,47 +8,47 @@
|
|||||||
@OBJC_SELECTOR_REFERENCES_initWithFrame_options_ = internal global ptr null
|
@OBJC_SELECTOR_REFERENCES_initWithFrame_options_ = internal global ptr null
|
||||||
@OBJC_SELECTOR_REFERENCES_actualSelectorName = internal global ptr null
|
@OBJC_SELECTOR_REFERENCES_actualSelectorName = internal global 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.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
@str.113 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
|
||||||
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.114 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.115 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.116 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
@str.117 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
|
||||||
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
@str.118 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
|
||||||
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.119 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.120 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.121 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.122 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.123 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.124 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
@str.125 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
|
||||||
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
@str.126 = private unnamed_addr constant [3 x i8] c", \00", align 1
|
||||||
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
@str.127 = private unnamed_addr constant [5 x i8] c")); \00", align 1
|
||||||
@str.127 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1
|
@str.128 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1
|
||||||
@str.128 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1
|
@str.129 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1
|
||||||
@str.129 = private unnamed_addr constant [7 x i8] c"length\00", align 1
|
@str.130 = private unnamed_addr constant [7 x i8] c"length\00", align 1
|
||||||
@str.130 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
|
@str.131 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
|
||||||
@str.131 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1
|
@str.132 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1
|
||||||
@str.132 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1
|
@str.133 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1
|
||||||
@str.133 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1
|
@str.134 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1
|
||||||
@str.134 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
|
@str.135 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
|
||||||
@str.135 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1
|
@str.136 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1
|
||||||
@str.136 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1
|
@str.137 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1
|
||||||
@str.137 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1
|
@str.138 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1
|
||||||
@str.138 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1
|
@str.139 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1
|
||||||
@str.139 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1
|
@str.140 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1
|
||||||
@str.140 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
|
@str.141 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
|
||||||
@str.141 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1
|
@str.142 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1
|
||||||
@str.142 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
|
@str.143 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
|
||||||
@str.143 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
|
@str.144 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
|
||||||
@str.144 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
@str.145 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
|
||||||
@str.145 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
|
@str.146 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
|
||||||
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [7 x i8] c"length\00"
|
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [7 x i8] c"length\00"
|
||||||
@OBJC_METH_VAR_NAME_.146 = private unnamed_addr constant [11 x i8] c"addObject:\00"
|
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [11 x i8] c"addObject:\00"
|
||||||
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [13 x i8] c"combine:and:\00"
|
@OBJC_METH_VAR_NAME_.148 = private unnamed_addr constant [13 x i8] c"combine:and:\00"
|
||||||
@OBJC_METH_VAR_NAME_.148 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00"
|
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00"
|
||||||
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00"
|
@OBJC_METH_VAR_NAME_.150 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00"
|
||||||
@OBJC_METH_VAR_NAME_.150 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00"
|
@OBJC_METH_VAR_NAME_.151 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00"
|
||||||
@OBJC_METH_VAR_NAME_.151 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00"
|
@OBJC_METH_VAR_NAME_.152 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00"
|
||||||
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
|
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
|
||||||
|
|
||||||
declare i64 @write(i32, ptr, i64)
|
declare i64 @write(i32, ptr, i64)
|
||||||
@@ -300,7 +300,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.112, i64 14 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.113, 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
|
||||||
@@ -396,7 +396,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
|
|||||||
|
|
||||||
if.then.12: ; preds = %if.then.9
|
if.then.12: ; preds = %if.then.9
|
||||||
%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.113, i64 36 })
|
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, 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
|
||||||
@@ -404,7 +404,7 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.114, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, 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
|
||||||
@@ -414,13 +414,13 @@ if.then.12: ; preds = %if.then.9
|
|||||||
%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.115, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.13
|
br label %if.merge.13
|
||||||
|
|
||||||
if.merge.13: ; preds = %if.then.12, %if.then.9
|
if.merge.13: ; preds = %if.then.12, %if.then.9
|
||||||
%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.116, i64 43 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, 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
|
||||||
@@ -428,7 +428,7 @@ if.merge.13: ; preds = %if.then.12, %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.117, i64 5 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, 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
|
||||||
@@ -442,7 +442,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
|
|||||||
|
|
||||||
if.then.23: ; preds = %if.else.10
|
if.then.23: ; preds = %if.else.10
|
||||||
%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.118, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, 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
|
||||||
@@ -450,7 +450,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.119, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, 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
|
||||||
@@ -461,7 +461,7 @@ if.then.23: ; preds = %if.else.10
|
|||||||
%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.120, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, 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
|
||||||
@@ -518,7 +518,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
|
|||||||
|
|
||||||
if.then.32: ; preds = %if.then.29
|
if.then.32: ; preds = %if.then.29
|
||||||
%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.121, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, 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
|
||||||
@@ -526,7 +526,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.122, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 2 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
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
|
||||||
@@ -537,7 +537,7 @@ if.then.32: ; preds = %if.then.29
|
|||||||
%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.123, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, 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
|
||||||
@@ -557,7 +557,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
|
|||||||
|
|
||||||
if.then.35: ; preds = %while.exit.2
|
if.then.35: ; preds = %while.exit.2
|
||||||
%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.124, i64 36 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, 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
|
||||||
@@ -565,7 +565,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.125, i64 2 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, 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
|
||||||
@@ -576,7 +576,7 @@ if.then.35: ; preds = %while.exit.2
|
|||||||
%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.126, i64 4 })
|
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 4 })
|
||||||
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
store { ptr, i64 } %callN, ptr %allocaN, align 8
|
||||||
br label %if.merge.36
|
br label %if.merge.36
|
||||||
|
|
||||||
@@ -1077,6 +1077,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1191,6 +1215,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1665,6 +1692,9 @@ declare ptr @BuildOptions.jni_main_runtime_path_at.110(i64, i64) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline.112(ptr, i64) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @objc_getClass(ptr) #0
|
declare ptr @objc_getClass(ptr) #0
|
||||||
|
|
||||||
@@ -1745,34 +1775,34 @@ entry:
|
|||||||
define i32 @main() #0 {
|
define i32 @main() #0 {
|
||||||
entry:
|
entry:
|
||||||
call void @__sx_objc_selector_init()
|
call void @__sx_objc_selector_init()
|
||||||
%call = call ptr @objc_getClass(ptr @str.127)
|
%call = call ptr @objc_getClass(ptr @str.128)
|
||||||
%alloca = alloca ptr, align 8
|
%alloca = alloca ptr, align 8
|
||||||
store ptr %call, ptr %alloca, align 8
|
store ptr %call, ptr %alloca, align 8
|
||||||
%load = load ptr, ptr %alloca, align 8
|
%load = load ptr, ptr %alloca, align 8
|
||||||
%callN = call ptr @objc_allocateClassPair(ptr %load, ptr @str.128, i64 0)
|
%callN = call ptr @objc_allocateClassPair(ptr %load, ptr @str.129, i64 0)
|
||||||
%allocaN = alloca ptr, align 8
|
%allocaN = alloca ptr, align 8
|
||||||
store ptr %callN, ptr %allocaN, align 8
|
store ptr %callN, ptr %allocaN, align 8
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.129)
|
%callN = call ptr @sel_registerName(ptr @str.130)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.130)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.131)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.131)
|
%callN = call ptr @sel_registerName(ptr @str.132)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.132)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.133)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.133)
|
%callN = call ptr @sel_registerName(ptr @str.134)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.134)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.135)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.135)
|
%callN = call ptr @sel_registerName(ptr @str.136)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.136)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.137)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.137)
|
%callN = call ptr @sel_registerName(ptr @str.138)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.138)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.139)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.139)
|
%callN = call ptr @sel_registerName(ptr @str.140)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.140)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.141)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
%callN = call ptr @sel_registerName(ptr @str.141)
|
%callN = call ptr @sel_registerName(ptr @str.142)
|
||||||
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.142)
|
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.143)
|
||||||
%loadN = load ptr, ptr %allocaN, align 8
|
%loadN = load ptr, ptr %allocaN, align 8
|
||||||
call void @objc_registerClassPair(ptr %loadN)
|
call void @objc_registerClassPair(ptr %loadN)
|
||||||
%allocaN = alloca ptr, align 8
|
%allocaN = alloca ptr, align 8
|
||||||
@@ -1822,14 +1852,14 @@ entry:
|
|||||||
define internal void @print__ct_s4c1a58a7c89bfbba__pack(ptr %0) #0 {
|
define internal void @print__ct_s4c1a58a7c89bfbba__pack(ptr %0) #0 {
|
||||||
entry:
|
entry:
|
||||||
%alloca = alloca { ptr, i64 }, align 8
|
%alloca = alloca { ptr, i64 }, align 8
|
||||||
store { ptr, i64 } { ptr @str.143, i64 18 }, ptr %alloca, align 8
|
store { ptr, i64 } { ptr @str.144, i64 18 }, ptr %alloca, align 8
|
||||||
%allocaN = alloca { ptr, i64 }, align 8
|
%allocaN = alloca { ptr, i64 }, align 8
|
||||||
%gep = getelementptr inbounds nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 0
|
%gep = getelementptr inbounds nuw { 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 nuw { ptr, i64 }, ptr %allocaN, i32 0, i32 1
|
%gepN = getelementptr inbounds nuw { 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.144, i64 0 }, ptr %allocaN, align 8
|
store { ptr, i64 } { ptr @str.145, 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 18)
|
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 18)
|
||||||
@@ -1843,25 +1873,126 @@ 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.145, i64 18 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.146, i64 18 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.37, label %if.merge.38
|
||||||
|
|
||||||
|
if.then.37: ; 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.39, label %if.else.40
|
||||||
|
|
||||||
|
if.merge.38: ; preds = %if.merge.43, %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.39: ; preds = %if.then.37
|
||||||
|
br label %if.merge.41
|
||||||
|
|
||||||
|
if.else.40: ; preds = %if.then.37
|
||||||
|
%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.41
|
||||||
|
|
||||||
|
if.merge.41: ; preds = %if.else.40, %if.then.39
|
||||||
|
%bp = phi i64 [ 4, %if.then.39 ], [ %mul, %if.else.40 ]
|
||||||
|
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.42, label %if.merge.43
|
||||||
|
|
||||||
|
if.then.42: ; preds = %if.merge.41
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.then.42, %if.merge.41
|
||||||
|
%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.38
|
||||||
|
}
|
||||||
|
|
||||||
define internal void @__sx_objc_selector_init() {
|
define internal void @__sx_objc_selector_init() {
|
||||||
entry:
|
entry:
|
||||||
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
|
||||||
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_length, align 8
|
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_length, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.146)
|
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8
|
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.148)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.148)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_add_observer_for_event_, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.150)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.150)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_add_observer_for_event_, align 8
|
||||||
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.151)
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.151)
|
||||||
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8
|
||||||
|
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.152)
|
||||||
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8
|
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1053,6 +1053,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1167,6 +1191,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1663,3 +1690,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.98, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.98, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1635,3 +1662,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1638,3 +1665,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -1051,6 +1051,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -1165,6 +1189,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1636,3 +1663,104 @@ entry:
|
|||||||
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
|
||||||
ret { ptr, i64 } %call
|
ret { ptr, i64 } %call
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; 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.39, label %if.merge.40
|
||||||
|
|
||||||
|
if.then.39: ; 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.41, label %if.else.42
|
||||||
|
|
||||||
|
if.merge.40: ; preds = %if.merge.45, %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.41: ; preds = %if.then.39
|
||||||
|
br label %if.merge.43
|
||||||
|
|
||||||
|
if.else.42: ; preds = %if.then.39
|
||||||
|
%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.43
|
||||||
|
|
||||||
|
if.merge.43: ; preds = %if.else.42, %if.then.41
|
||||||
|
%bp = phi i64 [ 4, %if.then.41 ], [ %mul, %if.else.42 ]
|
||||||
|
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.44, label %if.merge.45
|
||||||
|
|
||||||
|
if.then.44: ; preds = %if.merge.43
|
||||||
|
%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.45
|
||||||
|
|
||||||
|
if.merge.45: ; preds = %if.then.44, %if.merge.43
|
||||||
|
%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.40
|
||||||
|
}
|
||||||
|
|||||||
@@ -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.112 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1
|
@str.113 = 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.113 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
|
@str.114 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
|
||||||
@str.114 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1
|
@str.115 = 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
|
||||||
|
|
||||||
declare i64 @write(i32, ptr, i64)
|
declare i64 @write(i32, ptr, i64)
|
||||||
@@ -564,6 +564,30 @@ declare void @parse(ptr sret({ { i64, [24 x i8] }, i32 }), ptr, ptr, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @escape(ptr, ptr) #0
|
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
|
; Function Attrs: nounwind
|
||||||
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
declare void @BuildOptions.add_link_flag(i64, ptr) #0
|
||||||
|
|
||||||
@@ -678,6 +702,9 @@ declare void @set_post_link_callback(i64, ptr) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare void @on_build(ptr) #0
|
declare void @on_build(ptr) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline(ptr, {}) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @spaces.44(ptr, i32) #0
|
declare ptr @spaces.44(ptr, i32) #0
|
||||||
|
|
||||||
@@ -1152,6 +1179,9 @@ declare ptr @BuildOptions.jni_main_runtime_path_at.110(i64, i64) #0
|
|||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
declare ptr @BuildOptions.jni_main_java_source_at.111(i64, i64) #0
|
||||||
|
|
||||||
|
; Function Attrs: nounwind
|
||||||
|
declare i1 @default_pipeline.112(ptr, i64) #0
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define i32 @main() #0 {
|
define i32 @main() #0 {
|
||||||
entry:
|
entry:
|
||||||
@@ -1172,6 +1202,107 @@ entry:
|
|||||||
ret void
|
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.0, label %if.merge.1
|
||||||
|
|
||||||
|
if.then.0: ; 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.2, label %if.else.3
|
||||||
|
|
||||||
|
if.merge.1: ; preds = %if.merge.6, %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.2: ; preds = %if.then.0
|
||||||
|
br label %if.merge.4
|
||||||
|
|
||||||
|
if.else.3: ; preds = %if.then.0
|
||||||
|
%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.4
|
||||||
|
|
||||||
|
if.merge.4: ; preds = %if.else.3, %if.then.2
|
||||||
|
%bp = phi i64 [ 4, %if.then.2 ], [ %mul, %if.else.3 ]
|
||||||
|
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.5, label %if.merge.6
|
||||||
|
|
||||||
|
if.then.5: ; preds = %if.merge.4
|
||||||
|
%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.6
|
||||||
|
|
||||||
|
if.merge.6: ; preds = %if.then.5, %if.merge.4
|
||||||
|
%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.1
|
||||||
|
}
|
||||||
|
|
||||||
; Function Attrs: nounwind
|
; Function Attrs: nounwind
|
||||||
define void @Java_co_swipelab_sxjnictor_SxApp_sx_1onCreate(ptr %0, ptr %1, ptr %2) #0 {
|
define void @Java_co_swipelab_sxjnictor_SxApp_sx_1onCreate(ptr %0, ptr %1, ptr %2) #0 {
|
||||||
entry:
|
entry:
|
||||||
@@ -1190,7 +1321,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.112)
|
%jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.113)
|
||||||
%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
|
||||||
@@ -1206,7 +1337,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.113, ptr @str.114)
|
%jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.114, ptr @str.115)
|
||||||
%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)
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
// `List` (for the default build script) + the compiler-API build primitives
|
||||||
|
// (`emit_object`/`link`/`c_object_paths`/…). The std↔build import cycle (std's
|
||||||
|
// tail imports cli.sx which imports this file) is handled by the resolver.
|
||||||
|
#import "modules/std.sx";
|
||||||
|
#import "modules/compiler.sx";
|
||||||
|
|
||||||
OperatingSystem :: enum { macos; linux; windows; wasm; ios; android; unknown; }
|
OperatingSystem :: enum { macos; linux; windows; wasm; ios; android; unknown; }
|
||||||
Architecture :: enum { aarch64; x86_64; wasm32; wasm64; unknown; }
|
Architecture :: enum { aarch64; x86_64; wasm32; wasm64; unknown; }
|
||||||
|
|
||||||
@@ -102,3 +108,21 @@ set_post_link_callback :: ufcs (self: BuildOptions, cb: () -> bool) abi(.compile
|
|||||||
// `build :: (opt: BuildOptions) -> bool abi(.compiler) { … }`. The stdlib default
|
// `build :: (opt: BuildOptions) -> bool abi(.compiler) { … }`. The stdlib default
|
||||||
// implementation lives below (the default `build` script).
|
// implementation lives below (the default `build` script).
|
||||||
on_build :: (cb: (opt: BuildOptions) -> bool abi(.compiler)) abi(.compiler);
|
on_build :: (cb: (opt: BuildOptions) -> bool abi(.compiler)) abi(.compiler);
|
||||||
|
|
||||||
|
// ── The default build script ────────────────────────────────────────────────
|
||||||
|
//
|
||||||
|
// `default_pipeline` is the stdlib build driver: the compiler invokes it after
|
||||||
|
// codegen (everything is sx-driven — there is no auto-emit/auto-link). It emits
|
||||||
|
// the sx object, gathers the C companion objects, and links them into the output
|
||||||
|
// with the build's libraries / frameworks / flags / target. A user overrides the
|
||||||
|
// whole pipeline with their own `#run on_build(custom);` in main.sx (last-wins).
|
||||||
|
// The compiler FORCE-LOWERS this well-known name and auto-invokes it after
|
||||||
|
// codegen when no `#run on_build(custom);` override was registered (no library
|
||||||
|
// `#run` needed). A user override takes over entirely.
|
||||||
|
default_pipeline :: (opt: BuildOptions) -> bool abi(.compiler) {
|
||||||
|
obj := emit_object();
|
||||||
|
objs := c_object_paths();
|
||||||
|
objs.append(obj);
|
||||||
|
link(objs, build_output(), link_libraries(), build_frameworks(), build_flags(), build_target());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,11 +15,17 @@
|
|||||||
c_object_paths :: () -> List(string) abi(.compiler);
|
c_object_paths :: () -> List(string) abi(.compiler);
|
||||||
link_libraries :: () -> List(string) abi(.compiler);
|
link_libraries :: () -> List(string) abi(.compiler);
|
||||||
|
|
||||||
// The object file the compiler emitted for this build. The compiler emits it
|
// Verify + emit the codegen'd module to its object file; returns the path. An
|
||||||
// eagerly; this returns its path (a query, not an action). The sx driver passes
|
// ACTION — the compiler no longer auto-emits; the sx driver calls this.
|
||||||
// it to `link` alongside the C objects.
|
|
||||||
emit_object :: () -> string abi(.compiler);
|
emit_object :: () -> string abi(.compiler);
|
||||||
|
|
||||||
|
// Build-config metadata the sx driver passes to `link` (the merged CLI + `#run`
|
||||||
|
// build config the compiler accumulated for this build).
|
||||||
|
build_output :: () -> string abi(.compiler); // the output binary path
|
||||||
|
build_target :: () -> string abi(.compiler); // the target triple ("" = host)
|
||||||
|
build_frameworks :: () -> List(string) abi(.compiler); // `-framework` names
|
||||||
|
build_flags :: () -> List(string) abi(.compiler); // extra link flags
|
||||||
|
|
||||||
// Link `objects` into `output`, with the given libraries / frameworks / link
|
// Link `objects` into `output`, with the given libraries / frameworks / link
|
||||||
// flags / target triple. The one genuine ACTION primitive — the compiler keeps
|
// flags / target triple. The one genuine ACTION primitive — the compiler keeps
|
||||||
// the proven linker (Option B); the sx driver orchestrates. Not fallible (the
|
// the proven linker (Option B); the sx driver orchestrates. Not fallible (the
|
||||||
|
|||||||
@@ -71,11 +71,11 @@ pub const BuildConfig = struct {
|
|||||||
c_object_paths: []const []const u8 = &.{},
|
c_object_paths: []const []const u8 = &.{},
|
||||||
link_libraries: []const []const u8 = &.{},
|
link_libraries: []const []const u8 = &.{},
|
||||||
|
|
||||||
/// Path of the object file the compiler emitted for this build (`.sx-tmp/main.o`
|
/// The fully-merged link flags (CLI `extra_link_flags` + `#run` build-block
|
||||||
/// or the cached `.o`). Forwarded by main.zig before the post-link callback so
|
/// flags), forwarded by main.zig. The sx driver reads them via `build_flags()`
|
||||||
/// the sx build driver can read it via the `emit_object()` compiler primitive
|
/// and passes them to `link`. (Distinct from `link_flags`, which holds only
|
||||||
/// (the compiler emits the object eagerly; the primitive returns its path).
|
/// the `#run`-accumulated subset.)
|
||||||
object_path: ?[]const u8 = null,
|
merged_link_flags: []const []const u8 = &.{},
|
||||||
|
|
||||||
/// Host-installed callbacks for build-pipeline ACTIONS the comptime VM can't
|
/// Host-installed callbacks for build-pipeline ACTIONS the comptime VM can't
|
||||||
/// perform itself (it can't depend on the driver — `core`/`main`/`target`).
|
/// perform itself (it can't depend on the driver — `core`/`main`/`target`).
|
||||||
@@ -126,6 +126,10 @@ pub const BuildConfig = struct {
|
|||||||
/// error here and the VM surfaces it as a hard build error.
|
/// error here and the VM surfaces it as a hard build error.
|
||||||
pub const BuildHooks = struct {
|
pub const BuildHooks = struct {
|
||||||
ctx: *anyopaque,
|
ctx: *anyopaque,
|
||||||
|
/// Verify + emit the codegen'd module to its object file; return the path
|
||||||
|
/// (ctx-owned). The `emit_object()` primitive — an ACTION, since the driver
|
||||||
|
/// no longer auto-emits (everything is sx-driven via `default_pipeline`).
|
||||||
|
emit_object: *const fn (ctx: *anyopaque) anyerror![]const u8,
|
||||||
/// Link `objects` → `output`, with the given `libraries` / `frameworks` /
|
/// Link `objects` → `output`, with the given `libraries` / `frameworks` /
|
||||||
/// link `flags` / `target` triple. (`objects` is the full object list; the
|
/// link `flags` / `target` triple. (`objects` is the full object list; the
|
||||||
/// adapter splits it for the underlying linker.)
|
/// adapter splits it for the underlying linker.)
|
||||||
|
|||||||
@@ -72,6 +72,10 @@ pub const bound_fns = [_]BoundFn{
|
|||||||
.{ .sx_name = "link_libraries", .handler = handleBuildPipelineQuery },
|
.{ .sx_name = "link_libraries", .handler = handleBuildPipelineQuery },
|
||||||
.{ .sx_name = "emit_object", .handler = handleBuildPipelineQuery },
|
.{ .sx_name = "emit_object", .handler = handleBuildPipelineQuery },
|
||||||
.{ .sx_name = "link", .handler = handleBuildPipelineQuery },
|
.{ .sx_name = "link", .handler = handleBuildPipelineQuery },
|
||||||
|
.{ .sx_name = "build_output", .handler = handleBuildPipelineQuery },
|
||||||
|
.{ .sx_name = "build_target", .handler = handleBuildPipelineQuery },
|
||||||
|
.{ .sx_name = "build_frameworks", .handler = handleBuildPipelineQuery },
|
||||||
|
.{ .sx_name = "build_flags", .handler = handleBuildPipelineQuery },
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Legacy-path stub for the Phase 5 build-pipeline primitives — see the
|
/// Legacy-path stub for the Phase 5 build-pipeline primitives — see the
|
||||||
|
|||||||
@@ -1523,17 +1523,42 @@ pub const Vm = struct {
|
|||||||
return self.failMsg("comptime link_libraries: no build config threaded into the VM");
|
return self.failMsg("comptime link_libraries: no build config threaded into the VM");
|
||||||
return try self.makeStringList(table, result_ty, bc.link_libraries);
|
return try self.makeStringList(table, result_ty, bc.link_libraries);
|
||||||
}
|
}
|
||||||
// `emit_object() -> string` — the compiler emits the object eagerly (the Zig
|
// `emit_object() -> string` — ACTION: verify + emit the codegen'd module
|
||||||
// driver, before the post-link callback); this returns its path. A query,
|
// to its object file and return the path. Dispatches through the
|
||||||
// not an action — so no driver callback is needed (unlike `link`).
|
// host-installed hook (the VM can't emit itself); the driver no longer
|
||||||
|
// auto-emits (everything is sx-driven via `default_pipeline`).
|
||||||
if (std.mem.eql(u8, name, "emit_object")) {
|
if (std.mem.eql(u8, name, "emit_object")) {
|
||||||
if (args.len != 0) return self.failMsg("comptime emit_object: expected no args");
|
if (args.len != 0) return self.failMsg("comptime emit_object: expected no args");
|
||||||
const bc = self.build_config orelse
|
const bc = self.build_config orelse
|
||||||
return self.failMsg("comptime emit_object: no build config threaded into the VM");
|
return self.failMsg("comptime emit_object: no build config threaded into the VM");
|
||||||
const path = bc.object_path orelse
|
const hooks = bc.build_hooks orelse
|
||||||
return self.failMsg("comptime emit_object: no object was emitted (object_path unset)");
|
return self.failMsg("comptime emit_object: no build hooks installed (emit is a post-codegen-only action)");
|
||||||
|
const path = hooks.emit_object(hooks.ctx) catch
|
||||||
|
return self.failMsg("comptime emit_object: object emission failed");
|
||||||
return try self.makeStringValue(table, path);
|
return try self.makeStringValue(table, path);
|
||||||
}
|
}
|
||||||
|
// Build-config metadata the sx driver passes to `link`. Read-only data
|
||||||
|
// forwarded by `main.zig` (the merged CLI + `#run` build config).
|
||||||
|
if (std.mem.eql(u8, name, "build_output")) {
|
||||||
|
if (args.len != 0) return self.failMsg("comptime build_output: expected no args");
|
||||||
|
const bc = self.build_config orelse return self.failMsg("comptime build_output: no build config");
|
||||||
|
return try self.makeStringValue(table, bc.output_path orelse "");
|
||||||
|
}
|
||||||
|
if (std.mem.eql(u8, name, "build_target")) {
|
||||||
|
if (args.len != 0) return self.failMsg("comptime build_target: expected no args");
|
||||||
|
const bc = self.build_config orelse return self.failMsg("comptime build_target: no build config");
|
||||||
|
return try self.makeStringValue(table, bc.target_triple orelse "");
|
||||||
|
}
|
||||||
|
if (std.mem.eql(u8, name, "build_frameworks")) {
|
||||||
|
if (args.len != 0) return self.failMsg("comptime build_frameworks: expected no args");
|
||||||
|
const bc = self.build_config orelse return self.failMsg("comptime build_frameworks: no build config");
|
||||||
|
return try self.makeStringList(table, result_ty, bc.target_frameworks);
|
||||||
|
}
|
||||||
|
if (std.mem.eql(u8, name, "build_flags")) {
|
||||||
|
if (args.len != 0) return self.failMsg("comptime build_flags: expected no args");
|
||||||
|
const bc = self.build_config orelse return self.failMsg("comptime build_flags: no build config");
|
||||||
|
return try self.makeStringList(table, result_ty, bc.merged_link_flags);
|
||||||
|
}
|
||||||
// `link(objects, output, libraries, frameworks, flags, target)` — the one
|
// `link(objects, output, libraries, frameworks, flags, target)` — the one
|
||||||
// genuine ACTION: dispatch to the host-installed linker (the VM can't link
|
// genuine ACTION: dispatch to the host-installed linker (the VM can't link
|
||||||
// itself). Void return (the build callback isn't fallible — Phase 5
|
// itself). Void return (the build callback isn't fallible — Phase 5
|
||||||
|
|||||||
@@ -155,6 +155,14 @@ fn isExportedEntryName(name: []const u8) bool {
|
|||||||
std.mem.startsWith(u8, name, "Java_");
|
std.mem.startsWith(u8, name, "Java_");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The well-known stdlib build driver (`library/modules/build.sx`). It is invoked
|
||||||
|
/// by the compiler post-codegen when no `#run on_build(...)` override exists, but
|
||||||
|
/// is never CALLED from sx — so it must be force-lowered like an OS entry point,
|
||||||
|
/// else lazy lowering leaves it a bodiless `declare` stub the VM can't run.
|
||||||
|
fn isDefaultBuildPipeline(name: []const u8) bool {
|
||||||
|
return std.mem.eql(u8, name, "default_pipeline");
|
||||||
|
}
|
||||||
|
|
||||||
/// Lower all top-level declarations from a root node.
|
/// Lower all top-level declarations from a root node.
|
||||||
/// Pass 1: Scan all declarations (register ASTs, types, extern stubs).
|
/// Pass 1: Scan all declarations (register ASTs, types, extern stubs).
|
||||||
/// Pass 2: Lower only `main` (everything else is lowered lazily on demand).
|
/// Pass 2: Lower only `main` (everything else is lowered lazily on demand).
|
||||||
@@ -222,6 +230,12 @@ pub fn lowerRoot(self: *Lowering, root: *const Node) void {
|
|||||||
self.checkInfiniteSize();
|
self.checkInfiniteSize();
|
||||||
// Pass 2: lower main (and comptime side-effects)
|
// Pass 2: lower main (and comptime side-effects)
|
||||||
self.lowerMainAndComptime(decls);
|
self.lowerMainAndComptime(decls);
|
||||||
|
// Pass 2b: force-lower the stdlib build driver `default_pipeline` (in the
|
||||||
|
// flat-imported `modules/build.sx`, so NOT in the main `decls` above). The
|
||||||
|
// compiler auto-invokes it post-codegen when no `#run on_build(...)` override
|
||||||
|
// exists, but nothing CALLS it from sx — so without this it stays a bodiless
|
||||||
|
// stub the build VM can't run. No-ops when build.sx isn't imported.
|
||||||
|
self.lazyLowerFunction("default_pipeline");
|
||||||
// Pass 3: lower deferred functions (any_to_string etc.) now that all types are registered
|
// Pass 3: lower deferred functions (any_to_string etc.) now that all types are registered
|
||||||
self.lowerDeferredTypeFns();
|
self.lowerDeferredTypeFns();
|
||||||
// Pass 4: target-specific entry-point sanity checks
|
// Pass 4: target-specific entry-point sanity checks
|
||||||
@@ -1457,7 +1471,7 @@ pub fn lowerMainAndComptime(self: *Lowering, decls: []const *const Node) void {
|
|||||||
// consumption (often never called from sx), so force-lower
|
// consumption (often never called from sx), so force-lower
|
||||||
// them like OS-called entry points — else lazy lowering
|
// them like OS-called entry points — else lazy lowering
|
||||||
// leaves them as bodiless `declare` stubs (Phase 2).
|
// leaves them as bodiless `declare` stubs (Phase 2).
|
||||||
if (isExportedEntryName(cd.name) or cd.value.data.fn_decl.extern_export == .export_) {
|
if (isExportedEntryName(cd.name) or cd.value.data.fn_decl.extern_export == .export_ or isDefaultBuildPipeline(cd.name)) {
|
||||||
self.lazyLowerFunction(cd.name);
|
self.lazyLowerFunction(cd.name);
|
||||||
}
|
}
|
||||||
} else if (cd.value.data == .comptime_expr) {
|
} else if (cd.value.data == .comptime_expr) {
|
||||||
|
|||||||
148
src/main.zig
148
src/main.zig
@@ -573,12 +573,24 @@ fn compile(allocator: std.mem.Allocator, io: std.Io, input_path: []const u8, out
|
|||||||
/// dispatches `link(...)` through a `BuildHooks` whose `ctx` is one of these. The
|
/// dispatches `link(...)` through a `BuildHooks` whose `ctx` is one of these. The
|
||||||
/// VM passes the full object list; `target.link` takes (first object, rest), but
|
/// VM passes the full object list; `target.link` takes (first object, rest), but
|
||||||
/// treats both as plain inputs, so the split is immaterial.
|
/// treats both as plain inputs, so the split is immaterial.
|
||||||
const LinkHooksCtx = struct {
|
const BuildHooksCtx = struct {
|
||||||
|
comp: *sx.core.Compilation,
|
||||||
|
obj_path: [:0]const u8,
|
||||||
allocator: std.mem.Allocator,
|
allocator: std.mem.Allocator,
|
||||||
io: std.Io,
|
io: std.Io,
|
||||||
base_config: sx.target.TargetConfig,
|
base_config: sx.target.TargetConfig,
|
||||||
has_jni_main: bool,
|
has_jni_main: bool,
|
||||||
|
|
||||||
|
/// `emit_object()` — verify + emit the codegen'd module to its object file,
|
||||||
|
/// return the path. The compiler no longer auto-emits; the sx driver calls this.
|
||||||
|
fn emitObject(ctx_opaque: *anyopaque) anyerror![]const u8 {
|
||||||
|
const self: *BuildHooksCtx = @ptrCast(@alignCast(ctx_opaque));
|
||||||
|
const e = if (self.comp.ir_emitter) |*p| p else return error.NoEmitter;
|
||||||
|
try e.verifyWithMessage();
|
||||||
|
try e.emitObject(self.obj_path.ptr);
|
||||||
|
return self.obj_path;
|
||||||
|
}
|
||||||
|
|
||||||
fn link(
|
fn link(
|
||||||
ctx_opaque: *anyopaque,
|
ctx_opaque: *anyopaque,
|
||||||
objects: []const []const u8,
|
objects: []const []const u8,
|
||||||
@@ -590,14 +602,12 @@ const LinkHooksCtx = struct {
|
|||||||
) anyerror!void {
|
) anyerror!void {
|
||||||
_ = target; // the triple is already encoded in base_config (CLI-derived);
|
_ = target; // the triple is already encoded in base_config (CLI-derived);
|
||||||
// explicit-triple reconciliation is a P5.4 concern when sx owns the config.
|
// explicit-triple reconciliation is a P5.4 concern when sx owns the config.
|
||||||
const self: *LinkHooksCtx = @ptrCast(@alignCast(ctx_opaque));
|
const self: *BuildHooksCtx = @ptrCast(@alignCast(ctx_opaque));
|
||||||
if (objects.len == 0) return error.NoObjects;
|
if (objects.len == 0) return error.NoObjects;
|
||||||
var cfg = self.base_config;
|
var cfg = self.base_config;
|
||||||
// Union the explicit `flags` with the CLI-derived ones (don't drop either).
|
// The passed `flags` are already the full merged set (`build_flags()` returns
|
||||||
var all_flags: std.ArrayList([]const u8) = .empty;
|
// the merged CLI + `#run` flags), so use them as-is rather than re-unioning.
|
||||||
for (self.base_config.extra_link_flags) |f| try all_flags.append(self.allocator, f);
|
cfg.extra_link_flags = flags;
|
||||||
for (flags) |f| try all_flags.append(self.allocator, f);
|
|
||||||
cfg.extra_link_flags = all_flags.items;
|
|
||||||
try sx.target.link(self.allocator, self.io, objects[0], objects[1..], output, libraries, frameworks, cfg, self.has_jni_main);
|
try sx.target.link(self.allocator, self.io, objects[0], objects[1..], output, libraries, frameworks, cfg, self.has_jni_main);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -615,6 +625,21 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
comp.parse() catch { comp.renderErrors(); return error.CompileError; };
|
comp.parse() catch { comp.renderErrors(); return error.CompileError; };
|
||||||
timer.record("parse");
|
timer.record("parse");
|
||||||
|
|
||||||
|
// Auto-import the stdlib build driver so `default_pipeline` (+ the build
|
||||||
|
// primitives) is always present to drive the build — the program need not
|
||||||
|
// import the prelude (e.g. minimal asm tests). A flat import is idempotent if
|
||||||
|
// it's already pulled in transitively. BUILD-path only: the JIT `sx run` path
|
||||||
|
// emits + executes in-process and never invokes default_pipeline.
|
||||||
|
if (comp.root) |r| {
|
||||||
|
const imp = try allocator.create(sx.ast.Node);
|
||||||
|
imp.* = .{ .span = r.span, .source_file = input_path, .data = .{ .import_decl = .{ .path = "modules/build.sx", .name = null } } };
|
||||||
|
const old_decls = r.data.root.decls;
|
||||||
|
const new_decls = try allocator.alloc(*sx.ast.Node, old_decls.len + 1);
|
||||||
|
new_decls[0] = imp;
|
||||||
|
@memcpy(new_decls[1..], old_decls);
|
||||||
|
r.data.root.decls = new_decls;
|
||||||
|
}
|
||||||
|
|
||||||
timer.mark();
|
timer.mark();
|
||||||
comp.resolveImports() catch { comp.renderErrors(); return error.CompileError; };
|
comp.resolveImports() catch { comp.renderErrors(); return error.CompileError; };
|
||||||
timer.record("imports");
|
timer.record("imports");
|
||||||
@@ -630,52 +655,16 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
|
|
||||||
const obj_path = try std.fmt.allocPrintSentinel(allocator, "{s}/main.o", .{tmp_dir}, 0);
|
const obj_path = try std.fmt.allocPrintSentinel(allocator, "{s}/main.o", .{tmp_dir}, 0);
|
||||||
|
|
||||||
// Cache: compute key and check for cached binary/.o.
|
// Codegen only. There is NO auto-emit / auto-link: the build is driven
|
||||||
// Disabled for programs with top-level #run (same guard as the JIT
|
// entirely by the sx `default_pipeline` (or a user `#run on_build(...)`
|
||||||
// path): the #run interp runs during codegen, and skipping codegen
|
// override), invoked after codegen below. `emit_object` (verify + object
|
||||||
// loses its effects — build config (link flags, frameworks, output
|
// emission) and `link` run as sx-called ACTIONS through the build hooks.
|
||||||
// path, bundling) and print side effects alike.
|
// (The build cache short-circuited codegen, which the always-run sx driver
|
||||||
const use_cache = enable_cache and !hasTopLevelRun(root);
|
// can't tolerate — removed; a future cache can live inside default_pipeline.)
|
||||||
const key = computeCacheKey(source, &comp.import_sources, target_config);
|
_ = enable_cache;
|
||||||
const cache_obj = try cachePath(allocator, key, "o");
|
timer.mark();
|
||||||
const cache_bin = try cachePath(allocator, key, "bin");
|
comp.generateCode() catch { comp.renderErrors(); return error.CompileError; };
|
||||||
|
timer.record("codegen");
|
||||||
// Level 1: Try cached binary (skip everything — no codegen, no link).
|
|
||||||
// Skipped under --emit-obj, which needs the freshly-emitted object kept.
|
|
||||||
if (use_cache and !target_config.emit_obj) bin_cache: {
|
|
||||||
std.Io.Dir.copyFile(.cwd(), cache_bin, .cwd(), output_path, io, .{}) catch break :bin_cache;
|
|
||||||
timer.record("cache");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Level 2: Try cached .o (skip codegen+emit, still need link)
|
|
||||||
const used_obj_cache = blk: {
|
|
||||||
if (!use_cache) break :blk false;
|
|
||||||
std.Io.Dir.copyFile(.cwd(), cache_obj, .cwd(), obj_path, io, .{}) catch break :blk false;
|
|
||||||
break :blk true;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (used_obj_cache) {
|
|
||||||
timer.record("cache");
|
|
||||||
} else {
|
|
||||||
// Cache MISS — full codegen + emit
|
|
||||||
timer.mark();
|
|
||||||
comp.generateCode() catch { comp.renderErrors(); return error.CompileError; };
|
|
||||||
timer.record("codegen");
|
|
||||||
|
|
||||||
timer.mark();
|
|
||||||
comp.ir_emitter.?.verifyWithMessage() catch return error.CompileError;
|
|
||||||
timer.record("verify");
|
|
||||||
|
|
||||||
timer.mark();
|
|
||||||
comp.ir_emitter.?.emitObject(obj_path.ptr) catch return error.CompileError;
|
|
||||||
timer.record("emit");
|
|
||||||
|
|
||||||
// Save .o to cache
|
|
||||||
if (use_cache) {
|
|
||||||
std.Io.Dir.copyFile(.cwd(), obj_path, .cwd(), cache_obj, io, .{ .make_path = true }) catch {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compile C sources from #import c blocks to .o files
|
// Compile C sources from #import c blocks to .o files
|
||||||
timer.mark();
|
timer.mark();
|
||||||
@@ -721,23 +710,22 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Link (sx .o + C .o files)
|
// NO auto-link here — the sx `default_pipeline` (or a user `on_build`
|
||||||
timer.mark();
|
// override) calls `link` (and `emit_object`) as actions through these hooks.
|
||||||
sx.target.link(allocator, io, obj_path, c_obj_paths, final_output, libs, fws, merged_config, comp.getJniMainEmissions().len > 0) catch {
|
// The ctx lives on this stack frame so it outlives the callback below.
|
||||||
std.debug.print("error: linking failed\n", .{});
|
var build_ctx = BuildHooksCtx{
|
||||||
return error.CompileError;
|
.comp = &comp,
|
||||||
};
|
.obj_path = obj_path,
|
||||||
timer.record("link");
|
|
||||||
|
|
||||||
// Driver-side linker adapter behind the sx `link` primitive (Phase 5). Lives
|
|
||||||
// on this stack frame so it outlives the post-link callback invocation below.
|
|
||||||
var link_ctx = LinkHooksCtx{
|
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.io = io,
|
.io = io,
|
||||||
.base_config = merged_config,
|
.base_config = merged_config,
|
||||||
.has_jni_main = comp.getJniMainEmissions().len > 0,
|
.has_jni_main = comp.getJniMainEmissions().len > 0,
|
||||||
};
|
};
|
||||||
var build_hooks = sx.ir.compiler_hooks.BuildHooks{ .ctx = &link_ctx, .link = LinkHooksCtx.link };
|
var build_hooks = sx.ir.compiler_hooks.BuildHooks{
|
||||||
|
.ctx = &build_ctx,
|
||||||
|
.emit_object = BuildHooksCtx.emitObject,
|
||||||
|
.link = BuildHooksCtx.link,
|
||||||
|
};
|
||||||
|
|
||||||
// Make the linked binary's path + bundling config visible to the
|
// Make the linked binary's path + bundling config visible to the
|
||||||
// post-link callback via `BuildOptions.binary_path()`,
|
// post-link callback via `BuildOptions.binary_path()`,
|
||||||
@@ -763,11 +751,12 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
e.build_config.target_frameworks = fws;
|
e.build_config.target_frameworks = fws;
|
||||||
e.build_config.target_framework_paths = merged_config.framework_paths;
|
e.build_config.target_framework_paths = merged_config.framework_paths;
|
||||||
// Phase 5: the sx-driven build pipeline reads these via the
|
// Phase 5: the sx-driven build pipeline reads these via the
|
||||||
// `c_object_paths()` / `link_libraries()` compiler primitives. Both
|
// `c_object_paths()` / `link_libraries()` / `build_*()` primitives. Slices
|
||||||
// slices reference compileWithTimer locals that outlive the callback.
|
// reference compileWithTimer locals that outlive the callback.
|
||||||
e.build_config.c_object_paths = c_obj_paths;
|
e.build_config.c_object_paths = c_obj_paths;
|
||||||
e.build_config.link_libraries = libs;
|
e.build_config.link_libraries = libs;
|
||||||
e.build_config.object_path = obj_path;
|
e.build_config.output_path = final_output;
|
||||||
|
e.build_config.merged_link_flags = merged_config.extra_link_flags;
|
||||||
// Android-specific bundling state.
|
// Android-specific bundling state.
|
||||||
if (e.build_config.manifest_path == null) e.build_config.manifest_path = merged_config.manifest_path;
|
if (e.build_config.manifest_path == null) e.build_config.manifest_path = merged_config.manifest_path;
|
||||||
if (e.build_config.keystore_path == null) e.build_config.keystore_path = merged_config.keystore_path;
|
if (e.build_config.keystore_path == null) e.build_config.keystore_path = merged_config.keystore_path;
|
||||||
@@ -850,6 +839,24 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
std.debug.print("error: post-link module '{s}.bundle_main' not found\n", .{mod_name});
|
std.debug.print("error: post-link module '{s}.bundle_main' not found\n", .{mod_name});
|
||||||
return error.CompileError;
|
return error.CompileError;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// No user/module override → run the stdlib default build pipeline. The
|
||||||
|
// compiler force-lowers `default_pipeline` (well-known name); it emits +
|
||||||
|
// links the program. Everything is sx-driven — this is the only build path
|
||||||
|
// when the user hasn't overridden it.
|
||||||
|
const ret_opt = comp.invokeByName("default_pipeline", true) catch |err| {
|
||||||
|
printInterpBailDiag(&comp, "default build pipeline", err);
|
||||||
|
return error.CompileError;
|
||||||
|
};
|
||||||
|
if (ret_opt) |ret| {
|
||||||
|
if (ret.asBool() == false) {
|
||||||
|
std.debug.print("error: default build pipeline returned false\n", .{});
|
||||||
|
return error.CompileError;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std.debug.print("error: default build pipeline 'default_pipeline' not found (is the prelude imported?)\n", .{});
|
||||||
|
return error.CompileError;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post-process wasm HTML: inject content hash for cache busting
|
// Post-process wasm HTML: inject content hash for cache busting
|
||||||
@@ -857,11 +864,6 @@ fn compileWithTimer(allocator: std.mem.Allocator, io: std.Io, input_path: []cons
|
|||||||
sx.target.postProcessWasmHtml(allocator, io, final_output);
|
sx.target.postProcessWasmHtml(allocator, io, final_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save linked binary to cache
|
|
||||||
if (use_cache) {
|
|
||||||
std.Io.Dir.copyFile(.cwd(), output_path, .cwd(), cache_bin, io, .{ .make_path = true }) catch {};
|
|
||||||
}
|
|
||||||
|
|
||||||
std.debug.print("compiled: {s}\n", .{final_output});
|
std.debug.print("compiled: {s}\n", .{final_output});
|
||||||
|
|
||||||
// Clean up temp directory and all build artifacts. Under --emit-obj, keep
|
// Clean up temp directory and all build artifacts. Under --emit-obj, keep
|
||||||
|
|||||||
Reference in New Issue
Block a user