From 11eef8a6b19fb7b48e0c6086685eb1e0799fba5c Mon Sep 17 00:00:00 2001 From: agra Date: Thu, 28 May 2026 08:04:12 +0300 Subject: [PATCH] ffi step 6: print / format migrate to ..\$args (comptime per-position pack) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `format` and `print` move from `..args: []Any` to `..$args`. The pack-fn machinery monomorphises each call shape, so the build_format-emitted body's `any_to_string(args[i])` substitutes to the i-th concrete-typed call arg via packArgNodeAt — no more runtime Any-boxing for static args. The Any boxing path still fires for arg positions whose types collapse to `.any` (already Any-typed inputs). Net effect: - Calls with statically-typed args produce per-shape monos (`print__ct___pack_s64_string_bool` etc). The mono cache key now reflects both the format string AND the arg types, so different shapes get distinct emit paths. - Compile-time arity errors are now possible (callers passing the wrong number of args mismatch the mono's positional binding instead of silently mis-boxing). - Optionals flow through the new `case optional:` arm in `any_to_string` (commit ce77867); the variadic auto-unwrap in `packVariadicCallArgs` stays as a fast-path but is no longer load-bearing. IR snapshots regenerated for 13 tests where the print/format mono shape changed the string-constant pool: 142, the ffi-jni test cluster, ffi-objc-call-03/06, ffi-objc-dsl-07. Test 08-types' undef-memory-read snapshot also shifted (the test exercises `field = ---` reads from a print call's stack neighbours; the new pack-mono lays out its stack frame differently, so the previously-stale 1s now read as 0s — same undefined behaviour, different garbage). 218/218 example tests + `zig build test` green. --- library/modules/std.sx | 4 +- tests/expected/08-types.txt | 4 +- .../142-objc-class-method-lowering.ir | 43 +-- .../ffi-jni-call-03-methodid-sharing.ir | 43 +-- tests/expected/ffi-jni-call-04-jint-return.ir | 43 +-- .../expected/ffi-jni-call-05-jlong-return.ir | 43 +-- .../ffi-jni-call-06-jdouble-return.ir | 43 +-- .../ffi-jni-call-07-jboolean-return.ir | 43 +-- .../ffi-jni-call-08-jobject-return.ir | 43 +-- tests/expected/ffi-jni-call-09-static.ir | 43 +-- tests/expected/ffi-jni-class-08-call.ir | 43 +-- .../expected/ffi-jni-env-02-lexical-direct.ir | 43 +-- .../ffi-objc-call-03-selector-sharing.ir | 43 +-- .../expected/ffi-objc-call-06-sret-return.ir | 273 ++++++++++-------- .../ffi-objc-dsl-07-mangling-table.ir | 43 +-- 15 files changed, 450 insertions(+), 347 deletions(-) diff --git a/library/modules/std.sx b/library/modules/std.sx index bc92328..bff43dc 100644 --- a/library/modules/std.sx +++ b/library/modules/std.sx @@ -390,12 +390,12 @@ build_format :: (fmt: string) -> string { code; } -format :: ($fmt: string, ..args: []Any) -> string { +format :: ($fmt: string, ..$args) -> string { #insert build_format(fmt); #insert "result;"; } -print :: ($fmt: string, ..args: []Any) { +print :: ($fmt: string, ..$args) { #insert build_format(fmt); #insert "out(result);"; } diff --git a/tests/expected/08-types.txt b/tests/expected/08-types.txt index fb37801..17052bb 100644 --- a/tests/expected/08-types.txt +++ b/tests/expected/08-types.txt @@ -1,4 +1,4 @@ -a 0 : Foo{a: 0, b: 42, c: 1, d: 17} +a 0 : Foo{a: 0, b: 42, c: 0, d: 17} a 1 : Foo{a: 1, b: 42, c: 8, d: 17} -b: Foo{a: 1, b: 1, c: 101, d: 1} +b: Foo{a: 1, b: 0, c: 101, d: 0} Pack{a: 1, b: 0, c: 3, d: 5, f: 9, v: 100, x: 3.500000} diff --git a/tests/expected/142-objc-class-method-lowering.ir b/tests/expected/142-objc-class-method-lowering.ir index 5153b1b..6e713f0 100644 --- a/tests/expected/142-objc-class-method-lowering.ir +++ b/tests/expected/142-objc-class-method-lowering.ir @@ -750,25 +750,8 @@ entry: ; Function Attrs: nounwind define i32 @main() #0 { entry: + call void @print__ct_sfeff9eeccd48b824__pack(ptr @__sx_default_context) call void @__sx_objc_defined_class_init() - %alloca = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.16, i64 9 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 9) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) ret i32 0 } @@ -786,6 +769,30 @@ entry: ret void } +; Function Attrs: nounwind +define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.16, i64 9 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 9) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-03-methodid-sharing.ir b/tests/expected/ffi-jni-call-03-methodid-sharing.ir index 9f1e6ec..2f48be8 100644 --- a/tests/expected/ffi-jni-call-03-methodid-sharing.ir +++ b/tests/expected/ffi-jni-call-03-methodid-sharing.ir @@ -687,24 +687,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %alloca = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.20, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.21, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -728,6 +711,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.20, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.21, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-04-jint-return.ir b/tests/expected/ffi-jni-call-04-jint-return.ir index 1807bd4..e557414 100644 --- a/tests/expected/ffi-jni-call-04-jint-return.ir +++ b/tests/expected/ffi-jni-call-04-jint-return.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-05-jlong-return.ir b/tests/expected/ffi-jni-call-05-jlong-return.ir index 4c6c41d..e0b052b 100644 --- a/tests/expected/ffi-jni-call-05-jlong-return.ir +++ b/tests/expected/ffi-jni-call-05-jlong-return.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-06-jdouble-return.ir b/tests/expected/ffi-jni-call-06-jdouble-return.ir index 12503b0..ca9b11f 100644 --- a/tests/expected/ffi-jni-call-06-jdouble-return.ir +++ b/tests/expected/ffi-jni-call-06-jdouble-return.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-07-jboolean-return.ir b/tests/expected/ffi-jni-call-07-jboolean-return.ir index b305f39..a97bbcd 100644 --- a/tests/expected/ffi-jni-call-07-jboolean-return.ir +++ b/tests/expected/ffi-jni-call-07-jboolean-return.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-08-jobject-return.ir b/tests/expected/ffi-jni-call-08-jobject-return.ir index a8508a5..84e73eb 100644 --- a/tests/expected/ffi-jni-call-08-jobject-return.ir +++ b/tests/expected/ffi-jni-call-08-jobject-return.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-call-09-static.ir b/tests/expected/ffi-jni-call-09-static.ir index 13c3156..634b382 100644 --- a/tests/expected/ffi-jni-call-09-static.ir +++ b/tests/expected/ffi-jni-call-09-static.ir @@ -659,24 +659,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -700,6 +683,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-class-08-call.ir b/tests/expected/ffi-jni-class-08-call.ir index a75622d..9c4411a 100644 --- a/tests/expected/ffi-jni-class-08-call.ir +++ b/tests/expected/ffi-jni-class-08-call.ir @@ -662,24 +662,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %alloca = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-jni-env-02-lexical-direct.ir b/tests/expected/ffi-jni-env-02-lexical-direct.ir index 7f5dd07..56dfaa1 100644 --- a/tests/expected/ffi-jni-env-02-lexical-direct.ir +++ b/tests/expected/ffi-jni-env-02-lexical-direct.ir @@ -660,24 +660,7 @@ if.then.0: ; preds = %entry br label %if.merge.1 if.merge.1: ; preds = %if.then.0, %entry - %alloca = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 - %load = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -701,6 +684,30 @@ declare ptr @sx_jni_env_tl_get() #0 ; Function Attrs: nounwind declare void @sx_jni_env_tl_set(ptr) #0 +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-objc-call-03-selector-sharing.ir b/tests/expected/ffi-objc-call-03-selector-sharing.ir index 8eac771..d5c6860 100644 --- a/tests/expected/ffi-objc-call-03-selector-sharing.ir +++ b/tests/expected/ffi-objc-call-03-selector-sharing.ir @@ -736,24 +736,7 @@ entry: call void @objc_msgSend(ptr null, ptr %loadN) %loadN = load ptr, ptr @OBJC_SELECTOR_REFERENCES_release, align 8 call void @objc_msgSend(ptr null, ptr %loadN) - %alloca = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.16, i64 3 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %call) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context) ret i32 0 } @@ -771,6 +754,30 @@ entry: ret void } +; Function Attrs: nounwind +define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.16, i64 3 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: diff --git a/tests/expected/ffi-objc-call-06-sret-return.ir b/tests/expected/ffi-objc-call-06-sret-return.ir index 550ffae..42b66a9 100644 --- a/tests/expected/ffi-objc-call-06-sret-return.ir +++ b/tests/expected/ffi-objc-call-06-sret-return.ir @@ -36,9 +36,9 @@ @str.29 = private unnamed_addr constant [15 x i8] c"{Triple=qqq}@:\00", align 1 @str.30 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1 @str.31 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 -@str.32 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1 -@str.33 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 -@str.34 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1 +@str.32 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1 +@str.33 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1 +@str.34 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.35 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1 @str.36 = private unnamed_addr constant [10 x i8] c"Allocator\00", align 1 @str.37 = private unnamed_addr constant [2 x i8] c"{\00", align 1 @@ -190,16 +190,16 @@ @str.181 = private unnamed_addr constant [6 x i8] c"*bool\00", align 1 @str.182 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1 @str.183 = private unnamed_addr constant [5 x i8] c"null\00", align 1 -@str.184 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1 +@str.184 = private unnamed_addr constant [8 x i8] c"*string\00", align 1 @str.185 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1 @str.186 = private unnamed_addr constant [5 x i8] c"null\00", align 1 @str.187 = private unnamed_addr constant [5 x i8] c"*Any\00", align 1 @str.188 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1 @str.189 = private unnamed_addr constant [5 x i8] c"null\00", align 1 -@str.190 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1 +@str.190 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1 @str.191 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1 @str.192 = private unnamed_addr constant [5 x i8] c"null\00", align 1 -@str.193 = private unnamed_addr constant [8 x i8] c"*string\00", align 1 +@str.193 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1 @str.194 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1 @str.195 = private unnamed_addr constant [5 x i8] c"null\00", align 1 @str.196 = private unnamed_addr constant [4 x i8] c"*u8\00", align 1 @@ -906,10 +906,10 @@ entry: i64 39, label %match.arm.44 i64 34, label %match.arm.45 i64 35, label %match.arm.45 - i64 45, label %match.arm.47 + i64 47, label %match.arm.47 i64 52, label %match.arm.47 i64 33, label %match.arm.48 - i64 44, label %match.arm.48 + i64 45, label %match.arm.48 i64 17, label %match.arm.49 i64 20, label %match.arm.49 i64 22, label %match.arm.49 @@ -922,8 +922,8 @@ entry: i64 41, label %match.arm.49 i64 42, label %match.arm.49 i64 43, label %match.arm.49 + i64 44, label %match.arm.49 i64 46, label %match.arm.49 - i64 47, label %match.arm.49 i64 48, label %match.arm.49 i64 49, label %match.arm.49 i64 50, label %match.arm.49 @@ -1007,7 +1007,7 @@ match.arm.47: ; preds = %entry, %entry %loadN = load { i64, i64 }, ptr %alloca, align 8 %allocaN = alloca { ptr, i64 }, align 8 switch i64 %loadN, label %dispatch.default.140 [ - i64 45, label %dispatch.case.141 + i64 47, label %dispatch.case.141 i64 52, label %dispatch.case.142 ] @@ -1017,7 +1017,7 @@ match.arm.48: ; preds = %entry, %entry %allocaN = alloca { ptr, i64 }, align 8 switch i64 %loadN, label %dispatch.default.154 [ i64 33, label %dispatch.case.155 - i64 44, label %dispatch.case.156 + i64 45, label %dispatch.case.156 ] match.arm.49: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry @@ -1037,8 +1037,8 @@ match.arm.49: ; preds = %entry, %entry, %ent i64 41, label %dispatch.case.178 i64 42, label %dispatch.case.179 i64 43, label %dispatch.case.180 - i64 46, label %dispatch.case.181 - i64 47, label %dispatch.case.182 + i64 44, label %dispatch.case.181 + i64 46, label %dispatch.case.182 i64 48, label %dispatch.case.183 i64 49, label %dispatch.case.184 i64 50, label %dispatch.case.185 @@ -1339,7 +1339,7 @@ dispatch.case.180: ; preds = %match.arm.49 dispatch.case.181: ; preds = %match.arm.49 %ua.raw141 = extractvalue { i64, i64 } %loadN, 1 %iNp142 = inttoptr i64 %ua.raw141 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp142) + %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.167 @@ -1353,14 +1353,14 @@ dispatch.case.182: ; preds = %match.arm.49 dispatch.case.183: ; preds = %match.arm.49 %ua.raw147 = extractvalue { i64, i64 } %loadN, 1 %iNp148 = inttoptr i64 %ua.raw147 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp148) + %callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.167 dispatch.case.184: ; preds = %match.arm.49 %ua.raw150 = extractvalue { i64, i64 } %loadN, 1 %iNp151 = inttoptr i64 %ua.raw150 to ptr - %callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp151) + %callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151) store { ptr, i64 } %callN, ptr %allocaN, align 8 br label %dispatch.merge.167 @@ -1875,44 +1875,8 @@ entry: %callN = call i1 @class_addMethod(ptr %loadN, ptr %loadN, ptr @triple_imp, ptr @str.29) %allocaN = alloca i1, align 1 store i1 %callN, ptr %allocaN, align 1 - %allocaN = alloca [1 x { i64, i64 }], align 8 %loadN = load i1, ptr %allocaN, align 1 - %zN = zext i1 %loadN to i64 - %ba.val = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1 - %igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0 - store { i64, i64 } %ba.val, ptr %igp.ptr, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - %igp.ptr12 = getelementptr { i64, i64 }, ptr %allocaN, i64 0 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr %igp.ptr12, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 1, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.30, i64 15 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.31, i64 0 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 12) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %ig.data = extractvalue { ptr, i64 } %loadN, 0 - %ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 0 - %ig.val = load { i64, i64 }, ptr %ig.ptr, align 8 - %callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 14, i64 1) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_s7f3aff1506f207ab__pack_bool(ptr @__sx_default_context, i1 %loadN) %loadN = load ptr, ptr %allocaN, align 8 call void @objc_registerClassPair(ptr %loadN) %loadN = load ptr, ptr %allocaN, align 8 @@ -1926,80 +1890,13 @@ entry: %objc.sret.load = load { i64, i64, i64 }, ptr %objc.sret, align 8 %allocaN = alloca { i64, i64, i64 }, align 8 store { i64, i64, i64 } %objc.sret.load, ptr %allocaN, align 8 - %allocaN = alloca [3 x { i64, i64 }], align 8 %loadN = load { i64, i64, i64 }, ptr %allocaN, align 8 %sg = extractvalue { i64, i64, i64 } %loadN, 0 - %ba.val38 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sg, 1 - %igp.ptr39 = getelementptr { i64, i64 }, ptr %allocaN, i64 0 - store { i64, i64 } %ba.val38, ptr %igp.ptr39, align 8 %loadN = load { i64, i64, i64 }, ptr %allocaN, align 8 %sgN = extractvalue { i64, i64, i64 } %loadN, 1 - %ba.val42 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sgN, 1 - %igp.ptr43 = getelementptr { i64, i64 }, ptr %allocaN, i64 1 - store { i64, i64 } %ba.val42, ptr %igp.ptr43, align 8 %loadN = load { i64, i64, i64 }, ptr %allocaN, align 8 %sgN = extractvalue { i64, i64, i64 } %loadN, 2 - %ba.val46 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sgN, 1 - %igp.ptr47 = getelementptr { i64, i64 }, ptr %allocaN, i64 2 - store { i64, i64 } %ba.val46, ptr %igp.ptr47, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - %igp.ptr49 = getelementptr { i64, i64 }, ptr %allocaN, i64 0 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr %igp.ptr49, ptr %gepN, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 3, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.32, i64 22 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 10) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %ig.data60 = extractvalue { ptr, i64 } %loadN, 0 - %ig.ptr61 = getelementptr { i64, i64 }, ptr %ig.data60, i64 0 - %ig.val62 = load { i64, i64 }, ptr %ig.ptr61, align 8 - %callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val62) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 12, i64 2) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %ig.data71 = extractvalue { ptr, i64 } %loadN, 0 - %ig.ptr72 = getelementptr { i64, i64 }, ptr %ig.data71, i64 1 - %ig.val73 = load { i64, i64 }, ptr %ig.ptr72, align 8 - %callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val73) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 16, i64 2) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %ig.data82 = extractvalue { ptr, i64 } %loadN, 0 - %ig.ptr83 = getelementptr { i64, i64 }, ptr %ig.data82, i64 2 - %ig.val84 = load { i64, i64 }, ptr %ig.ptr83, align 8 - %callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val84) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 20, i64 2) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr92 = extractvalue { ptr, i64 } %loadN, 0 - %str.len93 = extractvalue { ptr, i64 } %loadN, 1 - %1 = call i64 @write(i32 1, ptr %str.ptr92, i64 %str.len93) + call void @print__ct_s337be2777a405332__pack_s64_s64_s64(ptr @__sx_default_context, i64 %sg, i64 %sgN, i64 %sgN) ret i32 0 } @@ -2017,13 +1914,135 @@ entry: ret void } +; Function Attrs: nounwind +define internal void @print__ct_s7f3aff1506f207ab__pack_bool(ptr %0, i1 %1) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.30, i64 15 }, ptr %alloca, align 8 + %allocaN = alloca i1, align 1 + store i1 %1, ptr %allocaN, align 1 + %allocaN = alloca [1 x { i64, i64 }], align 8 + %load = load i1, ptr %allocaN, align 1 + %zN = zext i1 %load to i64 + %ba.val = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1 + %igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0 + store { i64, i64 } %ba.val, ptr %igp.ptr, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr %igp.ptr4, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 1, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.31, i64 0 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 12) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load i1, ptr %allocaN, align 1 + %zN = zext i1 %loadN to i64 + %ba.val13 = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1 + %callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val13) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 14, i64 1) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: - %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.34, i64 15 }) + %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.32, i64 15 }) ret { ptr, i64 } %call } +; Function Attrs: nounwind +define internal void @print__ct_s337be2777a405332__pack_s64_s64_s64(ptr %0, i64 %1, i64 %2, i64 %3) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.33, i64 22 }, ptr %alloca, align 8 + %allocaN = alloca i64, align 8 + store i64 %1, ptr %allocaN, align 8 + %allocaN = alloca i64, align 8 + store i64 %2, ptr %allocaN, align 8 + %allocaN = alloca i64, align 8 + store i64 %3, ptr %allocaN, align 8 + %allocaN = alloca [3 x { i64, i64 }], align 8 + %load = load i64, ptr %allocaN, align 8 + %ba.val = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %load, 1 + %igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0 + store { i64, i64 } %ba.val, ptr %igp.ptr, align 8 + %loadN = load i64, ptr %allocaN, align 8 + %ba.val6 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1 + %igp.ptr7 = getelementptr { i64, i64 }, ptr %allocaN, i64 1 + store { i64, i64 } %ba.val6, ptr %igp.ptr7, align 8 + %loadN = load i64, ptr %allocaN, align 8 + %ba.val9 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1 + %igp.ptr10 = getelementptr { i64, i64 }, ptr %allocaN, i64 2 + store { i64, i64 } %ba.val9, ptr %igp.ptr10, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %igp.ptr12 = getelementptr { i64, i64 }, ptr %allocaN, i64 0 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr %igp.ptr12, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 3, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.34, i64 0 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 10) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load i64, ptr %allocaN, align 8 + %ba.val20 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1 + %callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val20) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 12, i64 2) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load i64, ptr %allocaN, align 8 + %ba.val29 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1 + %callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val29) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 16, i64 2) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load i64, ptr %allocaN, align 8 + %ba.val38 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1 + %callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val38) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 20, i64 2) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %4 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_1(ptr %0) #0 { entry: @@ -3419,7 +3438,7 @@ if.merge.244: ; preds = %if.else.243, %if.th } ; Function Attrs: nounwind -define internal { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %1) #0 { +define internal { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %1) #0 { entry: %alloca = alloca ptr, align 8 store ptr %1, ptr %alloca, align 8 @@ -3475,7 +3494,7 @@ if.merge.250: ; preds = %if.else.249, %if.th } ; Function Attrs: nounwind -define internal { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %1) #0 { +define internal { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %1) #0 { entry: %alloca = alloca ptr, align 8 store ptr %1, ptr %alloca, align 8 @@ -3494,7 +3513,7 @@ if.else.252: ; preds = %entry %loadN = load i64, ptr %allocaN, align 8 %call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.191, i64 3 }, { ptr, i64 } %call) - %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 6 }, { ptr, i64 } %callN) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 7 }, { ptr, i64 } %callN) br label %if.merge.253 if.merge.253: ; preds = %if.else.252, %if.then.251 @@ -3503,7 +3522,7 @@ if.merge.253: ; preds = %if.else.252, %if.th } ; Function Attrs: nounwind -define internal { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %1) #0 { +define internal { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %1) #0 { entry: %alloca = alloca ptr, align 8 store ptr %1, ptr %alloca, align 8 @@ -3522,7 +3541,7 @@ if.else.255: ; preds = %entry %loadN = load i64, ptr %allocaN, align 8 %call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.194, i64 3 }, { ptr, i64 } %call) - %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.193, i64 7 }, { ptr, i64 } %callN) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.193, i64 6 }, { ptr, i64 } %callN) br label %if.merge.256 if.merge.256: ; preds = %if.else.255, %if.then.254 diff --git a/tests/expected/ffi-objc-dsl-07-mangling-table.ir b/tests/expected/ffi-objc-dsl-07-mangling-table.ir index f1bf9ac..a909fed 100644 --- a/tests/expected/ffi-objc-dsl-07-mangling-table.ir +++ b/tests/expected/ffi-objc-dsl-07-mangling-table.ir @@ -891,24 +891,7 @@ entry: %loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8 %objc.msg47 = call i32 @objc_msgSend(ptr %loadN, ptr %loadN) - %allocaN = alloca { ptr, i64 }, align 8 - %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 - store ptr null, ptr %gep, align 8 - %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 - store i64 0, ptr %gepN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.32, i64 18 }, ptr %allocaN, align 8 - %allocaN = alloca { ptr, i64 }, align 8 - store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 18) - %callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN) - store { ptr, i64 } %callN, ptr %allocaN, align 8 - %loadN = load { ptr, i64 }, ptr %allocaN, align 8 - %str.ptr = extractvalue { ptr, i64 } %loadN, 0 - %str.len = extractvalue { ptr, i64 } %loadN, 1 - %0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + call void @print__ct_s4c1a58a7c89bfbba__pack(ptr @__sx_default_context) ret i32 0 } @@ -926,6 +909,30 @@ entry: ret void } +; Function Attrs: nounwind +define internal void @print__ct_s4c1a58a7c89bfbba__pack(ptr %0) #0 { +entry: + %alloca = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.32, i64 18 }, ptr %alloca, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 + store ptr null, ptr %gep, align 8 + %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 + store i64 0, ptr %gepN, align 8 + %allocaN = alloca { ptr, i64 }, align 8 + store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8 + %load = load { ptr, i64 }, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %alloca, align 8 + %call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 18) + %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call) + store { ptr, i64 } %callN, ptr %allocaN, align 8 + %loadN = load { ptr, i64 }, ptr %allocaN, align 8 + %str.ptr = extractvalue { ptr, i64 } %loadN, 0 + %str.len = extractvalue { ptr, i64 } %loadN, 1 + %1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len) + ret void +} + ; Function Attrs: nounwind define internal { ptr, i64 } @__insert_0(ptr %0) #0 { entry: