std: restructure — std/ modules, namespace tail, std/xml.sx

allocators/fs/process/socket/log/trace/test move under modules/std/
(allocators.sx becomes std/mem.sx; the Allocator protocol moves into
the std.sx prelude, impls stay in mem.sx). New std/xml.sx holds
xml_escape as xml.escape. std.sx gains the carried namespace tail —
flat-importing std.sx now also provides mem./xml./log. — with the
remaining modules (fs/process/socket/json/cli/hash/test) deferred from
the tail until the global last-wins maps are fully own-wins (pulling
them into every closure collides bare names corpus-wide; they stay
direct imports: modules/std/fs.sx etc.). log.sx's internal emit
renamed log_emit (it clobbered consumer fns named emit program-wide).
bundle.sx uses xml.escape via the carried alias. Consumer import paths
swept mechanically; .ir snapshots recaptured for the larger std
closure. m3te + game build unchanged.
This commit is contained in:
agra
2026-06-11 06:10:59 +03:00
parent ee00db849c
commit 59f0aa7716
112 changed files with 18612 additions and 15988 deletions

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Color :: enum { red; green; blue; } Color :: enum { red; green; blue; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
add :: (a: s32, b: s32) -> s32 { a + b } add :: (a: s32, b: s32) -> s32 { a + b }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
add :: (a: s32, b: s32) -> s32 { a + b } add :: (a: s32, b: s32) -> s32 { a + b }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
add :: (a: s32, b: s32) -> s32 { a + b } add :: (a: s32, b: s32) -> s32 { a + b }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Perms :: enum flags { read; write; execute; } Perms :: enum flags { read; write; execute; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,8 +1,8 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
// ============================================================ // ============================================================

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -12,7 +12,7 @@
// first 4 bytes of malloc'd memory interpreted as `s32` (= 0 → null). // first 4 bytes of malloc'd memory interpreted as `s32` (= 0 → null).
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
main :: () -> s32 { main :: () -> s32 {
gpa := GPA.init(); gpa := GPA.init();

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
Point :: struct { x, y: s32; } Point :: struct { x, y: s32; }

View File

@@ -19,7 +19,7 @@
// match the impl's protocol type-args exactly. // match the impl's protocol type-args exactly.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
// User-defined parameterised protocol + an impl, so has_impl can // User-defined parameterised protocol + an impl, so has_impl can
// confirm parameterised matching works with a known-true case. // confirm parameterised matching works with a known-true case.

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
add :: (a: s32, b: s32) -> s32 { a + b } add :: (a: s32, b: s32) -> s32 { a + b }

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -13,7 +13,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/std/hash.sx"; #import "modules/std/hash.sx";
#import "modules/fs.sx"; #import "modules/std/fs.sx";
// 112-byte NIST multi-block vector — long enough that a 64-byte split is // 112-byte NIST multi-block vector — long enough that a 64-byte split is
// a genuine block boundary and a 30-byte split lands mid-block. // a genuine block boundary and a 30-byte split lands mid-block.

View File

@@ -18,9 +18,9 @@
// and freed in one `deinit`; the writer path allocates nothing. // and freed in one `deinit`; the writer path allocates nothing.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
#import "modules/std/json.sx"; #import "modules/std/json.sx";
#import "modules/fs.sx"; #import "modules/std/fs.sx";
// The exact document the writer must produce (insertion order, escaping). // The exact document the writer must produce (insertion order, escaping).
EXPECT :: "{\"name\":\"a\\\"b\\n\",\"tab\":\"x\\ty\",\"bs\":\"c\\\\d\",\"ctrl\":\"\\u0001\",\"n\":-7,\"zero\":0,\"pos\":7,\"min\":-9223372036854775808,\"max\":9223372036854775807,\"ok\":true,\"nil\":null,\"xs\":[1,-2,3],\"nested\":{\"k\":\"v\"}}"; EXPECT :: "{\"name\":\"a\\\"b\\n\",\"tab\":\"x\\ty\",\"bs\":\"c\\\\d\",\"ctrl\":\"\\u0001\",\"n\":-7,\"zero\":0,\"pos\":7,\"min\":-9223372036854775808,\"max\":9223372036854775807,\"ok\":true,\"nil\":null,\"xs\":[1,-2,3],\"nested\":{\"k\":\"v\"}}";

View File

@@ -20,7 +20,7 @@
// `JsonParseError` variant on the error channel, never a bogus value. // `JsonParseError` variant on the error channel, never a bogus value.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
#import "modules/std/json.sx"; #import "modules/std/json.sx";
// Canonical document: no insignificant whitespace, escapes in the writer's // Canonical document: no insignificant whitespace, escapes in the writer's

View File

@@ -23,7 +23,7 @@
// and decoded strings go through `alloc`, and the writer allocates nothing. // and decoded strings go through `alloc`, and the writer allocates nothing.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
#import "modules/std/json.sx"; #import "modules/std/json.sx";
// The writer's EXACT output for the PART A document (insertion order, // The writer's EXACT output for the PART A document (insertion order,

View File

@@ -19,7 +19,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/std/cli.sx"; #import "modules/std/cli.sx";
log :: #import "modules/log.sx"; log :: #import "modules/std/log.sx";
report :: (label: string, ok: bool) { report :: (label: string, ok: bool) {
if ok { print("{}: ok\n", label); } else { print("{}: FAIL\n", label); } if ok { print("{}: ok\n", label); } else { print("{}: FAIL\n", label); }

View File

@@ -12,7 +12,7 @@
// independent identities. // independent identities.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
// `cli` is imported BOTH flat (so its types — `FlagSpec` / `Command` / `Diag` — // `cli` is imported BOTH flat (so its types — `FlagSpec` / `Command` / `Diag` —
// are bare-visible) AND namespaced (so the same-name `cli.parse` stays a // are bare-visible) AND namespaced (so the same-name `cli.parse` stays a
// distinct qualified identity from `json.parse`). Post-E1 a bare reference to a // distinct qualified identity from `json.parse`). Post-E1 a bare reference to a

View File

@@ -3,7 +3,7 @@
// that protocol. Exercises save/restore of the boxed context across the push. // that protocol. Exercises save/restore of the boxed context across the push.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
main :: () -> void { main :: () -> void {
arena := Arena.init(context.allocator, 4096); arena := Arena.init(context.allocator, 4096);

View File

@@ -9,7 +9,7 @@
// 3. Static method with inline xx: `T.init(xx p, ...)` ← used to crash // 3. Static method with inline xx: `T.init(xx p, ...)` ← used to crash
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
Box :: struct { Box :: struct {
parent: Allocator; parent: Allocator;

View File

@@ -4,7 +4,7 @@
// whether the recovery happens BEFORE or AFTER the first dispatch. // whether the recovery happens BEFORE or AFTER the first dispatch.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
main :: () -> s32 { main :: () -> s32 {
gpa := GPA.init(); gpa := GPA.init();

View File

@@ -9,7 +9,7 @@
// the operand's storage, so it never allocates and never reaches this // the operand's storage, so it never allocates and never reaches this
// path. See specs.md §3 — Protocol value ownership and lifetime. // path. See specs.md §3 — Protocol value ownership and lifetime.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; // `Allocator` is non-transitive: name it, import it. #import "modules/std/mem.sx"; // `Allocator` is non-transitive: name it, import it.
Tracer :: struct { Tracer :: struct {
count: s64; count: s64;

View File

@@ -8,7 +8,7 @@
// and the local would stay at zero. With Option 3 the local sees the // and the local would stay at zero. With Option 3 the local sees the
// increments because they ARE the local. // increments because they ARE the local.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
main :: () -> s32 { main :: () -> s32 {
gpa := GPA.init(); gpa := GPA.init();

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
main :: () { main :: () {

View File

@@ -1,4 +1,4 @@
// Error return-trace formatting (ERR step E3.3). `library/modules/trace.sx` // Error return-trace formatting (ERR step E3.3). `library/modules/std/trace.sx`
// reads the trace buffer (E3.1, populated by E3.2's raise/try push wiring) and // reads the trace buffer (E3.1, populated by E3.2's raise/try push wiring) and
// renders it. `trace.print_current()` writes the trace to stderr; the catch // renders it. `trace.print_current()` writes the trace to stderr; the catch
// handler sees the full chain because the absorption clear fires at handler // handler sees the full chain because the absorption clear fires at handler
@@ -9,7 +9,7 @@
// snapshot shows the trace lines interleaved with the `print` (stdout) lines. // snapshot shows the trace lines interleaved with the `print` (stdout) lines.
#import "modules/std.sx"; #import "modules/std.sx";
trace :: #import "modules/trace.sx"; trace :: #import "modules/std/trace.sx";
// Buffer length probe (the runtime symbol; public read API is the trace module). // Buffer length probe (the runtime symbol; public read API is the trace module).
sx_trace_len :: () -> u32 #foreign; sx_trace_len :: () -> u32 #foreign;

View File

@@ -12,7 +12,7 @@
// single stdout line. Expected exit code: 0. // single stdout line. Expected exit code: 0.
#import "modules/std.sx"; #import "modules/std.sx";
log :: #import "modules/log.sx"; log :: #import "modules/std/log.sx";
probe :: () -> s32 { probe :: () -> s32 {
if is_comptime() { return 1; } // comptime interpreter path if is_comptime() { return 1; } // comptime interpreter path

View File

@@ -5,7 +5,7 @@
// still appears despite `_exit` skipping the stdio flush.) Expected exit: 42. // still appears despite `_exit` skipping the stdio flush.) Expected exit: 42.
#import "modules/std.sx"; #import "modules/std.sx";
proc :: #import "modules/process.sx"; proc :: #import "modules/std/process.sx";
main :: () -> s32 { main :: () -> s32 {
print("starting\n"); print("starting\n");

View File

@@ -4,7 +4,7 @@
// Built on `process.exit`. Expected exit code: 1. // Built on `process.exit`. Expected exit code: 1.
#import "modules/std.sx"; #import "modules/std.sx";
proc :: #import "modules/process.sx"; proc :: #import "modules/std/process.sx";
main :: () -> s32 { main :: () -> s32 {
proc.assert(2 + 2 == 4, "arithmetic"); // passes → no-op proc.assert(2 + 2 == 4, "arithmetic"); // passes → no-op

View File

@@ -6,7 +6,7 @@
// resolution, so only names print today. Expected exit: 0. // resolution, so only names print today. Expected exit: 0.
#import "modules/std.sx"; #import "modules/std.sx";
trace :: #import "modules/trace.sx"; trace :: #import "modules/std/trace.sx";
probe :: () { probe :: () {
trace.print_interpreter_frames(); // dumps the chain: __run_0 → inner → probe trace.print_interpreter_frames(); // dumps the chain: __run_0 → inner → probe

View File

@@ -7,7 +7,7 @@
// Expected exit: 0 (the error is caught; the trace is printed during the build). // Expected exit: 0 (the error is caught; the trace is printed during the build).
#import "modules/std.sx"; #import "modules/std.sx";
trace :: #import "modules/trace.sx"; trace :: #import "modules/std/trace.sx";
TErr :: error { Bad }; TErr :: error { Bad };

View File

@@ -1,7 +1,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/math/math.sx"; #import "modules/math/math.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/test.sx"; #import "modules/std/test.sx";
pkg :: #import "modules/testpkg"; pkg :: #import "modules/testpkg";
// --- Foreign function binding --- // --- Foreign function binding ---

View File

@@ -21,7 +21,7 @@
// tracker and pollute the deltas. // tracker and pollute the deltas.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/std/objc.sx"; #import "modules/std/objc.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";

View File

@@ -12,7 +12,7 @@
// tracker observes exactly +3 / +3 deltas. // tracker observes exactly +3 / +3 deltas.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/std/objc.sx"; #import "modules/std/objc.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";

View File

@@ -15,7 +15,7 @@
// midpoint (no extra dealloc). Without: child is dead at midpoint. // midpoint (no extra dealloc). Without: child is dead at midpoint.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/std/objc.sx"; #import "modules/std/objc.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";

View File

@@ -18,7 +18,7 @@
// read result to null. // read result to null.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/std/objc.sx"; #import "modules/std/objc.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";

View File

@@ -1,7 +1,7 @@
// HTTP server example (macOS only) // HTTP server example (macOS only)
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/socket.sx"; #import "modules/std/socket.sx";
// --- Logger --- // --- Logger ---

View File

@@ -1,5 +1,5 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/fs.sx"; #import "modules/std/fs.sx";
// fs.sx smoke test: every primitive the bundling phase needs. // fs.sx smoke test: every primitive the bundling phase needs.
// Creates a temp tree, writes/reads/copies/renames/chmod/deletes // Creates a temp tree, writes/reads/copies/renames/chmod/deletes

View File

@@ -1,5 +1,5 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/process.sx"; #import "modules/std/process.sx";
// process.sx smoke test: run + env + find_executable, with // process.sx smoke test: run + env + find_executable, with
// success-path and failure-path coverage. // success-path and failure-path coverage.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -120,9 +120,6 @@ declare ptr @concat(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0 declare ptr @substr(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -132,6 +129,74 @@ declare ptr @any_to_string(ptr, [2 x i64]) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0 declare ptr @build_format(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i64 @accept_c(ptr %0) #0 { define internal i64 @accept_c(ptr %0) #0 {
entry: entry:

View File

@@ -7,34 +7,34 @@
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null }
@__sx_objc_cstr_dealloc = internal global [8 x i8] c"dealloc\00" @__sx_objc_cstr_dealloc = internal global [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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1 @str.36 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@str.17 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.37 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.18 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1 @str.38 = 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_.19 = private unnamed_addr constant [6 x i8] c"SxFoo\00" @OBJC_CLASS_NAME_.39 = 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_.20 = private unnamed_addr constant [8 x i8] c"dealloc\00" @OBJC_METH_VAR_NAME_.40 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.21 = private unnamed_addr constant [4 x i8] c"v@:\00" @OBJC_METH_VAR_TYPE_.41 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.22 = private unnamed_addr constant [6 x i8] c"alloc\00" @OBJC_METH_VAR_NAME_.42 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.23 = private unnamed_addr constant [4 x i8] c"@@:\00" @OBJC_METH_VAR_TYPE_.43 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -327,9 +327,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -342,7 +339,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, 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
@@ -438,7 +435,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, 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
@@ -446,7 +443,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, 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
@@ -456,13 +453,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, 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
@@ -470,7 +467,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN) %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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, 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
@@ -484,7 +481,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, 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
@@ -492,7 +489,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, 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
@@ -503,7 +500,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, 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
@@ -560,7 +557,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, 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
@@ -568,7 +565,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, 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
@@ -579,7 +576,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, 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
@@ -599,7 +596,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, 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
@@ -607,7 +604,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, 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
@@ -618,7 +615,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -627,6 +624,74 @@ if.merge.36: ; preds = %if.then.35, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(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
@@ -779,14 +844,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.16, i64 9 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.36, i64 9 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.37, 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)
@@ -802,7 +867,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.18, i64 9 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.38, i64 9 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -867,8 +932,6 @@ entry:
ret void ret void
} }
declare i64 @write(i32, ptr, i64)
declare ptr @objc_getClass(ptr) declare ptr @objc_getClass(ptr)
declare ptr @objc_allocateClassPair(ptr, ptr, i64) declare ptr @objc_allocateClassPair(ptr, ptr, i64)
@@ -884,17 +947,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_.19, i64 0) %cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.39, 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_.20) %sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.40)
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.21) %2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.41)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.22) %sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.42)
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.23) %3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.43)
%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

View File

@@ -7,50 +7,50 @@
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null }
@__sx_objc_cstr_dealloc = internal global [8 x i8] c"dealloc\00" @__sx_objc_cstr_dealloc = internal global [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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1 @str.36 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
@str.17 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1 @str.37 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
@str.18 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1 @str.38 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
@str.19 = private unnamed_addr constant [8 x i8] c"release\00", align 1 @str.39 = private unnamed_addr constant [8 x i8] c"release\00", align 1
@str.20 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1 @str.40 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.21 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.41 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.22 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1 @str.42 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.23 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1 @str.43 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.24 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.44 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.25 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1 @str.45 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.26 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1 @str.46 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.27 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.47 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.28 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1 @str.48 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.29 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1 @str.49 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.30 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.50 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.31 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1 @str.51 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.32 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1 @str.52 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.33 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.53 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.34 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1 @str.54 = 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_.35 = private unnamed_addr constant [6 x i8] c"SxFoo\00" @OBJC_CLASS_NAME_.55 = 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_.36 = private unnamed_addr constant [8 x i8] c"dealloc\00" @OBJC_METH_VAR_NAME_.56 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.37 = private unnamed_addr constant [4 x i8] c"v@:\00" @OBJC_METH_VAR_TYPE_.57 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.38 = private unnamed_addr constant [6 x i8] c"alloc\00" @OBJC_METH_VAR_NAME_.58 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.39 = private unnamed_addr constant [4 x i8] c"@@:\00" @OBJC_METH_VAR_TYPE_.59 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -343,9 +343,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -358,7 +355,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, 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
@@ -454,7 +451,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, 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
@@ -462,7 +459,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, 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
@@ -472,13 +469,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, 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
@@ -486,7 +483,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, 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
@@ -500,7 +497,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, 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 +505,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, 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 +516,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, 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
@@ -576,7 +573,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, 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
@@ -584,7 +581,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, 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
@@ -595,7 +592,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, 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
@@ -615,7 +612,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, 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
@@ -623,7 +620,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, 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
@@ -634,7 +631,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -643,6 +640,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(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
@@ -839,7 +904,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.16) %call = call ptr @objc_getClass(ptr @str.36)
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
@@ -850,7 +915,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.17) %callN = call ptr @sel_registerName(ptr @str.37)
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
@@ -865,7 +930,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.18) %callN = call ptr @sel_registerName(ptr @str.38)
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
@@ -882,7 +947,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.19) %callN = call ptr @sel_registerName(ptr @str.39)
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
@@ -929,14 +994,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.20, i64 27 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.40, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.21, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.41, 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)
@@ -952,7 +1017,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.22, i64 27 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.42, i64 27 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -960,14 +1025,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.23, i64 26 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.43, i64 26 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.24, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.44, 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)
@@ -983,7 +1048,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.25, i64 26 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.45, i64 26 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -991,14 +1056,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.26, i64 27 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.46, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.27, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.47, 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)
@@ -1014,7 +1079,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.28, i64 27 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.48, i64 27 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -1022,14 +1087,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.29, i64 35 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.49, i64 35 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.30, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.50, 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)
@@ -1045,7 +1110,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.31, i64 35 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.51, i64 35 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -1053,14 +1118,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.32, i64 12 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.52, i64 12 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.53, 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)
@@ -1076,7 +1141,7 @@ 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.34, i64 12 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.54, i64 12 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
@@ -1129,24 +1194,22 @@ entry:
ret void ret void
} }
declare i64 @write(i32, ptr, i64)
declare i8 @class_addIvar(ptr, ptr, i64, i8, ptr) 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_.35, i64 0) %cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.55, 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_.36) %sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.56)
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.37) %2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.57)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.38) %sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.58)
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.39) %3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.59)
%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 it is too large Load Diff

View File

@@ -6,26 +6,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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.36 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.17 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.37 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = 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_.19 = private unnamed_addr constant [8 x i8] c"release\00" @OBJC_METH_VAR_NAME_.39 = 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 }]
; Function Attrs: nounwind ; Function Attrs: nounwind
@@ -319,9 +319,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -334,7 +331,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, 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
@@ -430,7 +427,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, 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
@@ -438,7 +435,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, 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
@@ -448,13 +445,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, 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
@@ -462,7 +459,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, 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
@@ -476,7 +473,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, 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
@@ -484,7 +481,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, 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
@@ -495,7 +492,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, 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
@@ -552,7 +549,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, 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
@@ -560,7 +557,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, 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
@@ -571,7 +568,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, 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
@@ -591,7 +588,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, 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
@@ -599,7 +596,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, 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
@@ -610,7 +607,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -619,6 +616,74 @@ if.merge.36: ; preds = %if.then.35, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(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
@@ -764,14 +829,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.16, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.36, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.37, 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)
@@ -787,21 +852,19 @@ 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.18, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.38, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare ptr @objc_msgSend(ptr, ptr) declare ptr @objc_msgSend(ptr, ptr)
declare i64 @write(i32, ptr, i64)
declare ptr @sel_registerName(ptr) declare ptr @sel_registerName(ptr)
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_init, align 8 store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_init, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.19) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.39)
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 it is too large Load Diff

View File

@@ -11,47 +11,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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1 @str.36 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1
@str.17 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1 @str.37 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1
@str.18 = private unnamed_addr constant [7 x i8] c"length\00", align 1 @str.38 = private unnamed_addr constant [7 x i8] c"length\00", align 1
@str.19 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1 @str.39 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.20 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1 @str.40 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1
@str.21 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1 @str.41 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1
@str.22 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1 @str.42 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1
@str.23 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1 @str.43 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.24 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1 @str.44 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1
@str.25 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1 @str.45 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1
@str.26 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1 @str.46 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1
@str.27 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1 @str.47 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1
@str.28 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1 @str.48 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1
@str.29 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1 @str.49 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.30 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1 @str.50 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1
@str.31 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1 @str.51 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.32 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1 @str.52 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
@str.33 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.53 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.34 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1 @str.54 = 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_.35 = private unnamed_addr constant [11 x i8] c"addObject:\00" @OBJC_METH_VAR_NAME_.55 = private unnamed_addr constant [11 x i8] c"addObject:\00"
@OBJC_METH_VAR_NAME_.36 = private unnamed_addr constant [13 x i8] c"combine:and:\00" @OBJC_METH_VAR_NAME_.56 = private unnamed_addr constant [13 x i8] c"combine:and:\00"
@OBJC_METH_VAR_NAME_.37 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00" @OBJC_METH_VAR_NAME_.57 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00"
@OBJC_METH_VAR_NAME_.38 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00" @OBJC_METH_VAR_NAME_.58 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00"
@OBJC_METH_VAR_NAME_.39 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00" @OBJC_METH_VAR_NAME_.59 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00"
@OBJC_METH_VAR_NAME_.40 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00" @OBJC_METH_VAR_NAME_.60 = 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 }]
; Function Attrs: nounwind ; Function Attrs: nounwind
@@ -345,9 +345,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -360,7 +357,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, 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
@@ -456,7 +453,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, 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
@@ -464,7 +461,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, 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
@@ -474,13 +471,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, 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
@@ -488,7 +485,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, 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
@@ -502,7 +499,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, 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
@@ -510,7 +507,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, 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
@@ -521,7 +518,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, 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
@@ -578,7 +575,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, 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
@@ -586,7 +583,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, 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
@@ -597,7 +594,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, 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
@@ -617,7 +614,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, 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
@@ -625,7 +622,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, 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
@@ -636,7 +633,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -645,6 +642,74 @@ if.merge.36: ; preds = %if.then.35, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(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
@@ -836,34 +901,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.16) %call = call ptr @objc_getClass(ptr @str.36)
%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.17, i64 0) %callN = call ptr @objc_allocateClassPair(ptr %load, ptr @str.37, 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.18) %callN = call ptr @sel_registerName(ptr @str.38)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.19) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.39)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.20) %callN = call ptr @sel_registerName(ptr @str.40)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.21) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.41)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.22) %callN = call ptr @sel_registerName(ptr @str.42)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.23) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.43)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.24) %callN = call ptr @sel_registerName(ptr @str.44)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.25) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.45)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.26) %callN = call ptr @sel_registerName(ptr @str.46)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.27) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.47)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.28) %callN = call ptr @sel_registerName(ptr @str.48)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.29) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.49)
%loadN = load ptr, ptr %allocaN, align 8 %loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.30) %callN = call ptr @sel_registerName(ptr @str.50)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.31) %callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.51)
%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
@@ -913,14 +978,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.32, i64 18 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.52, i64 18 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.53, 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)
@@ -936,27 +1001,25 @@ 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.34, i64 18 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.54, i64 18 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)
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_.35) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.55)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8 store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.36) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.56)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8 store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.37) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.57)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8 store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.38) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.58)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_add_observer_for_event_, 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_.39) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.59)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8 store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.40) %selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.60)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8 store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8
ret void ret void
} }

View File

@@ -2,30 +2,30 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [5 x i8] c"noop\00", align 1 @str.36 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()V\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null @SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null @SX_JNI_MID_noop____V = internal global ptr null
@str.18 = private unnamed_addr constant [5 x i8] c"noop\00", align 1 @str.38 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.19 = private unnamed_addr constant [4 x i8] c"()V\00", align 1 @str.39 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.21 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.41 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.22 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.42 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -318,9 +318,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -333,7 +330,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -429,7 +426,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -437,7 +434,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -447,13 +444,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -461,7 +458,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -475,7 +472,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -483,7 +480,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -494,7 +491,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -551,7 +548,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -559,7 +556,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -570,7 +567,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -590,7 +587,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -598,7 +595,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -609,7 +606,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -618,6 +615,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -644,7 +709,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont br label %jni.cont
@@ -669,7 +734,7 @@ jni.miss7: ; preds = %jni.cont
store ptr %jni.global.cls12, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls12, ptr @SX_JNI_CLS_noop____V, align 8
%9 = getelementptr inbounds ptr, ptr %jni.ifs4, i32 33 %9 = getelementptr inbounds ptr, ptr %jni.ifs4, i32 33
%jni.GetMethodID13 = load ptr, ptr %9, align 8 %jni.GetMethodID13 = load ptr, ptr %9, align 8
%jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.18, ptr @str.19) %jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.38, ptr @str.39)
store ptr %jni.fresh.mid14, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid14, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont8 br label %jni.cont8
@@ -721,14 +786,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.20, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.40, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.21, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.41, 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)
@@ -744,8 +809,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.22, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.42, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1 @str.36 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()I\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()I\00", align 1
@SX_JNI_CLS_getCount____I = internal global ptr null @SX_JNI_CLS_getCount____I = internal global ptr null
@SX_JNI_MID_getCount____I = internal global ptr null @SX_JNI_MID_getCount____I = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i32 @read_int(ptr %0, ptr %1, ptr %2) #0 { define internal i32 @read_int(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getCount____I, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getCount____I, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getCount____I, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getCount____I, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1 @str.36 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()J\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()J\00", align 1
@SX_JNI_CLS_currentTimeMillis____J = internal global ptr null @SX_JNI_CLS_currentTimeMillis____J = internal global ptr null
@SX_JNI_MID_currentTimeMillis____J = internal global ptr null @SX_JNI_MID_currentTimeMillis____J = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i64 @read_long(ptr %0, ptr %1, ptr %2) #0 { define internal i64 @read_long(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_currentTimeMillis____J, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_currentTimeMillis____J, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_currentTimeMillis____J, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_currentTimeMillis____J, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1 @str.36 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()D\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()D\00", align 1
@SX_JNI_CLS_getValue____D = internal global ptr null @SX_JNI_CLS_getValue____D = internal global ptr null
@SX_JNI_MID_getValue____D = internal global ptr null @SX_JNI_MID_getValue____D = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal double @read_double(ptr %0, ptr %1, ptr %2) #0 { define internal double @read_double(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getValue____D, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getValue____D, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getValue____D, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getValue____D, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1 @str.36 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1
@SX_JNI_CLS_isShown____Z = internal global ptr null @SX_JNI_CLS_isShown____Z = internal global ptr null
@SX_JNI_MID_isShown____Z = internal global ptr null @SX_JNI_MID_isShown____Z = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i1 @read_bool(ptr %0, ptr %1, ptr %2) #0 { define internal i1 @read_bool(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_isShown____Z, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_isShown____Z, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_isShown____Z, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_isShown____Z, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1 @str.36 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.17 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1 @str.37 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1
@SX_JNI_CLS_getWindow____Landroid_view_Window_ = internal global ptr null @SX_JNI_CLS_getWindow____Landroid_view_Window_ = internal global ptr null
@SX_JNI_MID_getWindow____Landroid_view_Window_ = internal global ptr null @SX_JNI_MID_getWindow____Landroid_view_Window_ = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal ptr @get_window(ptr %0, ptr %1, ptr %2) #0 { define internal ptr @get_window(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Landroid_view_Window_, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Landroid_view_Window_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Landroid_view_Window_, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Landroid_view_Window_, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [4 x i8] c"max\00", align 1 @str.36 = private unnamed_addr constant [4 x i8] c"max\00", align 1
@str.17 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1 @str.37 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1
@SX_JNI_CLS_max___II_I = internal global ptr null @SX_JNI_CLS_max___II_I = internal global ptr null
@SX_JNI_MID_max___II_I = internal global ptr null @SX_JNI_MID_max___II_I = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal i32 @call_static_max(ptr %0, ptr %1, ptr %2) #0 { define internal i32 @call_static_max(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -639,7 +704,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_max___II_I, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_max___II_I, align 8
%4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 113 %4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 113
%jni.GetStaticMethodID = load ptr, ptr %4, align 8 %jni.GetStaticMethodID = load ptr, ptr %4, align 8
%jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_max___II_I, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_max___II_I, align 8
br label %jni.cont br label %jni.cont
@@ -693,14 +758,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -716,8 +781,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1 @str.36 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.17 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1 @str.37 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1
@SX_JNI_CLS_getWindow____Ljava_lang_Object_ = internal global ptr null @SX_JNI_CLS_getWindow____Ljava_lang_Object_ = internal global ptr null
@SX_JNI_MID_getWindow____Ljava_lang_Object_ = internal global ptr null @SX_JNI_MID_getWindow____Ljava_lang_Object_ = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -643,7 +708,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Ljava_lang_Object_, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Ljava_lang_Object_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Ljava_lang_Object_, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Ljava_lang_Object_, align 8
br label %jni.cont br label %jni.cont
@@ -696,14 +761,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -719,8 +784,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false @g_should_call = internal global i1 false
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1 @str.21 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.2 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.22 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.3 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.23 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.4 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.24 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.5 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1 @str.25 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.6 = private unnamed_addr constant [6 x i8] c"])); \00", align 1 @str.26 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.7 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.27 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.8 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.28 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.9 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.29 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.10 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.30 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.11 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.31 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.12 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.32 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.13 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1 @str.33 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.14 = private unnamed_addr constant [3 x i8] c", \00", align 1 @str.34 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.15 = private unnamed_addr constant [5 x i8] c")); \00", align 1 @str.35 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.16 = private unnamed_addr constant [5 x i8] c"noop\00", align 1 @str.36 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.17 = private unnamed_addr constant [4 x i8] c"()V\00", align 1 @str.37 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null @SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null @SX_JNI_MID_noop____V = internal global ptr null
@str.18 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.38 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.19 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 @str.39 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.20 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1 @str.40 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
declare void @out(ptr) #0 declare void @out(ptr) #0
@@ -316,9 +316,6 @@ entry:
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -331,7 +328,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.1, i64 14 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.21, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8 store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8 %allocaN = alloca i64, align 8
@@ -427,7 +424,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.2, i64 36 }) %call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.22, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8 store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -435,7 +432,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.3, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.23, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -445,13 +442,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.4, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.24, 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.5, i64 43 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.25, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -459,7 +456,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.6, i64 5 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.26, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1 %addN = add i64 %loadN, 1
@@ -473,7 +470,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.7, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.27, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -481,7 +478,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.8, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.28, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -492,7 +489,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.9, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.29, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -549,7 +546,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.10, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.30, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -557,7 +554,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.11, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.31, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -568,7 +565,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.12, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.32, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2 %addN = add i64 %loadN, 2
@@ -588,7 +585,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.13, i64 36 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.33, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8 %loadN = load i64, ptr %allocaN, align 8
@@ -596,7 +593,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.14, i64 2 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.34, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8 store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8 %loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8 %loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -607,7 +604,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.15, i64 4 }) %callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.35, 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
@@ -616,6 +613,74 @@ if.merge.38: ; preds = %if.then.37, %while.
ret { ptr, i64 } %loadN ret { ptr, i64 } %loadN
} }
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 { define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry: entry:
@@ -642,7 +707,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8 store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33 %5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8 %jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.16, ptr @str.17) %jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.36, ptr @str.37)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8 store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont br label %jni.cont
@@ -694,14 +759,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 { define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry: entry:
%alloca = alloca { ptr, i64 }, align 8 %alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %alloca, align 8 store { ptr, i64 } { ptr @str.38, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0 %gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8 store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1 %gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8 store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8 %allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8 store { ptr, i64 } { ptr @str.39, 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)
@@ -717,8 +782,6 @@ entry:
; Function Attrs: nounwind ; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 { define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.20, i64 3 }) %call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.40, i64 3 })
ret { ptr, i64 } %call ret { ptr, i64 } %call
} }
declare i64 @write(i32, ptr, i64)

View File

@@ -5,10 +5,10 @@
@g_held_view = internal global ptr null @g_held_view = internal global ptr null
@__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, ptr null } @__sx_default_context = internal global { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc, ptr @__thunk_CAllocator_Allocator_dealloc }, 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.1 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1 @str.21 = 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.2 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1 @str.22 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
@str.3 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1 @str.23 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1
@jni.ctor.path = private unnamed_addr constant [25 x i8] c"android/view/SurfaceView\00", align 1 @jni.ctor.path = private unnamed_addr constant [25 x i8] c"android/view/SurfaceView\00", align 1
; Function Attrs: nounwind ; Function Attrs: nounwind
@@ -130,9 +130,6 @@ declare ptr @concat(ptr, ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @substr(ptr, ptr, i64, i64) #0 declare ptr @substr(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @xml_escape(ptr, ptr) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @path_join(ptr, ptr) #0 declare ptr @path_join(ptr, ptr) #0
@@ -142,6 +139,74 @@ declare ptr @any_to_string(ptr, [2 x i64]) #0
; Function Attrs: nounwind ; Function Attrs: nounwind
declare ptr @build_format(ptr, ptr) #0 declare ptr @build_format(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @CAllocator.alloc.1(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @CAllocator.dealloc.2(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @GPA.init.3(ptr) #0
; Function Attrs: nounwind
declare ptr @GPA.alloc.4(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @GPA.dealloc.5(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.add_chunk.6(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.init.7(ptr sret({ ptr, i64, { ptr, ptr, ptr } }), ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.reset.8(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Arena.deinit.9(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @Arena.alloc.10(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Arena.dealloc.11(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.init.12(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.reset.13(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BufAlloc.alloc.14(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @BufAlloc.dealloc.15(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.init.16(ptr sret({ { ptr, ptr, ptr }, i64, i64, i64 }), ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @TrackingAllocator.leak_count.17(ptr, ptr) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.report.18(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @TrackingAllocator.alloc.19(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @TrackingAllocator.dealloc.20(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @escape(ptr, ptr) #0
declare i64 @write(i32, ptr, i64)
; Function Attrs: nounwind
declare void @log_emit(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
@@ -291,7 +356,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.1) %jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.21)
%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
@@ -307,7 +372,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.2, ptr @str.3) %jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.22, ptr @str.23)
%8 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 28 %8 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 28
%jni.NewObject = load ptr, ptr %8, align 8 %jni.NewObject = load ptr, ptr %8, align 8
%jni.new.obj = call ptr %jni.NewObject(ptr %load, ptr %jni.ctor.cls, ptr %jni.ctor.mid, ptr %loadN) %jni.new.obj = call ptr %jni.NewObject(ptr %load, ptr %jni.ctor.cls, ptr %jni.ctor.mid, ptr %loadN)

View File

@@ -21,7 +21,7 @@
// the Metal backend takes — caller branches on OS). // the Metal backend takes — caller branches on OS).
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/opengl.sx"; #import "modules/opengl.sx";
#import "modules/gpu/types.sx"; #import "modules/gpu/types.sx";

View File

@@ -7,7 +7,7 @@
// non-iOS targets don't reach the Metal-touching code paths. // non-iOS targets don't reach the Metal-touching code paths.
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/std/objc.sx"; #import "modules/std/objc.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/gpu/types.sx"; #import "modules/gpu/types.sx";

View File

@@ -1,7 +1,7 @@
#import "../std.sx"; #import "../std.sx";
#import "../compiler.sx"; #import "../compiler.sx";
#import "../fs.sx"; #import "../std/fs.sx";
#import "../process.sx"; #import "../std/process.sx";
// ===================================================================== // =====================================================================
// platform.bundle — sx-side Apple `.app` bundler. // platform.bundle — sx-side Apple `.app` bundler.
@@ -269,7 +269,7 @@ build_info_plist :: (opts: BuildOptions, exe_name: string, bundle_id: string) ->
<string>{}</string> <string>{}</string>
</dict> </dict>
</plist> </plist>
PLIST, xml_escape(bundle_id), xml_escape(exe_name), xml_escape(exe_name), IOS_MIN_OS, platform_key); PLIST, xml.escape(bundle_id), xml.escape(exe_name), xml.escape(exe_name), IOS_MIN_OS, platform_key);
} }
// macOS (and any non-iOS Apple target) — the minimal plist both // macOS (and any non-iOS Apple target) — the minimal plist both
@@ -293,7 +293,7 @@ PLIST, xml_escape(bundle_id), xml_escape(exe_name), xml_escape(exe_name), IOS_MI
<string>0.1</string> <string>0.1</string>
</dict> </dict>
</plist> </plist>
PLIST, xml_escape(bundle_id), xml_escape(exe_name), xml_escape(exe_name)) PLIST, xml.escape(bundle_id), xml.escape(exe_name), xml.escape(exe_name))
} }
// Read a `.mobileprovision` and write it to // Read a `.mobileprovision` and write it to
@@ -868,15 +868,15 @@ lib_name_from_so_basename :: (basename: string) -> string {
// Otherwise it falls back to the legacy NativeActivity shape with an // Otherwise it falls back to the legacy NativeActivity shape with an
// `android.app.lib_name` meta-data entry pointing at the .so. // `android.app.lib_name` meta-data entry pointing at the .so.
build_android_manifest :: (opts: BuildOptions, package: string, lib_name: string) -> string { build_android_manifest :: (opts: BuildOptions, package: string, lib_name: string) -> string {
pkg_esc := xml_escape(package); pkg_esc := xml.escape(package);
lib_esc := xml_escape(lib_name); lib_esc := xml.escape(lib_name);
if opts.jni_main_count() > 0 { if opts.jni_main_count() > 0 {
// First `#jni_main` decl drives the Activity. The foreign_path // First `#jni_main` decl drives the Activity. The foreign_path
// uses `/` separators; Java fully-qualified class names use // uses `/` separators; Java fully-qualified class names use
// `.` so we rewrite. // `.` so we rewrite.
foreign := opts.jni_main_foreign_path_at(0); foreign := opts.jni_main_foreign_path_at(0);
cls := slash_to_dot(foreign); cls := slash_to_dot(foreign);
cls_esc := xml_escape(cls); cls_esc := xml.escape(cls);
return format(#string MANIFEST return format(#string MANIFEST
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"

View File

@@ -1,5 +1,5 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/allocators.sx"; #import "modules/std/mem.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
#import "modules/opengl.sx"; #import "modules/opengl.sx";
#import "modules/sdl3.sx"; #import "modules/sdl3.sx";

View File

@@ -36,7 +36,14 @@ Source_Location :: struct {
} }
string :: []u8 #builtin; string :: []u8 #builtin;
#import "allocators.sx"; #import "std/mem.sx";
// --- Allocator protocol (impls live in std/mem.sx) ---
Allocator :: protocol #inline {
alloc :: (size: s64) -> *void;
dealloc :: (ptr: *void);
}
// --- Context --- // --- Context ---
@@ -215,37 +222,6 @@ substr :: (s: string, start: s64, len: s64) -> string {
buf buf
} }
// Replace XML special characters with their entity references. Used
// when emitting Info.plist / AndroidManifest content from sx values
// that may contain user-supplied text (bundle id, app name, etc).
xml_escape :: (s: string) -> string {
result := "";
i := 0;
seg_start := 0;
while i < s.len {
c := s[i];
// 38='&', 60='<', 62='>', 34='"', 39='\''
ent := "";
if c == 38 { ent = "&amp;"; }
if c == 60 { ent = "&lt;"; }
if c == 62 { ent = "&gt;"; }
if c == 34 { ent = "&quot;"; }
if c == 39 { ent = "&apos;"; }
if ent.len > 0 {
if i > seg_start {
result = concat(result, substr(s, seg_start, i - seg_start));
}
result = concat(result, ent);
seg_start = i + 1;
}
i += 1;
}
if seg_start < s.len {
result = concat(result, substr(s, seg_start, s.len - seg_start));
}
result
}
// Join path components with the POSIX separator ('/'). Skips empty // Join path components with the POSIX separator ('/'). Skips empty
// components and collapses duplicate separators at component // components and collapses duplicate separators at component
// boundaries. Used for bundle paths where Apple .app and Android APK // boundaries. Used for bundle paths where Apple .app and Android APK
@@ -513,4 +489,13 @@ List :: struct ($T: Type) {
list.len = 0; list.len = 0;
list.cap = 0; list.cap = 0;
} }
} }
// --- The stdlib namespace tail: flat-importing std.sx carries these ---
mem :: #import "std/mem.sx";
xml :: #import "std/xml.sx";
log :: #import "std/log.sx";
// fs/process/socket/json/cli/hash/test join the tail once the global
// last-wins maps are fully own-wins (their decls collide across programs
// when pulled into every closure) — import them directly meanwhile:
// #import "modules/std/fs.sx"; etc.

View File

@@ -31,7 +31,7 @@
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/compiler.sx"; #import "modules/compiler.sx";
proc :: #import "modules/process.sx"; proc :: #import "modules/std/process.sx";
libc :: #library "c"; libc :: #library "c";
@@ -54,7 +54,7 @@ ns_get_argc :: () -> *s32 #foreign libc "_NSGetArgc";
// value), `EX_UNAVAILABLE` when the platform is unsupported. // value), `EX_UNAVAILABLE` when the platform is unsupported.
// 2. TERMINATORS. `exit_ok()` / `exit_usage()` end the process with the // 2. TERMINATORS. `exit_ok()` / `exit_usage()` end the process with the
// matching code. They route through the canonical // matching code. They route through the canonical
// `process.exit(code: u8)` (modules/process.sx) — there is NO second // `process.exit(code: u8)` (modules/std/process.sx) — there is NO second
// hand-rolled `_exit` binding in this module; the unsupported-platform // hand-rolled `_exit` binding in this module; the unsupported-platform
// path below goes through `proc.exit(EX_UNAVAILABLE)` too. // path below goes through `proc.exit(EX_UNAVAILABLE)` too.
// //
@@ -62,7 +62,7 @@ ns_get_argc :: () -> *s32 #foreign libc "_NSGetArgc";
// `parsed.json` (true iff `--json` appears in the argv — see `Parsed.json`). // `parsed.json` (true iff `--json` appears in the argv — see `Parsed.json`).
// The convention a front-end follows: in json mode stdout carries ONLY the // The convention a front-end follows: in json mode stdout carries ONLY the
// machine result, and human diagnostics go to stderr (e.g. via // machine result, and human diagnostics go to stderr (e.g. via
// `modules/log.sx`'s `log.err`). Detect json mode by reading `parsed.json`. // `modules/std/log.sx`'s `log.err`). Detect json mode by reading `parsed.json`.
// ===================================================================== // =====================================================================
EX_OK :u8: 0; // success EX_OK :u8: 0; // success

View File

@@ -1,4 +1,4 @@
#import "std.sx"; #import "modules/std.sx";
// ===================================================================== // =====================================================================
// fs.sx — file system stdlib (POSIX backend, macOS values). // fs.sx — file system stdlib (POSIX backend, macOS values).

View File

@@ -31,7 +31,7 @@
// ===================================================================== // =====================================================================
#import "modules/std.sx"; #import "modules/std.sx";
#import "modules/fs.sx"; #import "modules/std/fs.sx";
// Low 32 bits. SHA-256 is defined over 32-bit words; every add/rotate // Low 32 bits. SHA-256 is defined over 32-bit words; every add/rotate
// result is masked back through this so the carry never escapes bit 31. // result is masked back through this so the carry never escapes bit 31.

Some files were not shown because too many files have changed in this diff Show More