From a021362cdb440dcf44ce664ecd585c06dbea587c Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Fri, 28 Aug 2026 01:05:36 +0300 Subject: [PATCH] Phase 7c: string operators + and ==/!= (retire streq/sconcat) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Strings are values now: `a + b` concatenates and `a == b` / `a != b` compare by content, replacing the 605 `sconcat(...)` / `streq(...)` calls that made the compiler read like C. streq(name, "let") -> name == "let" sconcat("load ", reg) -> "load " + reg sconcat(a, sconcat(b, c)) -> a + b + c Implementation: emit_bin gains a string path. Strings are pointer-typed, so any `+` with a pointer operand concatenates and `==`/`!=` between pointers compares content — except when one side is the `null` literal, which stays a pointer identity test (the only two kinds of pointer `==` in the codebase). Both call a small hand-written IR prelude, @fn_str_eq / @fn_str_concat, emitted once into any program that uses string ops (so it works for tools, games and the compiler with no runtime-splice dependency and no duplicate symbols). Delivered as two reseeds: (A) add the operators + prelude with the full pointer-aware dispatch, keeping streq/sconcat; (B) migrate every call site (354 lines, via a string-literal-safe balanced-paren script that leaves the function definitions alone) and delete streq/sconcat. examples/strings.ludic + a test.sh smoke (prints 1 2 3 4 5) guard it. Reseeded (21890 lines); C-free fixpoint holds; goldens byte-identical; 18/18; vocab + doc-fences clean. Co-Authored-By: Claude Opus 4.8 --- LANGUAGE.md | 7 +- examples/strings.ludic | 21 + selfhost/emit_addr.ludic | 4 +- selfhost/emit_core.ludic | 59 +- selfhost/emit_decl.ludic | 8 +- selfhost/emit_ecs.ludic | 16 +- selfhost/emit_expr.ludic | 148 +- selfhost/emit_game.ludic | 12 +- selfhost/emit_head.ludic | 51 +- selfhost/emit_intrin.ludic | 96 +- selfhost/emit_intrin2.ludic | 72 +- selfhost/emit_machine.ludic | 8 +- selfhost/emit_math.ludic | 26 +- selfhost/emit_new.ludic | 36 +- selfhost/emit_query.ludic | 32 +- selfhost/emit_save.ludic | 10 +- selfhost/emit_spawn.ludic | 10 +- selfhost/emit_stmt.ludic | 38 +- selfhost/emit_ui.ludic | 34 +- selfhost/ludicc.seed.ll | 5986 ++++++++++++++++++----------------- selfhost/main.ludic | 36 +- selfhost/parse.ludic | 66 +- selfhost/parse_game.ludic | 8 +- selfhost/str.ludic | 12 - test.sh | 5 + 25 files changed, 3553 insertions(+), 3248 deletions(-) create mode 100644 examples/strings.ludic diff --git a/LANGUAGE.md b/LANGUAGE.md index 2fbfd1b3..7b7b58d7 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -579,7 +579,12 @@ The bitwise operators bind **tighter than comparison** (Go-style), so Operators are built-in only (no overloading). The boolean operators are spelled **`and` / `or` / `not`**; `&&` and `||` are not Ludic operators, and a bare `!` is rejected with a diagnostic naming the fix (`!=` is unaffected). Bitwise operators -are **`& | ^ << >> ~`** (`>>` is a logical/unsigned shift). `expr with { field: … }` +are **`& | ^ << >> ~`** (`>>` is a logical/unsigned shift). + +**Strings are values.** `a + b` concatenates two strings, and `a == b` / `a != b` +compare them **by content** (not by pointer). `"go" + dir == "goleft"` works as +written. (Under the hood these call a small emitted string runtime; a `==`/`!=` +against `null` is still a pointer test.) `expr with { field: … }` is not implemented; records appear only in `spawn`. Char literals (`'w'`) are `int` code points; colors are hex ints (`0xff8800`). `null` is the null-pointer literal; test any pointer/record/slice with `x == null` / `x != null` (an unset diff --git a/examples/strings.ludic b/examples/strings.ludic new file mode 100644 index 00000000..c879531c --- /dev/null +++ b/examples/strings.ludic @@ -0,0 +1,21 @@ +# strings.ludic — strings are values: compare with ==/!=, join with +. +# Running it prints: 1 2 3 4 5 +program Strings { + entry { + let greeting = "hello" + if greeting == "hello" { print_int(1) } # content comparison + if greeting != "world" { print_int(2) } + + let who = "Ludic" + let msg = greeting + ", " + who + "!" # concatenation chains + if msg == "hello, Ludic!" { print_int(3) } + + # build up a string in a loop + var line = "" + var i = 0 + while i < 3 { line = line + "ab"; i = i + 1 } + if line == "ababab" { print_int(4) } + + if (greeting + who) != greeting { print_int(5) } + } +} diff --git a/selfhost/emit_addr.ludic b/selfhost/emit_addr.ludic index a9116146..09676839 100644 --- a/selfhost/emit_addr.ludic +++ b/selfhost/emit_addr.ludic @@ -8,9 +8,9 @@ var g_addr_ty: ptr # out-param: the type at the computed address fn emit_member_addr(e: Node) -> ptr { let base = emit_expr(e.a) let s = layout_node(base.ty) - if (s == null) { perr(sconcat("member access on non-aggregate ", base.ty)) } + if (s == null) { perr((("member access on non-aggregate ") + base.ty)) } let fidx = field_index(s, e.s) - if fidx < 0 { perr(sconcat("no such field ", e.s)) } + if fidx < 0 { perr(("no such field " + e.s)) } g_addr_ty = field_type(s, e.s) let r = nreg() emit(" "); emit(r); emit(" = getelementptr inbounds "); emit(layout_ty(base.ty)) diff --git a/selfhost/emit_core.ludic b/selfhost/emit_core.ludic index 3229569e..5f25e4ec 100644 --- a/selfhost/emit_core.ludic +++ b/selfhost/emit_core.ludic @@ -18,6 +18,7 @@ var loc_reg: []ptr var loc_ty: []ptr var loc_mut: []int # 1 = mutable (var / param / loop-var), 0 = immutable (let) var nloc: int = 0 +var g_uses_str: bool = false # a `str + str` / `str == str` was emitted -> emit the prelude # loop targets for break/continue (innermost last) var brk_lbl: []ptr @@ -37,30 +38,20 @@ fn emith(s: ptr) -> void { buf_puts(head, s) } # stack slots MUST live in the entry block (an alloca in a loop walks the stack # off its end), so they go into a per-function buffer spliced in at entry. fn emit_alloca(llt: ptr) -> ptr { - let r = sconcat("%t", itoa(ll_t)); ll_t = ll_t + 1 + let r = (("%t") + itoa(ll_t)); ll_t = ll_t + 1 buf_puts(falloc, " "); buf_puts(falloc, r); buf_puts(falloc, " = alloca "); buf_puts(falloc, llt); buf_puts(falloc, "\n") return r } # "%t" fresh register -fn sconcat(a: ptr, b: ptr) -> ptr { - let la = slen(a); let lb = slen(b) - let out = mem_alloc(la + lb + 1) - var i = 0 - while i < la { poke8(out, i, peek8(a, i)); i = i + 1 } - var j = 0 - while j < lb { poke8(out, la + j, peek8(b, j)); j = j + 1 } - poke8(out, la + lb, 0) - return out -} -fn nreg() -> ptr { let r = sconcat("%t", itoa(ll_t)); ll_t = ll_t + 1; return r } -fn lbl(pfx: ptr) -> ptr { let r = sconcat(pfx, itoa(ll_lbl)); ll_lbl = ll_lbl + 1; return r } +fn nreg() -> ptr { let r = (("%t") + itoa(ll_t)); ll_t = ll_t + 1; return r } +fn lbl(pfx: ptr) -> ptr { let r = (pfx + itoa(ll_lbl)); ll_lbl = ll_lbl + 1; return r } # Ludic type -> LLVM type. int/bool are i32; everything else (ptr/str/struct/ # slice) is a pointer; void is void. fn llty(t: ptr) -> ptr { - if streq(t, "int") or streq(t, "bool") or streq(t, "fixed") { return "i32" } - if streq(t, "void") { return "void" } + if (t == "int") or (t == "bool") or (t == "fixed") { return "i32" } + if (t == "void") { return "void" } return "ptr" } @@ -69,27 +60,27 @@ fn slice_elem(t: ptr) -> ptr { return substr(t, 2, slen(t) - 2) } fn find_arch(name: ptr) -> Node { var i = 0 - while i < len(prog) { let d = prog[i]; if d.kind == N_ARCH and streq(d.s, name) { return d }; i = i + 1 } + while i < len(prog) { let d = prog[i]; if d.kind == N_ARCH and (d.s == name) { return d }; i = i + 1 } return null } fn find_comp(name: ptr) -> Node { var i = 0 - while i < len(prog) { let d = prog[i]; if d.kind == N_COMP and streq(d.s, name) { return d }; i = i + 1 } + while i < len(prog) { let d = prog[i]; if d.kind == N_COMP and (d.s == name) { return d }; i = i + 1 } return null } # every record is a `property` with a %Cmp_ layout of named fields — whether it # is stored per-entity by the ECS or heap-allocated by `new` is a matter of use. fn layout_node(name: ptr) -> Node { return find_comp(name) } -fn layout_ty(name: ptr) -> ptr { return sconcat("%Cmp_", name) } +fn layout_ty(name: ptr) -> ptr { return (("%Cmp_") + name) } fn field_index(s: Node, fname: ptr) -> int { var i = 0 - while i < len(s.kids) { if streq(s.kids[i].s, fname) { return i }; i = i + 1 } + while i < len(s.kids) { if (s.kids[i].s == fname) { return i }; i = i + 1 } return 0 - 1 } fn field_type(s: Node, fname: ptr) -> ptr { var i = 0 - while i < len(s.kids) { if streq(s.kids[i].s, fname) { return s.kids[i].ty }; i = i + 1 } + while i < len(s.kids) { if (s.kids[i].s == fname) { return s.kids[i].ty }; i = i + 1 } return "int" } @@ -98,8 +89,8 @@ fn find_global(name: ptr) -> Node { var i = 0 while i < len(prog) { let d = prog[i] - if d.kind == N_VAR and streq(d.s, name) { return d } - if d.kind == N_CONST and streq(d.s, name) { return d } + if d.kind == N_VAR and (d.s == name) { return d } + if d.kind == N_CONST and (d.s == name) { return d } i = i + 1 } return null @@ -111,9 +102,9 @@ fn enum_ordinal(ename: ptr, vname: ptr) -> int { var i = 0 while i < len(prog) { let d = prog[i] - if d.kind == N_ENUM and streq(d.s, ename) { + if d.kind == N_ENUM and (d.s == ename) { var j = 0 - while j < len(d.kids) { if streq(d.kids[j].s, vname) { return j }; j = j + 1 } + while j < len(d.kids) { if (d.kids[j].s == vname) { return j }; j = j + 1 } } i = i + 1 } @@ -121,7 +112,7 @@ fn enum_ordinal(ename: ptr, vname: ptr) -> int { } fn find_fn(name: ptr) -> Node { var i = 0 - while i < len(prog) { let d = prog[i]; if d.kind == N_FN and streq(d.s, name) { return d }; i = i + 1 } + while i < len(prog) { let d = prog[i]; if d.kind == N_FN and (d.s == name) { return d }; i = i + 1 } return null } @@ -131,14 +122,14 @@ fn find_fn(name: ptr) -> Node { var g_computed: []Node # each: s = "Prop.field", ty = result type, a = expr fn register_computed(prop: ptr, field: ptr, ty: ptr, e: Node) -> void { - let cf = node(N_FIELD); cf.s = sconcat(prop, sconcat(".", field)); cf.ty = ty; cf.a = e + let cf = node(N_FIELD); cf.s = (prop + ("." + field)); cf.ty = ty; cf.a = e push(g_computed, cf) } fn computed_expr(prop: ptr, field: ptr) -> Node { if (prop == null) { return null } - let key = sconcat(prop, sconcat(".", field)) + let key = (prop + ("." + field)) var i = 0 - while i < len(g_computed) { if streq(g_computed[i].s, key) { return g_computed[i].a }; i = i + 1 } + while i < len(g_computed) { if (g_computed[i].s == key) { return g_computed[i].a }; i = i + 1 } return null } # best-effort static type of an expression (for computed-field lookup; emits nothing) @@ -157,7 +148,7 @@ fn register_onspawn(model: ptr, body: Node) -> void { } fn onspawn_body(model: ptr) -> Node { var i = 0 - while i < len(g_onspawn) { if streq(g_onspawn[i].s, model) { return g_onspawn[i].a }; i = i + 1 } + while i < len(g_onspawn) { if (g_onspawn[i].s == model) { return g_onspawn[i].a }; i = i + 1 } return null } @@ -172,7 +163,7 @@ fn register_ondespawn(model: ptr, body: Node) -> void { } fn ondespawn_body(model: ptr) -> Node { var i = 0 - while i < len(g_ondespawn) { if streq(g_ondespawn[i].s, model) { return g_ondespawn[i].a }; i = i + 1 } + while i < len(g_ondespawn) { if (g_ondespawn[i].s == model) { return g_ondespawn[i].a }; i = i + 1 } return null } fn register_onattach(prop: ptr, body: Node) -> void { @@ -180,7 +171,7 @@ fn register_onattach(prop: ptr, body: Node) -> void { } fn onattach_body(prop: ptr) -> Node { var i = 0 - while i < len(g_onattach) { if streq(g_onattach[i].s, prop) { return g_onattach[i].a }; i = i + 1 } + while i < len(g_onattach) { if (g_onattach[i].s == prop) { return g_onattach[i].a }; i = i + 1 } return null } @@ -192,12 +183,12 @@ fn register_onenable(prop: ptr, body: Node) -> void { let n = node(N_BLOCK); n.s fn register_ondisable(prop: ptr, body: Node) -> void { let n = node(N_BLOCK); n.s = prop; n.a = body; push(g_ondisable, n) } fn onenable_body(prop: ptr) -> Node { var i = 0 - while i < len(g_onenable) { if streq(g_onenable[i].s, prop) { return g_onenable[i].a }; i = i + 1 } + while i < len(g_onenable) { if (g_onenable[i].s == prop) { return g_onenable[i].a }; i = i + 1 } return null } fn ondisable_body(prop: ptr) -> Node { var i = 0 - while i < len(g_ondisable) { if streq(g_ondisable[i].s, prop) { return g_ondisable[i].a }; i = i + 1 } + while i < len(g_ondisable) { if (g_ondisable[i].s == prop) { return g_ondisable[i].a }; i = i + 1 } return null } @@ -217,6 +208,6 @@ fn loc_push(name: ptr, r: ptr, ty: ptr) -> void { fn loc_set_mut(m: int) -> void { if nloc > 0 { loc_mut[nloc - 1] = m } } fn loc_find(name: ptr) -> int { var i = nloc - 1 - while i >= 0 { if streq(loc_name[i], name) { return i }; i = i - 1 } + while i >= 0 { if (loc_name[i] == name) { return i }; i = i - 1 } return 0 - 1 } diff --git a/selfhost/emit_decl.ludic b/selfhost/emit_decl.ludic index 799bbd5e..d922ab17 100644 --- a/selfhost/emit_decl.ludic +++ b/selfhost/emit_decl.ludic @@ -19,7 +19,7 @@ fn emit_fn(d: Node) -> void { let saved = code code = fbody let rl = llty(ret_ty) - if not streq(rl, "void") { buf_puts(falloc, " %retval = alloca "); buf_puts(falloc, rl); buf_puts(falloc, "\n") } + if not (rl == "void") { buf_puts(falloc, " %retval = alloca "); buf_puts(falloc, rl); buf_puts(falloc, "\n") } # params: store each incoming argument into a stack slot var i = 0 while i < len(d.kids) { @@ -32,8 +32,8 @@ fn emit_fn(d: Node) -> void { emit_block(d.a) if not g_term { emit(" br label %ret\n") } emit("ret:\n") - if streq(rl, "void") { emit(" ret void\n") } - else { let r = emit_bind(sconcat("load ", sconcat(rl, ", ptr %retval"))); emit(" ret "); emit(rl); emit(" "); emit(r); emit("\n") } + if (rl == "void") { emit(" ret void\n") } + else { let r = emit_bind(("load " + (rl + (", ptr %retval")))); emit(" ret "); emit(rl); emit(" "); emit(r); emit("\n") } code = saved emit("define "); emit(rl); emit(" @fn_"); emit(d.s); emit("("); emit_params_sig(d); emit(") {\nentry:\n") emit(buf_str(falloc)) @@ -67,6 +67,7 @@ fn emit_main(d: Node) -> void { fn emit_program() -> void { head = buf_new() code = buf_new() + g_uses_str = false loc_name = new []ptr; loc_reg = new []ptr; loc_ty = new []ptr; loc_mut = new []int brk_lbl = new []ptr; cnt_lbl = new []ptr self_stk = new []ptr @@ -82,6 +83,7 @@ fn emit_program() -> void { i = 0 while i < len(prog) { if prog[i].kind == N_MAIN { emit_main(prog[i]) }; i = i + 1 } } + if g_uses_str { emit_str_prelude() } # @fn_str_eq / @fn_str_concat, after all uses are seen } # Flush the emitted IR. With a null path it goes to stdout (the pipe the shell diff --git a/selfhost/emit_ecs.ludic b/selfhost/emit_ecs.ludic index 52768841..fd943ab7 100644 --- a/selfhost/emit_ecs.ludic +++ b/selfhost/emit_ecs.ludic @@ -27,9 +27,9 @@ fn emit_ecs_storage() -> void { emith("@L_key = internal global i32 0\n") emith("@L_entc = internal global i32 0\n") let me = itoa(MAX_ENT) - emith(sconcat("@L_alive = internal global [", sconcat(me, " x i32] zeroinitializer\n"))) - emith(sconcat("@L_kind = internal global [", sconcat(me, " x i32] zeroinitializer\n"))) - emith(sconcat("@L_freelist = internal global [", sconcat(me, " x i32] zeroinitializer\n"))) + emith(("@L_alive = internal global [" + (me + " x i32] zeroinitializer\n"))) + emith(("@L_kind = internal global [" + (me + " x i32] zeroinitializer\n"))) + emith(("@L_freelist = internal global [" + (me + " x i32] zeroinitializer\n"))) emith("@L_freen = internal global i32 0\n") var i = 0 while i < len(prog) { @@ -38,12 +38,12 @@ fn emit_ecs_storage() -> void { # header). Every property in an ECS program is a component today; a property # used only via `new` would not need these, but no such program mixes the two. if c.kind == N_COMP { - emith(sconcat("@S_", sconcat(c.s, sconcat(" = internal global [", sconcat(me, sconcat(" x %Cmp_", sconcat(c.s, "] zeroinitializer\n"))))))) - emith(sconcat("@H_", sconcat(c.s, sconcat(" = internal global [", sconcat(me, " x i8] zeroinitializer\n"))))) + emith(("@S_" + (c.s + (" = internal global [" + (me + ((" x %Cmp_") + (c.s + "] zeroinitializer\n"))))))) + emith(("@H_" + (c.s + (" = internal global [" + (me + " x i8] zeroinitializer\n"))))) } # one enabled-flag global per model and per handler (default enabled) - if c.kind == N_ARCH { emith(sconcat("@ME_", sconcat(c.s, " = internal global i32 1\n"))) } - if c.kind == N_SYS { emith(sconcat("@HE_", sconcat(c.s, " = internal global i32 1\n"))) } + if c.kind == N_ARCH { emith(("@ME_" + (c.s + " = internal global i32 1\n"))) } + if c.kind == N_SYS { emith(("@HE_" + (c.s + " = internal global i32 1\n"))) } i = i + 1 } } @@ -55,7 +55,7 @@ fn emit_ecs_allocator() -> void { var i = 0 while i < len(prog) { if prog[i].kind == N_COMP { - let hn = sconcat("%h", itoa(i)) + let hn = (("%h") + itoa(i)) emit(" "); emit(hn); emit(" = getelementptr inbounds ["); emit(me); emit(" x i8], ptr @H_"); emit(prog[i].s); emit(", i32 0, i32 %e\n") emit(" store i8 0, ptr "); emit(hn); emit("\n") } diff --git a/selfhost/emit_expr.ludic b/selfhost/emit_expr.ludic index d91dcc94..d1a4da1e 100644 --- a/selfhost/emit_expr.ludic +++ b/selfhost/emit_expr.ludic @@ -1,7 +1,7 @@ # emit_expr.ludic — lower an expression to IR, returning its register and type. fn emit_load_at(addr: ptr, ty: ptr) -> Val { - let r = emit_bind(sconcat("load ", sconcat(llty(ty), sconcat(", ptr ", addr)))) + let r = emit_bind(("load " + (llty(ty) + (", ptr " + addr)))) return val(r, ty) } @@ -10,100 +10,124 @@ fn emit_load_at(addr: ptr, ty: ptr) -> Val { fn emit_logic(e: Node) -> Val { let slot = emit_alloca("i32") let la = emit_expr(e.a) - let lc = emit_bind(sconcat("icmp ne i32 ", sconcat(la.code, ", 0"))) - let lz = emit_bind(sconcat("zext i1 ", sconcat(lc, " to i32"))) + let lc = emit_bind(("icmp ne i32 " + (la.code + ", 0"))) + let lz = emit_bind(("zext i1 " + (lc + " to i32"))) emit(" store i32 "); emit(lz); emit(", ptr "); emit(slot); emit("\n") let ev = lbl("sc"); let done = lbl("scend") - if streq(e.s, "and") { emit(" br i1 "); emit(lc); emit(", label %"); emit(ev); emit(", label %"); emit(done); emit("\n") } + if (e.s == "and") { emit(" br i1 "); emit(lc); emit(", label %"); emit(ev); emit(", label %"); emit(done); emit("\n") } else { emit(" br i1 "); emit(lc); emit(", label %"); emit(done); emit(", label %"); emit(ev); emit("\n") } emit(ev); emit(":\n") let rb = emit_expr(e.b) - let rc = emit_bind(sconcat("icmp ne i32 ", sconcat(rb.code, ", 0"))) - let rz = emit_bind(sconcat("zext i1 ", sconcat(rc, " to i32"))) + let rc = emit_bind(("icmp ne i32 " + (rb.code + ", 0"))) + let rz = emit_bind(("zext i1 " + (rc + " to i32"))) emit(" store i32 "); emit(rz); emit(", ptr "); emit(slot); emit("\n") emit(" br label %"); emit(done); emit("\n") emit(done); emit(":\n") - return val(emit_bind(sconcat("load i32, ptr ", slot)), "bool") + return val(emit_bind(("load i32, ptr " + slot)), "bool") } fn cmp_code(op: ptr) -> ptr { - if streq(op, "<") { return "slt" } - if streq(op, "<=") { return "sle" } - if streq(op, ">") { return "sgt" } - if streq(op, ">=") { return "sge" } - if streq(op, "==") { return "eq" } + if (op == ("<")) { return "slt" } + if (op == ("<=")) { return "sle" } + if (op == (">")) { return "sgt" } + if (op == (">=")) { return "sge" } + if (op == ("==")) { return "eq" } return "ne" } fn is_cmp(op: ptr) -> bool { - return streq(op,"<") or streq(op,"<=") or streq(op,">") or streq(op,">=") or streq(op,"==") or streq(op,"!=") + return (op == ("<")) or (op == ("<=")) or (op == (">")) or (op == (">=")) or (op == ("==")) or (op == ("!=")) } fn arith_code(op: ptr) -> ptr { - if streq(op, "+") { return "add" } - if streq(op, "-") { return "sub" } - if streq(op, "*") { return "mul" } - if streq(op, "/") { return "sdiv" } - if streq(op, "&") { return "and" } - if streq(op, "|") { return "or" } - if streq(op, "^") { return "xor" } - if streq(op, "<<") { return "shl" } - if streq(op, ">>") { return "lshr" } # logical shift (unsigned) + if (op == ("+")) { return "add" } + if (op == ("-")) { return "sub" } + if (op == ("*")) { return "mul" } + if (op == ("/")) { return "sdiv" } + if (op == ("&")) { return "and" } + if (op == ("|")) { return "or" } + if (op == ("^")) { return "xor" } + if (op == ("<<")) { return "shl" } + if (op == (">>")) { return "lshr" } # logical shift (unsigned) return "srem" } # widen an int value to Q16.16 by shifting left 16 (a fixed value passes through) fn to_fixed(v: Val) -> ptr { - if streq(v.ty, "fixed") { return v.code } - return emit_bind(sconcat("shl i32 ", sconcat(v.code, ", 16"))) + if (v.ty == "fixed") { return v.code } + return emit_bind(("shl i32 " + (v.code + ", 16"))) +} + +# string operators: `a + b` concatenates, `a == b` / `a != b` compare by content. +# Both call the @fn_str_* prelude (emitted once per program that uses them). +fn emit_str_op(op: ptr, a: Val, b: Val) -> Val { + g_uses_str = true + if (op == ("+")) { + return val(emit_bind(("call ptr @fn_str_concat(ptr " + (a.code + (", ptr " + (b.code + ")"))))), "str") + } + let r = emit_bind(("call i32 @fn_str_eq(ptr " + (a.code + (", ptr " + (b.code + ")"))))) + if (op == ("!=")) { + let c = emit_bind(("icmp eq i32 " + (r + ", 0"))) + return val(emit_bind(("zext i1 " + (c + " to i32"))), "bool") + } + return val(r, "bool") } fn emit_bin(e: Node) -> Val { - if streq(e.s, "and") or streq(e.s, "or") { return emit_logic(e) } + if (e.s == "and") or (e.s == "or") { return emit_logic(e) } let a = emit_expr(e.a) let b = emit_expr(e.b) - let fx = streq(a.ty, "fixed") or streq(b.ty, "fixed") + # strings are pointer-typed, so any `+` with a pointer operand is concatenation, + # and `==`/`!=` between pointers is content comparison — except `x == null`, + # which is a pointer-identity test and falls through to the icmp below. + let ptrish = (llty(a.ty) == "ptr") or (llty(b.ty) == "ptr") + let isnull = e.a.kind == E_NULL or e.b.kind == E_NULL + if ptrish { + if (e.s == ("+")) { return emit_str_op("+", a, b) } + if ((e.s == ("==")) or (e.s == ("!="))) and not isnull { return emit_str_op(e.s, a, b) } + } + let fx = (a.ty == "fixed") or (b.ty == "fixed") if is_cmp(e.s) { var ac = a.code; var bc = b.code var ct = "i32" if fx { ac = to_fixed(a); bc = to_fixed(b) } - else { if streq(llty(a.ty), "ptr") or streq(llty(b.ty), "ptr") { ct = "ptr" } } # `p == null`, str/record identity - let c = emit_bind(sconcat("icmp ", sconcat(cmp_code(e.s), sconcat(sconcat(" ", sconcat(ct, " ")), sconcat(ac, sconcat(", ", bc)))))) - return val(emit_bind(sconcat("zext i1 ", sconcat(c, " to i32"))), "bool") + else { if (llty(a.ty) == "ptr") or (llty(b.ty) == "ptr") { ct = "ptr" } } # `p == null`, str/record identity + let c = emit_bind(("icmp " + (cmp_code(e.s) + ((" " + (ct + " ")) + (ac + (", " + bc)))))) + return val(emit_bind(("zext i1 " + (c + " to i32"))), "bool") } if fx { let af = to_fixed(a); let bf = to_fixed(b) - if streq(e.s, "*") { - let a64 = emit_bind(sconcat("sext i32 ", sconcat(af, " to i64"))) - let b64 = emit_bind(sconcat("sext i32 ", sconcat(bf, " to i64"))) - let m = emit_bind(sconcat("mul i64 ", sconcat(a64, sconcat(", ", b64)))) - let sh = emit_bind(sconcat("ashr i64 ", sconcat(m, ", 16"))) - return val(emit_bind(sconcat("trunc i64 ", sconcat(sh, " to i32"))), "fixed") + if (e.s == ("*")) { + let a64 = emit_bind(("sext i32 " + (af + " to i64"))) + let b64 = emit_bind(("sext i32 " + (bf + " to i64"))) + let m = emit_bind(("mul i64 " + (a64 + (", " + b64)))) + let sh = emit_bind(("ashr i64 " + (m + ", 16"))) + return val(emit_bind(("trunc i64 " + (sh + " to i32"))), "fixed") } - if streq(e.s, "/") { - let a64 = emit_bind(sconcat("sext i32 ", sconcat(af, " to i64"))) - let ash = emit_bind(sconcat("shl i64 ", sconcat(a64, ", 16"))) - let b64 = emit_bind(sconcat("sext i32 ", sconcat(bf, " to i64"))) - let dv = emit_bind(sconcat("sdiv i64 ", sconcat(ash, sconcat(", ", b64)))) - return val(emit_bind(sconcat("trunc i64 ", sconcat(dv, " to i32"))), "fixed") + if (e.s == ("/")) { + let a64 = emit_bind(("sext i32 " + (af + " to i64"))) + let ash = emit_bind(("shl i64 " + (a64 + ", 16"))) + let b64 = emit_bind(("sext i32 " + (bf + " to i64"))) + let dv = emit_bind(("sdiv i64 " + (ash + (", " + b64)))) + return val(emit_bind(("trunc i64 " + (dv + " to i32"))), "fixed") } - let r = emit_bind(sconcat(arith_code(e.s), sconcat(" i32 ", sconcat(af, sconcat(", ", bf))))) + let r = emit_bind((arith_code(e.s) + (" i32 " + (af + (", " + bf))))) return val(r, "fixed") } - let r = emit_bind(sconcat(arith_code(e.s), sconcat(" i32 ", sconcat(a.code, sconcat(", ", b.code))))) + let r = emit_bind((arith_code(e.s) + (" i32 " + (a.code + (", " + b.code))))) return val(r, "int") } fn emit_call(e: Node) -> Val { let name = e.a.s - if streq(name, "self") { if nself == 0 { return val("0", "entity") }; return val(emit_bind(sconcat("load i32, ptr ", self_stk[nself - 1])), "entity") } - if streq(name, "key") { return val(emit_bind("load i32, ptr @L_key"), "int") } - if streq(name, "save") { emit(" call void @L_save()\n"); return val("0", "void") } - if streq(name, "ui_build") { emit(" call void @ui_build()\n"); return val("0", "void") } - if streq(name, "load") { return val(emit_bind("call i32 @L_load()"), "bool") } - if streq(name, "quit") { emit(" store i32 0, ptr @L_running\n"); return val("0", "void") } - if streq(name, "len") { return emit_len(e) } - if streq(name, "push") { return emit_push(e) } - if streq(name, "fx") { let a = emit_expr(e.kids[0]); return val(emit_bind(sconcat("shl i32 ", sconcat(a.code, ", 16"))), "fixed") } - if streq(name, "flr") { let a = emit_expr(e.kids[0]); return val(emit_bind(sconcat("ashr i32 ", sconcat(a.code, ", 16"))), "int") } + if (name == "self") { if nself == 0 { return val("0", "entity") }; return val(emit_bind(("load i32, ptr " + self_stk[nself - 1])), "entity") } + if (name == "key") { return val(emit_bind("load i32, ptr @L_key"), "int") } + if (name == "save") { emit(" call void @L_save()\n"); return val("0", "void") } + if (name == "ui_build") { emit(" call void @ui_build()\n"); return val("0", "void") } + if (name == "load") { return val(emit_bind("call i32 @L_load()"), "bool") } + if (name == "quit") { emit(" store i32 0, ptr @L_running\n"); return val("0", "void") } + if (name == "len") { return emit_len(e) } + if (name == "push") { return emit_push(e) } + if (name == "fx") { let a = emit_expr(e.kids[0]); return val(emit_bind(("shl i32 " + (a.code + ", 16"))), "fixed") } + if (name == "flr") { let a = emit_expr(e.kids[0]); return val(emit_bind(("ashr i32 " + (a.code + ", 16"))), "int") } if is_intrinsic(name) { return emit_intrinsic(name, e) } if is_intrinsic2(name) { return emit_intrinsic2(name, e) } if is_math_builtin(name) { return emit_math_builtin(name, e) } @@ -111,9 +135,9 @@ fn emit_call(e: Node) -> Val { var cname = name if (fn2 == null) { # a builtin like clear()/reg() is satisfied by its rt_ function - let rtname = sconcat("rt_", name) + let rtname = ("rt_" + name) fn2 = find_fn(rtname) - if (fn2 == null) { perr(sconcat("unknown function ", name)) } + if (fn2 == null) { perr(("unknown function " + name)) } cname = rtname } # evaluate args first (their IR is emitted before the call instruction) @@ -124,7 +148,7 @@ fn emit_call(e: Node) -> Val { let rl = llty(fn2.ty) emit(" ") var rreg = "0" - if not streq(rl, "void") { rreg = nreg(); emit(rreg); emit(" = ") } + if not (rl == "void") { rreg = nreg(); emit(rreg); emit(" = ") } emit("call "); emit(rl); emit(" @fn_"); emit(cname); emit("(") i = 0 while i < len(args) { @@ -153,12 +177,12 @@ fn emit_expr(e: Node) -> Val { let g = find_global(e.s) if (g != null) { if g.kind == N_CONST { return val(itoa(g.a.ival), "int") } - let r = emit_bind(sconcat("load ", sconcat(llty(g.ty), sconcat(", ptr @g_", e.s)))) + let r = emit_bind(("load " + (llty(g.ty) + (", ptr @g_" + e.s)))) return val(r, g.ty) } # a UI_ that is not a const/var resolves to its widget index if is_ui_ident(e.s) { return val(itoa(ui_index_of(e.s)), "int") } - perr(sconcat("unknown identifier ", e.s)) + perr(("unknown identifier " + e.s)) } if e.kind == E_MEMBER { if e.a.kind == E_ID { # `Enum.Variant` -> its ordinal, a compile-time int @@ -177,10 +201,10 @@ fn emit_expr(e: Node) -> Val { if e.kind == E_BIN { return emit_bin(e) } if e.kind == E_UN { let a = emit_expr(e.a) - if streq(e.s, "-") { return val(emit_bind(sconcat("sub i32 0, ", a.code)), "int") } - if streq(e.s, "~") { return val(emit_bind(sconcat("xor i32 ", sconcat(a.code, ", -1"))), "int") } - let c = emit_bind(sconcat("icmp eq i32 ", sconcat(a.code, ", 0"))) - return val(emit_bind(sconcat("zext i1 ", sconcat(c, " to i32"))), "bool") + if (e.s == ("-")) { return val(emit_bind(("sub i32 0, " + a.code)), "int") } + if (e.s == "~") { return val(emit_bind(("xor i32 " + (a.code + (", -1")))), "int") } + let c = emit_bind(("icmp eq i32 " + (a.code + ", 0"))) + return val(emit_bind(("zext i1 " + (c + " to i32"))), "bool") } perr("cannot emit expression") return val("0", "int") diff --git a/selfhost/emit_game.ludic b/selfhost/emit_game.ludic index 126180a8..1113df6d 100644 --- a/selfhost/emit_game.ludic +++ b/selfhost/emit_game.ludic @@ -24,9 +24,9 @@ fn emit_calls_for_phase(phase: ptr) -> void { var i = 0 while i < len(prog) { let d = prog[i] - if d.kind == N_SYS and streq(d.ty, phase) { # skip a disabled handler - let he = emit_bind(sconcat("load i32, ptr @HE_", d.s)) - let hc = emit_bind(sconcat("icmp ne i32 ", sconcat(he, ", 0"))) + if d.kind == N_SYS and (d.ty == phase) { # skip a disabled handler + let he = emit_bind(("load i32, ptr @HE_" + d.s)) + let hc = emit_bind(("icmp ne i32 " + (he + ", 0"))) let run = lbl("hrun"); let skip = lbl("hskip") emit(" br i1 "); emit(hc); emit(", label %"); emit(run); emit(", label %"); emit(skip); emit("\n") emit(run); emit(":\n call void @sys_"); emit(d.s); emit("()\n") @@ -76,11 +76,11 @@ fn emit_game_main() -> void { emit(" br label %loop\n") emit("loop:\n") let r = emit_bind("load i32, ptr @L_running") - let rc = emit_bind(sconcat("icmp ne i32 ", sconcat(r, ", 0"))) + let rc = emit_bind(("icmp ne i32 " + (r + ", 0"))) if (find_fn("rt_running") != null) { let pr = emit_bind("call i32 @fn_rt_running()") - let pc = emit_bind(sconcat("icmp ne i32 ", sconcat(pr, ", 0"))) - let go = emit_bind(sconcat("and i1 ", sconcat(rc, sconcat(", ", pc)))) + let pc = emit_bind(("icmp ne i32 " + (pr + ", 0"))) + let go = emit_bind(("and i1 " + (rc + (", " + pc)))) emit(" br i1 "); emit(go); emit(", label %body, label %done\n") } else { emit(" br i1 "); emit(rc); emit(", label %body, label %done\n") diff --git a/selfhost/emit_head.ludic b/selfhost/emit_head.ludic index 58fe958b..a48bad32 100644 --- a/selfhost/emit_head.ludic +++ b/selfhost/emit_head.ludic @@ -5,7 +5,7 @@ fn hexdig(n: int) -> int { if n < 10 { return 48 + n }; return 55 + n } # 0-9 # emit `@.strN = ... c"escaped\00"` and return its name; % and non-print -> \XX fn emit_str_const(s: ptr) -> ptr { - let name = sconcat("@.str", itoa(ll_str)) + let name = ("@.str" + itoa(ll_str)) ll_str = ll_str + 1 let n = slen(s) emith(name); emith(" = private unnamed_addr constant [") @@ -34,11 +34,11 @@ fn emit_gep_i8(base: ptr, idx: ptr) -> ptr { # the constant initializer for a global var: a literal, or 0/null fn global_init(d: Node) -> ptr { - if (d.a == null) { if streq(llty(d.ty), "ptr") { return "null" }; return "0" } + if (d.a == null) { if (llty(d.ty) == "ptr") { return "null" }; return "0" } let e = d.a if e.kind == E_INT or e.kind == E_FLOAT or e.kind == E_BOOL { return itoa(e.ival) } - if e.kind == E_UN and streq(e.s, "-") and e.a.kind == E_INT { return sconcat("-", itoa(e.a.ival)) } - if streq(llty(d.ty), "ptr") { return "null" } + if e.kind == E_UN and (e.s == ("-")) and e.a.kind == E_INT { return (("-") + itoa(e.a.ival)) } + if (llty(d.ty) == "ptr") { return "null" } return "0" } @@ -108,3 +108,46 @@ fn emit_header() -> void { i = i + 1 } } + +# The string runtime, emitted (once) into any program that uses `+`/`==`/`!=` +# on strings. Hand-written IR over NUL-terminated byte buffers: str_eq walks both +# until a mismatch or a shared terminator; str_concat measures both, mallocs +# len+len+1, copies each half, and NUL-terminates. @malloc is always declared. +fn emit_str_prelude() -> void { + emith("define i32 @fn_str_eq(ptr %a, ptr %b) {\n") + emith("entry:\n br label %loop\n") + emith("loop:\n %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\n") + emith(" %pa = getelementptr inbounds i8, ptr %a, i32 %i\n") + emith(" %pb = getelementptr inbounds i8, ptr %b, i32 %i\n") + emith(" %ca = load i8, ptr %pa\n %cb = load i8, ptr %pb\n") + emith(" %df = icmp ne i8 %ca, %cb\n br i1 %df, label %ret0, label %chk\n") + emith("chk:\n %zt = icmp eq i8 %ca, 0\n br i1 %zt, label %ret1, label %cont\n") + emith("cont:\n %i1 = add i32 %i, 1\n br label %loop\n") + emith("ret1:\n ret i32 1\nret0:\n ret i32 0\n}\n") + + emith("define ptr @fn_str_concat(ptr %a, ptr %b) {\n") + emith("entry:\n br label %al\n") + emith("al:\n %ia = phi i32 [ 0, %entry ], [ %ia1, %alb ]\n") + emith(" %pa = getelementptr inbounds i8, ptr %a, i32 %ia\n %cca = load i8, ptr %pa\n") + emith(" %za = icmp eq i8 %cca, 0\n br i1 %za, label %bl0, label %alb\n") + emith("alb:\n %ia1 = add i32 %ia, 1\n br label %al\n") + emith("bl0:\n br label %bl\n") + emith("bl:\n %ib = phi i32 [ 0, %bl0 ], [ %ib1, %blb ]\n") + emith(" %pb = getelementptr inbounds i8, ptr %b, i32 %ib\n %ccb = load i8, ptr %pb\n") + emith(" %zb = icmp eq i8 %ccb, 0\n br i1 %zb, label %alloc, label %blb\n") + emith("blb:\n %ib1 = add i32 %ib, 1\n br label %bl\n") + emith("alloc:\n %sum = add i32 %ia, %ib\n %sz = add i32 %sum, 1\n") + emith(" %sz64 = sext i32 %sz to i64\n %out = call ptr @malloc(i64 %sz64)\n br label %c1\n") + emith("c1:\n %i = phi i32 [ 0, %alloc ], [ %i1, %c1b ]\n") + emith(" %d1 = icmp slt i32 %i, %ia\n br i1 %d1, label %c1b, label %c2i\n") + emith("c1b:\n %s1 = getelementptr inbounds i8, ptr %a, i32 %i\n %v1 = load i8, ptr %s1\n") + emith(" %o1 = getelementptr inbounds i8, ptr %out, i32 %i\n store i8 %v1, ptr %o1\n") + emith(" %i1 = add i32 %i, 1\n br label %c1\n") + emith("c2i:\n br label %c2\n") + emith("c2:\n %j = phi i32 [ 0, %c2i ], [ %j1, %c2b ]\n") + emith(" %d2 = icmp slt i32 %j, %ib\n br i1 %d2, label %c2b, label %fin\n") + emith("c2b:\n %s2 = getelementptr inbounds i8, ptr %b, i32 %j\n %v2 = load i8, ptr %s2\n") + emith(" %oj = add i32 %ia, %j\n %o2 = getelementptr inbounds i8, ptr %out, i32 %oj\n store i8 %v2, ptr %o2\n") + emith(" %j1 = add i32 %j, 1\n br label %c2\n") + emith("fin:\n %pe = getelementptr inbounds i8, ptr %out, i32 %sum\n store i8 0, ptr %pe\n ret ptr %out\n}\n") +} diff --git a/selfhost/emit_intrin.ludic b/selfhost/emit_intrin.ludic index 10032082..dcc24b41 100644 --- a/selfhost/emit_intrin.ludic +++ b/selfhost/emit_intrin.ludic @@ -7,14 +7,14 @@ var g_intrin_ok: bool = false # is `name` a low-level intrinsic? A pure name check, so it can gate dispatch # without evaluating arguments (which could clobber shared state). fn is_intrinsic(name: ptr) -> bool { - if streq(name,"mem_alloc") or streq(name,"mem_realloc") { return true } - if streq(name,"peek8") or streq(name,"poke8") { return true } - if streq(name,"file_open") or streq(name,"file_read") or streq(name,"file_write") { return true } - if streq(name,"file_seek") or streq(name,"file_tell") or streq(name,"file_close") { return true } - if streq(name,"print_str") or streq(name,"print_int") { return true } - if streq(name,"os_argc") or streq(name,"os_arg") or streq(name,"os_exit") or streq(name,"file_stderr") { return true } - if streq(name,"os_system") or streq(name,"os_getenv") { return true } - if streq(name,"peek32") or streq(name,"poke32") { return true } + if (name == "mem_alloc") or (name == "mem_realloc") { return true } + if (name == "peek8") or (name == "poke8") { return true } + if (name == "file_open") or (name == "file_read") or (name == "file_write") { return true } + if (name == "file_seek") or (name == "file_tell") or (name == "file_close") { return true } + if (name == "print_str") or (name == "print_int") { return true } + if (name == "os_argc") or (name == "os_arg") or (name == "os_exit") or (name == "file_stderr") { return true } + if (name == "os_system") or (name == "os_getenv") { return true } + if (name == "peek32") or (name == "poke32") { return true } return false } # emit " = \n" and return r @@ -25,97 +25,97 @@ fn arg_code(e: Node, i: int) -> ptr { let v = emit_expr(e.kids[i]); return v.co fn emit_intrinsic(name: ptr, e: Node) -> Val { g_intrin_ok = true # ptr_null / ptr_is_null are the `null` literal and `x == null` now. - if streq(name, "mem_alloc") { + if (name == "mem_alloc") { let n = arg_code(e, 0) - let w = emit_bind(sconcat("zext i32 ", sconcat(n, " to i64"))) - return val(emit_bind(sconcat("call ptr @malloc(i64 ", sconcat(w, ")"))), "ptr") + let w = emit_bind(("zext i32 " + (n + " to i64"))) + return val(emit_bind(("call ptr @malloc(i64 " + (w + ")"))), "ptr") } - if streq(name, "mem_realloc") { + if (name == "mem_realloc") { let p = arg_code(e, 0); let n = arg_code(e, 1) - let w = emit_bind(sconcat("zext i32 ", sconcat(n, " to i64"))) - return val(emit_bind(sconcat("call ptr @realloc(ptr ", sconcat(p, sconcat(", i64 ", sconcat(w, ")"))))), "ptr") + let w = emit_bind(("zext i32 " + (n + " to i64"))) + return val(emit_bind(("call ptr @realloc(ptr " + (p + (", i64 " + (w + ")"))))), "ptr") } - if streq(name, "peek8") { + if (name == "peek8") { let p = arg_code(e, 0); let i = arg_code(e, 1) let a = emit_gep_i8(p, i) - let b = emit_bind(sconcat("load i8, ptr ", a)) - return val(emit_bind(sconcat("zext i8 ", sconcat(b, " to i32"))), "int") + let b = emit_bind(("load i8, ptr " + a)) + return val(emit_bind(("zext i8 " + (b + " to i32"))), "int") } - if streq(name, "poke8") { + if (name == "poke8") { let p = arg_code(e, 0); let i = arg_code(e, 1); let v = arg_code(e, 2) let a = emit_gep_i8(p, i) - let t = emit_bind(sconcat("trunc i32 ", sconcat(v, " to i8"))) + let t = emit_bind(("trunc i32 " + (v + " to i8"))) emit(" store i8 "); emit(t); emit(", ptr "); emit(a); emit("\n") return val("0", "void") } - if streq(name, "file_open") { + if (name == "file_open") { let p = arg_code(e, 0); let m = arg_code(e, 1) - return val(emit_bind(sconcat("call ptr @fopen(ptr ", sconcat(p, sconcat(", ptr ", sconcat(m, ")"))))), "ptr") + return val(emit_bind(("call ptr @fopen(ptr " + (p + (", ptr " + (m + ")"))))), "ptr") } - if streq(name, "file_read") or streq(name, "file_write") { + if (name == "file_read") or (name == "file_write") { let f = arg_code(e, 0); let b = arg_code(e, 1); let n = arg_code(e, 2) - let w = emit_bind(sconcat("zext i32 ", sconcat(n, " to i64"))) + let w = emit_bind(("zext i32 " + (n + " to i64"))) var fn2 = "@fread" - if streq(name, "file_write") { fn2 = "@fwrite" } - let r = emit_bind(sconcat("call i64 ", sconcat(fn2, sconcat("(ptr ", sconcat(b, sconcat(", i64 1, i64 ", sconcat(w, sconcat(", ptr ", sconcat(f, ")"))))))))) - return val(emit_bind(sconcat("trunc i64 ", sconcat(r, " to i32"))), "int") + if (name == "file_write") { fn2 = "@fwrite" } + let r = emit_bind(("call i64 " + (fn2 + ("(ptr " + (b + (", i64 1, i64 " + (w + (", ptr " + (f + ")"))))))))) + return val(emit_bind(("trunc i64 " + (r + " to i32"))), "int") } - if streq(name, "file_seek") { + if (name == "file_seek") { let f = arg_code(e, 0); let off = arg_code(e, 1); let wh = arg_code(e, 2) - let o = emit_bind(sconcat("sext i32 ", sconcat(off, " to i64"))) - return val(emit_bind(sconcat("call i32 @fseek(ptr ", sconcat(f, sconcat(", i64 ", sconcat(o, sconcat(", i32 ", sconcat(wh, ")"))))))), "int") + let o = emit_bind(("sext i32 " + (off + " to i64"))) + return val(emit_bind(("call i32 @fseek(ptr " + (f + (", i64 " + (o + (", i32 " + (wh + ")"))))))), "int") } - if streq(name, "file_tell") { + if (name == "file_tell") { let f = arg_code(e, 0) - let r = emit_bind(sconcat("call i64 @ftell(ptr ", sconcat(f, ")"))) - return val(emit_bind(sconcat("trunc i64 ", sconcat(r, " to i32"))), "int") + let r = emit_bind(("call i64 @ftell(ptr " + (f + ")"))) + return val(emit_bind(("trunc i64 " + (r + " to i32"))), "int") } - if streq(name, "file_close") { + if (name == "file_close") { let f = arg_code(e, 0) emit(" call i32 @fclose(ptr "); emit(f); emit(")\n") return val("0", "void") } - if streq(name, "print_str") { + if (name == "print_str") { let s = arg_code(e, 0) emit(" call i32 (ptr, ...) @printf(ptr @.fmt_str, ptr "); emit(s); emit(")\n") return val("0", "void") } - if streq(name, "print_int") { + if (name == "print_int") { let n = arg_code(e, 0) emit(" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 "); emit(n); emit(")\n") return val("0", "void") } - if streq(name, "os_argc") { return val(emit_bind("load i32, ptr @L_argc"), "int") } - if streq(name, "os_arg") { + if (name == "os_argc") { return val(emit_bind("load i32, ptr @L_argc"), "int") } + if (name == "os_arg") { let i = arg_code(e, 0) let v = emit_bind("load ptr, ptr @L_argv") - let q = emit_bind(sconcat("getelementptr ptr, ptr ", sconcat(v, sconcat(", i32 ", i)))) - return val(emit_bind(sconcat("load ptr, ptr ", q)), "str") + let q = emit_bind(("getelementptr ptr, ptr " + (v + (", i32 " + i)))) + return val(emit_bind(("load ptr, ptr " + q)), "str") } - if streq(name, "os_exit") { + if (name == "os_exit") { let n = arg_code(e, 0) emit(" call void @exit(i32 "); emit(n); emit(")\n") emit(" unreachable\n") g_term = true return val("0", "void") } - if streq(name, "file_stderr") { return val(emit_bind("load ptr, ptr @__stderrp"), "ptr") } - if streq(name, "os_system") { + if (name == "file_stderr") { return val(emit_bind("load ptr, ptr @__stderrp"), "ptr") } + if (name == "os_system") { let c = arg_code(e, 0) - return val(emit_bind(sconcat("call i32 @system(ptr ", sconcat(c, ")"))), "int") + return val(emit_bind(("call i32 @system(ptr " + (c + ")"))), "int") } - if streq(name, "os_getenv") { + if (name == "os_getenv") { let n = arg_code(e, 0) - return val(emit_bind(sconcat("call ptr @getenv(ptr ", sconcat(n, ")"))), "str") + return val(emit_bind(("call ptr @getenv(ptr " + (n + ")"))), "str") } # bitwise ops are the operators & | ^ << >> ~ now (see emit_bin / p_mul). - if streq(name, "peek32") { + if (name == "peek32") { let p = arg_code(e, 0); let i = arg_code(e, 1) let g = nreg() emit(" "); emit(g); emit(" = getelementptr inbounds i32, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") - return val(emit_bind(sconcat("load i32, ptr ", g)), "int") + return val(emit_bind(("load i32, ptr " + g)), "int") } - if streq(name, "poke32") { + if (name == "poke32") { let p = arg_code(e, 0); let i = arg_code(e, 1); let v = arg_code(e, 2) let g = nreg() emit(" "); emit(g); emit(" = getelementptr inbounds i32, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") diff --git a/selfhost/emit_intrin2.ludic b/selfhost/emit_intrin2.ludic index ddfa0e2c..c4a20b08 100644 --- a/selfhost/emit_intrin2.ludic +++ b/selfhost/emit_intrin2.ludic @@ -5,91 +5,91 @@ var g_windowed: bool = false # headless by default (games read stdin / dump PPM) fn is_intrinsic2(name: ptr) -> bool { - if streq(name,"mem_free") or streq(name,"mem_copy") or streq(name,"mem_set") { return true } - if streq(name,"ptr_add") or streq(name,"read_byte") or streq(name,"write_byte") { return true } - if streq(name,"str_len") or streq(name,"os_time") { return true } - if streq(name,"peekf") or streq(name,"pokef") or streq(name,"as_fixed") or streq(name,"as_int") { return true } - if streq(name,"peekp") or streq(name,"pokep") { return true } - if streq(name,"is_windowed") or streq(name,"game_title") { return true } - if streq(name,"win_open") or streq(name,"win_poll") or streq(name,"win_present") { return true } - if streq(name,"win_running") or streq(name,"win_close") { return true } + if (name == "mem_free") or (name == "mem_copy") or (name == "mem_set") { return true } + if (name == "ptr_add") or (name == "read_byte") or (name == "write_byte") { return true } + if (name == "str_len") or (name == "os_time") { return true } + if (name == "peekf") or (name == "pokef") or (name == "as_fixed") or (name == "as_int") { return true } + if (name == "peekp") or (name == "pokep") { return true } + if (name == "is_windowed") or (name == "game_title") { return true } + if (name == "win_open") or (name == "win_poll") or (name == "win_present") { return true } + if (name == "win_running") or (name == "win_close") { return true } return false } fn emit_intrinsic2(name: ptr, e: Node) -> Val { - if streq(name, "mem_free") { + if (name == "mem_free") { let p = arg_code(e, 0); emit(" call void @free(ptr "); emit(p); emit(")\n"); return val("0", "void") } - if streq(name, "mem_copy") { + if (name == "mem_copy") { let d = arg_code(e, 0); let s = arg_code(e, 1); let n = arg_code(e, 2) - let w = emit_bind(sconcat("zext i32 ", sconcat(n, " to i64"))) + let w = emit_bind(("zext i32 " + (n + " to i64"))) emit(" call ptr @memcpy(ptr "); emit(d); emit(", ptr "); emit(s); emit(", i64 "); emit(w); emit(")\n") return val("0", "void") } - if streq(name, "mem_set") { + if (name == "mem_set") { let p = arg_code(e, 0); let v = arg_code(e, 1); let n = arg_code(e, 2) - let w = emit_bind(sconcat("zext i32 ", sconcat(n, " to i64"))) + let w = emit_bind(("zext i32 " + (n + " to i64"))) emit(" call ptr @memset(ptr "); emit(p); emit(", i32 "); emit(v); emit(", i64 "); emit(w); emit(")\n") return val("0", "void") } - if streq(name, "ptr_add") { + if (name == "ptr_add") { let p = arg_code(e, 0); let n = arg_code(e, 1) let g = nreg() emit(" "); emit(g); emit(" = getelementptr inbounds i8, ptr "); emit(p); emit(", i32 "); emit(n); emit("\n") return val(g, "ptr") } - if streq(name, "read_byte") { return val(emit_bind("call i32 @getchar()"), "int") } - if streq(name, "write_byte") { + if (name == "read_byte") { return val(emit_bind("call i32 @getchar()"), "int") } + if (name == "write_byte") { let v = arg_code(e, 0); emit(" call i32 @putchar(i32 "); emit(v); emit(")\n"); return val("0", "void") } - if streq(name, "str_len") { + if (name == "str_len") { let s = arg_code(e, 0) - let r = emit_bind(sconcat("call i64 @strlen(ptr ", sconcat(s, ")"))) - return val(emit_bind(sconcat("trunc i64 ", sconcat(r, " to i32"))), "int") + let r = emit_bind(("call i64 @strlen(ptr " + (s + ")"))) + return val(emit_bind(("trunc i64 " + (r + " to i32"))), "int") } - if streq(name, "os_time") { + if (name == "os_time") { let r = emit_bind("call i64 @time(ptr null)") - return val(emit_bind(sconcat("trunc i64 ", sconcat(r, " to i32"))), "int") + return val(emit_bind(("trunc i64 " + (r + " to i32"))), "int") } - if streq(name, "peekf") { + if (name == "peekf") { let p = arg_code(e, 0); let i = arg_code(e, 1) let g = nreg(); emit(" "); emit(g); emit(" = getelementptr inbounds i32, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") - return val(emit_bind(sconcat("load i32, ptr ", g)), "fixed") + return val(emit_bind(("load i32, ptr " + g)), "fixed") } - if streq(name, "pokef") { + if (name == "pokef") { let p = arg_code(e, 0); let i = arg_code(e, 1); let v = arg_code(e, 2) let g = nreg(); emit(" "); emit(g); emit(" = getelementptr inbounds i32, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") emit(" store i32 "); emit(v); emit(", ptr "); emit(g); emit("\n") return val("0", "void") } - if streq(name, "peekp") { + if (name == "peekp") { let p = arg_code(e, 0); let i = arg_code(e, 1) let g = nreg(); emit(" "); emit(g); emit(" = getelementptr inbounds ptr, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") - return val(emit_bind(sconcat("load ptr, ptr ", g)), "ptr") + return val(emit_bind(("load ptr, ptr " + g)), "ptr") } - if streq(name, "pokep") { + if (name == "pokep") { let p = arg_code(e, 0); let i = arg_code(e, 1); let v = arg_code(e, 2) let g = nreg(); emit(" "); emit(g); emit(" = getelementptr inbounds ptr, ptr "); emit(p); emit(", i32 "); emit(i); emit("\n") emit(" store ptr "); emit(v); emit(", ptr "); emit(g); emit("\n") return val("0", "void") } - if streq(name, "as_fixed") { let a = emit_expr(e.kids[0]); return val(a.code, "fixed") } - if streq(name, "as_int") { let a = emit_expr(e.kids[0]); return val(a.code, "int") } - if streq(name, "is_windowed") { if g_windowed { return val("1", "bool") }; return val("0", "bool") } - if streq(name, "game_title") { return val("@.gametitle", "str") } + if (name == "as_fixed") { let a = emit_expr(e.kids[0]); return val(a.code, "fixed") } + if (name == "as_int") { let a = emit_expr(e.kids[0]); return val(a.code, "int") } + if (name == "is_windowed") { if g_windowed { return val("1", "bool") }; return val("0", "bool") } + if (name == "game_title") { return val("@.gametitle", "str") } # windowing hooks — declared external; only reached on the is_windowed() branch - if streq(name, "win_poll") { return val(emit_bind("call i32 @win_poll()"), "int") } - if streq(name, "win_running") { return val(emit_bind("call i32 @win_running()"), "bool") } - if streq(name, "win_open") { + if (name == "win_poll") { return val(emit_bind("call i32 @win_poll()"), "int") } + if (name == "win_running") { return val(emit_bind("call i32 @win_running()"), "bool") } + if (name == "win_open") { let a = arg_code(e, 0); let b = arg_code(e, 1); let c = arg_code(e, 2); let d = arg_code(e, 3) emit(" call void @win_open(i32 "); emit(a); emit(", i32 "); emit(b); emit(", i32 "); emit(c); emit(", ptr "); emit(d); emit(")\n") return val("0", "void") } - if streq(name, "win_present") { + if (name == "win_present") { let a = arg_code(e, 0); let b = arg_code(e, 1); let c = arg_code(e, 2) emit(" call void @win_present(ptr "); emit(a); emit(", i32 "); emit(b); emit(", i32 "); emit(c); emit(")\n") return val("0", "void") } - if streq(name, "win_close") { emit(" call void @win_close()\n"); return val("0", "void") } + if (name == "win_close") { emit(" call void @win_close()\n"); return val("0", "void") } return val("0", "void") } diff --git a/selfhost/emit_machine.ludic b/selfhost/emit_machine.ludic index 14646766..674129d6 100644 --- a/selfhost/emit_machine.ludic +++ b/selfhost/emit_machine.ludic @@ -4,7 +4,7 @@ fn emit_machine(st: Node) -> void { let regv = emit_expr(st.a) - let s = emit_bind(sconcat("call i32 @fn_rt_reg(i32 ", sconcat(regv.code, ")"))) + let s = emit_bind(("call i32 @fn_rt_reg(i32 " + (regv.code + ")"))) if nmach < len(mach_stk) { mach_stk[nmach] = st } else { push(mach_stk, st) } nmach = nmach + 1 let endl = lbl("smend") @@ -12,7 +12,7 @@ fn emit_machine(st: Node) -> void { while i < len(st.kids) { let state = st.kids[i] let v = emit_expr(state.b) - let c = emit_bind(sconcat("icmp eq i32 ", sconcat(s, sconcat(", ", v.code)))) + let c = emit_bind(("icmp eq i32 " + (s + (", " + v.code)))) let body = lbl("sbody"); let nxt = lbl("sarm") emit(" br i1 "); emit(c); emit(", label %"); emit(body); emit(", label %"); emit(nxt); emit("\n") emit(body); emit(":\n"); g_term = false @@ -31,8 +31,8 @@ fn emit_become(st: Node) -> void { let m = mach_stk[nmach - 1] var target: Node = null var i = 0 - while i < len(m.kids) { if streq(m.kids[i].s, st.s) { target = m.kids[i] }; i = i + 1 } - if (target == null) { perr(sconcat("become: no state ", st.s)) } + while i < len(m.kids) { if (m.kids[i].s == st.s) { target = m.kids[i] }; i = i + 1 } + if (target == null) { perr(("become: no state " + st.s)) } let regv = emit_expr(m.a) let sv = emit_expr(target.b) emit(" call void @fn_rt_set_reg(i32 "); emit(regv.code); emit(", i32 "); emit(sv.code); emit(")\n") diff --git a/selfhost/emit_math.ludic b/selfhost/emit_math.ludic index 44b24dbe..f3e10acd 100644 --- a/selfhost/emit_math.ludic +++ b/selfhost/emit_math.ludic @@ -3,27 +3,27 @@ # (clear, fill_rect, reg, ...) is resolved to its rt_ function by emit_call. fn is_math_builtin(name: ptr) -> bool { - return streq(name,"min") or streq(name,"max") or streq(name,"abs") or streq(name,"clamp") + return (name == "min") or (name == "max") or (name == "abs") or (name == "clamp") } fn emit_math_builtin(name: ptr, e: Node) -> Val { - if streq(name, "abs") { + if (name == "abs") { let a = emit_expr(e.kids[0]) - let c = emit_bind(sconcat("icmp slt i32 ", sconcat(a.code, ", 0"))) - let n = emit_bind(sconcat("sub i32 0, ", a.code)) - return val(emit_bind(sconcat("select i1 ", sconcat(c, sconcat(", i32 ", sconcat(n, sconcat(", i32 ", a.code)))))), "int") + let c = emit_bind(("icmp slt i32 " + (a.code + ", 0"))) + let n = emit_bind(("sub i32 0, " + a.code)) + return val(emit_bind(("select i1 " + (c + (", i32 " + (n + (", i32 " + a.code)))))), "int") } - if streq(name, "min") or streq(name, "max") { + if (name == "min") or (name == "max") { let a = emit_expr(e.kids[0]); let b = emit_expr(e.kids[1]) var op = "slt" - if streq(name, "max") { op = "sgt" } - let c = emit_bind(sconcat("icmp ", sconcat(op, sconcat(" i32 ", sconcat(a.code, sconcat(", ", b.code)))))) - return val(emit_bind(sconcat("select i1 ", sconcat(c, sconcat(", i32 ", sconcat(a.code, sconcat(", i32 ", b.code)))))), "int") + if (name == "max") { op = "sgt" } + let c = emit_bind(("icmp " + (op + (" i32 " + (a.code + (", " + b.code)))))) + return val(emit_bind(("select i1 " + (c + (", i32 " + (a.code + (", i32 " + b.code)))))), "int") } # clamp(v, lo, hi) = max(lo, min(v, hi)) let v = emit_expr(e.kids[0]); let lo = emit_expr(e.kids[1]); let hi = emit_expr(e.kids[2]) - let c1 = emit_bind(sconcat("icmp slt i32 ", sconcat(v.code, sconcat(", ", hi.code)))) - let t = emit_bind(sconcat("select i1 ", sconcat(c1, sconcat(", i32 ", sconcat(v.code, sconcat(", i32 ", hi.code)))))) - let c2 = emit_bind(sconcat("icmp sgt i32 ", sconcat(lo.code, sconcat(", ", t)))) - return val(emit_bind(sconcat("select i1 ", sconcat(c2, sconcat(", i32 ", sconcat(lo.code, sconcat(", i32 ", t)))))), "int") + let c1 = emit_bind(("icmp slt i32 " + (v.code + (", " + hi.code)))) + let t = emit_bind(("select i1 " + (c1 + (", i32 " + (v.code + (", i32 " + hi.code)))))) + let c2 = emit_bind(("icmp sgt i32 " + (lo.code + (", " + t)))) + return val(emit_bind(("select i1 " + (c2 + (", i32 " + (lo.code + (", i32 " + t)))))), "int") } diff --git a/selfhost/emit_new.ludic b/selfhost/emit_new.ludic index 6ae1b8f5..1df398e4 100644 --- a/selfhost/emit_new.ludic +++ b/selfhost/emit_new.ludic @@ -3,8 +3,8 @@ # holder points at, so growth is visible to every holder. fn emit_sizeof(llt: ptr) -> ptr { - let p = emit_bind(sconcat("getelementptr ", sconcat(llt, ", ptr null, i32 1"))) - return emit_bind(sconcat("ptrtoint ptr ", sconcat(p, " to i64"))) + let p = emit_bind(("getelementptr " + (llt + ", ptr null, i32 1"))) + return emit_bind(("ptrtoint ptr " + (p + " to i64"))) } fn emit_new_struct(name: ptr) -> Val { @@ -12,7 +12,7 @@ fn emit_new_struct(name: ptr) -> Val { if (s == null) { perr("unknown record type in new") } let lty = layout_ty(name) let sz = emit_sizeof(lty) - let obj = emit_bind(sconcat("call ptr @malloc(i64 ", sconcat(sz, ")"))) + let obj = emit_bind(("call ptr @malloc(i64 " + (sz + ")"))) var f = 0 while f < len(s.kids) { let fd = s.kids[f] @@ -21,7 +21,7 @@ fn emit_new_struct(name: ptr) -> Val { emit(", ptr "); emit(obj); emit(", i32 0, i32 "); emit(itoa(f)); emit("\n") let lt = llty(fd.ty) var v = "0" - if streq(lt, "ptr") { v = "null" } + if (lt == "ptr") { v = "null" } if (fd.a != null) { let dv = emit_expr(fd.a); v = dv.code } emit(" store "); emit(lt); emit(" "); emit(v); emit(", ptr "); emit(addr); emit("\n") f = f + 1 @@ -31,7 +31,7 @@ fn emit_new_struct(name: ptr) -> Val { fn emit_new_slice(ty: ptr) -> Val { let sz = emit_sizeof("%LSlice") - let h = emit_bind(sconcat("call ptr @malloc(i64 ", sconcat(sz, ")"))) + let h = emit_bind(("call ptr @malloc(i64 " + (sz + ")"))) let d0 = nreg(); emit(" "); emit(d0); emit(" = getelementptr inbounds %LSlice, ptr "); emit(h); emit(", i32 0, i32 0\n") emit(" store ptr null, ptr "); emit(d0); emit("\n") let d1 = nreg(); emit(" "); emit(d1); emit(" = getelementptr inbounds %LSlice, ptr "); emit(h); emit(", i32 0, i32 1\n") @@ -51,7 +51,7 @@ fn slice_field(h: ptr, i: int) -> ptr { fn emit_len(e: Node) -> Val { let s = emit_expr(e.kids[0]) let lp = slice_field(s.code, 1) - return val(emit_bind(sconcat("load i32, ptr ", lp)), "int") + return val(emit_bind(("load i32, ptr " + lp)), "int") } fn emit_push(e: Node) -> Val { @@ -60,30 +60,30 @@ fn emit_push(e: Node) -> Val { let elt = llty(el) let h = s.code let lp = slice_field(h, 1); let cp = slice_field(h, 2); let dp = slice_field(h, 0) - let l = emit_bind(sconcat("load i32, ptr ", lp)) - let c = emit_bind(sconcat("load i32, ptr ", cp)) - let full = emit_bind(sconcat("icmp sge i32 ", sconcat(l, sconcat(", ", c)))) + let l = emit_bind(("load i32, ptr " + lp)) + let c = emit_bind(("load i32, ptr " + cp)) + let full = emit_bind(("icmp sge i32 " + (l + (", " + c)))) let grow = lbl("grow"); let put = lbl("put") emit(" br i1 "); emit(full); emit(", label %"); emit(grow); emit(", label %"); emit(put); emit("\n") emit(grow); emit(":\n") - let dbl = emit_bind(sconcat("mul i32 ", sconcat(c, ", 2"))) - let isz = emit_bind(sconcat("icmp eq i32 ", sconcat(c, ", 0"))) - let nc = emit_bind(sconcat("select i1 ", sconcat(isz, sconcat(", i32 8, i32 ", dbl)))) + let dbl = emit_bind(("mul i32 " + (c + ", 2"))) + let isz = emit_bind(("icmp eq i32 " + (c + ", 0"))) + let nc = emit_bind(("select i1 " + (isz + (", i32 8, i32 " + dbl)))) let esz = emit_sizeof(elt) - let ncw = emit_bind(sconcat("zext i32 ", sconcat(nc, " to i64"))) - let bytes = emit_bind(sconcat("mul i64 ", sconcat(ncw, sconcat(", ", esz)))) - let old = emit_bind(sconcat("load ptr, ptr ", dp)) - let nd = emit_bind(sconcat("call ptr @realloc(ptr ", sconcat(old, sconcat(", i64 ", sconcat(bytes, ")"))))) + let ncw = emit_bind(("zext i32 " + (nc + " to i64"))) + let bytes = emit_bind(("mul i64 " + (ncw + (", " + esz)))) + let old = emit_bind(("load ptr, ptr " + dp)) + let nd = emit_bind(("call ptr @realloc(ptr " + (old + (", i64 " + (bytes + ")"))))) emit(" store ptr "); emit(nd); emit(", ptr "); emit(dp); emit("\n") emit(" store i32 "); emit(nc); emit(", ptr "); emit(cp); emit("\n") emit(" br label %"); emit(put); emit("\n") emit(put); emit(":\n") let v = emit_expr(e.kids[1]) - let data = emit_bind(sconcat("load ptr, ptr ", dp)) + let data = emit_bind(("load ptr, ptr " + dp)) let slot = nreg() emit(" "); emit(slot); emit(" = getelementptr inbounds "); emit(elt); emit(", ptr "); emit(data); emit(", i32 "); emit(l); emit("\n") emit(" store "); emit(elt); emit(" "); emit(v.code); emit(", ptr "); emit(slot); emit("\n") - let l1 = emit_bind(sconcat("add i32 ", sconcat(l, ", 1"))) + let l1 = emit_bind(("add i32 " + (l + ", 1"))) emit(" store i32 "); emit(l1); emit(", ptr "); emit(lp); emit("\n") return val("0", "void") } diff --git a/selfhost/emit_query.ludic b/selfhost/emit_query.ludic index d78c4f86..39a2dcef 100644 --- a/selfhost/emit_query.ludic +++ b/selfhost/emit_query.ludic @@ -4,7 +4,7 @@ fn find_arch_id(name: ptr) -> int { var i = 0; var n = 1 - while i < len(prog) { if prog[i].kind == N_ARCH { if streq(prog[i].s, name) { return n }; n = n + 1 }; i = i + 1 } + while i < len(prog) { if prog[i].kind == N_ARCH { if (prog[i].s == name) { return n }; n = n + 1 }; i = i + 1 } return 0 } @@ -18,16 +18,16 @@ fn emit_query(st: Node) -> void { let cond = lbl("qcond"); let body = lbl("qbody"); let nxt = lbl("qnext"); let endl = lbl("qend") emit(" br label %"); emit(cond); emit("\n") emit(cond); emit(":\n") - let i0 = emit_bind(sconcat("load i32, ptr ", ip)) + let i0 = emit_bind(("load i32, ptr " + ip)) let ec = emit_bind("load i32, ptr @L_entc") - let lt = emit_bind(sconcat("icmp slt i32 ", sconcat(i0, sconcat(", ", ec)))) + let lt = emit_bind(("icmp slt i32 " + (i0 + (", " + ec)))) emit(" br i1 "); emit(lt); emit(", label %"); emit(body); emit(", label %"); emit(endl); emit("\n") emit(body); emit(":\n"); g_term = false - let i1 = emit_bind(sconcat("load i32, ptr ", ip)) + let i1 = emit_bind(("load i32, ptr " + ip)) # alive? let ap = nreg(); emit(" "); emit(ap); emit(" = getelementptr inbounds ["); emit(me); emit(" x i32], ptr @L_alive, i32 0, i32 "); emit(i1); emit("\n") - let al = emit_bind(sconcat("load i32, ptr ", ap)) - let alc = emit_bind(sconcat("icmp ne i32 ", sconcat(al, ", 0"))) + let al = emit_bind(("load i32, ptr " + ap)) + let alc = emit_bind(("icmp ne i32 " + (al + ", 0"))) let ka = lbl("qa") emit(" br i1 "); emit(alc); emit(", label %"); emit(ka); emit(", label %"); emit(nxt); emit("\n") emit(ka); emit(":\n") @@ -41,15 +41,15 @@ fn emit_query(st: Node) -> void { var ok = "0" if ak > 0 { let kp = nreg(); emit(" "); emit(kp); emit(" = getelementptr inbounds ["); emit(me); emit(" x i32], ptr @L_kind, i32 0, i32 "); emit(i1); emit("\n") - let kv = emit_bind(sconcat("load i32, ptr ", kp)) - let kok = emit_bind(sconcat("icmp eq i32 ", sconcat(kv, sconcat(", ", itoa(ak))))) - let mev = emit_bind(sconcat("load i32, ptr @ME_", tm.s)) # model-enabled flag - let meok = emit_bind(sconcat("icmp ne i32 ", sconcat(mev, ", 0"))) - ok = emit_bind(sconcat("and i1 ", sconcat(kok, sconcat(", ", meok)))) + let kv = emit_bind(("load i32, ptr " + kp)) + let kok = emit_bind(("icmp eq i32 " + (kv + (", " + itoa(ak))))) + let mev = emit_bind(("load i32, ptr @ME_" + tm.s)) # model-enabled flag + let meok = emit_bind(("icmp ne i32 " + (mev + ", 0"))) + ok = emit_bind(("and i1 " + (kok + (", " + meok)))) } else { let hp = nreg(); emit(" "); emit(hp); emit(" = getelementptr inbounds ["); emit(me); emit(" x i8], ptr @H_"); emit(tm.s); emit(", i32 0, i32 "); emit(i1); emit("\n") - let hv = emit_bind(sconcat("load i8, ptr ", hp)) - ok = emit_bind(sconcat("icmp ne i8 ", sconcat(hv, ", 0"))) + let hv = emit_bind(("load i8, ptr " + hp)) + ok = emit_bind(("icmp ne i8 " + (hv + ", 0"))) } let keep = lbl("qt") emit(" br i1 "); emit(ok); emit(", label %"); emit(keep); emit(", label %"); emit(nxt); emit("\n") @@ -79,7 +79,7 @@ fn emit_query(st: Node) -> void { # optional where-clause if (st.b != null) { let w = emit_expr(st.b) - let wc = emit_bind(sconcat("icmp ne i32 ", sconcat(w.code, ", 0"))) + let wc = emit_bind(("icmp ne i32 " + (w.code + ", 0"))) let kw = lbl("qw") emit(" br i1 "); emit(wc); emit(", label %"); emit(kw); emit(", label %"); emit(nxt); emit("\n") emit(kw); emit(":\n") @@ -92,8 +92,8 @@ fn emit_query(st: Node) -> void { if not g_term { emit(" br label %"); emit(nxt); emit("\n") } emit(nxt); emit(":\n") - let i2 = emit_bind(sconcat("load i32, ptr ", ip)) - let i3 = emit_bind(sconcat("add i32 ", sconcat(i2, ", 1"))) + let i2 = emit_bind(("load i32, ptr " + ip)) + let i3 = emit_bind(("add i32 " + (i2 + ", 1"))) store_at("i32", i3, ip) emit(" br label %"); emit(cond); emit("\n") emit(endl); emit(":\n"); g_term = false diff --git a/selfhost/emit_save.ludic b/selfhost/emit_save.ludic index ba8b4bf6..bd00b56e 100644 --- a/selfhost/emit_save.ludic +++ b/selfhost/emit_save.ludic @@ -6,7 +6,7 @@ var g_iok: int = 0 fn emit_io(fn2: ptr, p: ptr, bytes: ptr) -> void { - let r = sconcat("%io", itoa(g_iok)); g_iok = g_iok + 1 + let r = (("%io") + itoa(g_iok)); g_iok = g_iok + 1 emit(" "); emit(r); emit(" = call i64 @"); emit(fn2); emit("(ptr "); emit(p); emit(", i64 1, i64 "); emit(bytes); emit(", ptr %f)\n") } @@ -20,16 +20,16 @@ fn emit_snapshot_blocks(fn2: ptr) -> void { emit_io(fn2, "@L_freelist", "%nalive") emit_io(fn2, "@L_kind", "%nalive") var i = 0 - while i < len(prog) { if prog[i].kind == N_VAR { emit_io(fn2, sconcat("@g_", prog[i].s), "4") }; i = i + 1 } + while i < len(prog) { if prog[i].kind == N_VAR { emit_io(fn2, ("@g_" + prog[i].s), "4") }; i = i + 1 } var ci = 0 i = 0 while i < len(prog) { if prog[i].kind == N_COMP { let c = prog[i].s - let csz = sconcat("%csz", itoa(ci)) + let csz = (("%csz") + itoa(ci)) emit(" "); emit(csz); emit(" = ptrtoint ptr getelementptr (%Cmp_"); emit(c); emit(", ptr null, i32 "); emit(me); emit(") to i64\n") - emit_io(fn2, sconcat("@S_", c), csz) - emit_io(fn2, sconcat("@H_", c), me) + emit_io(fn2, ("@S_" + c), csz) + emit_io(fn2, ("@H_" + c), me) ci = ci + 1 } i = i + 1 diff --git a/selfhost/emit_spawn.ludic b/selfhost/emit_spawn.ludic index e72ab222..c9f1b81d 100644 --- a/selfhost/emit_spawn.ludic +++ b/selfhost/emit_spawn.ludic @@ -4,7 +4,7 @@ fn emit_init_component(e: ptr, comp: ptr, rec: Node) -> void { let me = itoa(MAX_ENT) let c = find_comp(comp) - if (c == null) { perr(sconcat("spawn: unknown property ", comp)) } + if (c == null) { perr(("spawn: unknown property " + comp)) } let hp = nreg(); emit(" "); emit(hp); emit(" = getelementptr inbounds ["); emit(me); emit(" x i8], ptr @H_"); emit(comp); emit(", i32 0, i32 "); emit(e); emit("\n") emit(" store i8 1, ptr "); emit(hp); emit("\n") let slot = nreg() @@ -17,7 +17,7 @@ fn emit_init_component(e: ptr, comp: ptr, rec: Node) -> void { emit(" "); emit(addr); emit(" = getelementptr inbounds %Cmp_"); emit(comp); emit(", ptr "); emit(slot); emit(", i32 0, i32 "); emit(itoa(f)); emit("\n") let lt = llty(fd.ty) var v = "0" - if streq(lt, "ptr") { v = "null" } + if (lt == "ptr") { v = "null" } if (fd.a != null) { let dv = emit_expr(fd.a); v = dv.code } emit(" store "); emit(lt); emit(" "); emit(v); emit(", ptr "); emit(addr); emit("\n") f = f + 1 @@ -78,7 +78,7 @@ fn emit_spawn(st: Node) -> void { let cn = arch.kids[c].s var rec = null var i = 0 - while i < len(st.kids) { if streq(st.kids[i].s, cn) { rec = st.kids[i].a }; i = i + 1 } + while i < len(st.kids) { if (st.kids[i].s == cn) { rec = st.kids[i].a }; i = i + 1 } emit_init_component(e, cn, rec) c = c + 1 } @@ -101,11 +101,11 @@ fn emit_despawn(st: Node) -> void { if len(g_ondespawn) > 0 { let me = itoa(MAX_ENT) let kp = nreg(); emit(" "); emit(kp); emit(" = getelementptr inbounds ["); emit(me); emit(" x i32], ptr @L_kind, i32 0, i32 "); emit(v.code); emit("\n") - let kind = emit_bind(sconcat("load i32, ptr ", kp)) + let kind = emit_bind(("load i32, ptr " + kp)) var i = 0 while i < len(g_ondespawn) { let mname = g_ondespawn[i].s - let c = emit_bind(sconcat("icmp eq i32 ", sconcat(kind, sconcat(", ", itoa(find_arch_id(mname)))))) + let c = emit_bind(("icmp eq i32 " + (kind + (", " + itoa(find_arch_id(mname)))))) let yes = lbl("dh"); let no = lbl("dhn") emit(" br i1 "); emit(c); emit(", label %"); emit(yes); emit(", label %"); emit(no); emit("\n") emit(yes); emit(":\n call void @on_despawn_"); emit(mname); emit("(i32 "); emit(v.code); emit(")\n") diff --git a/selfhost/emit_stmt.ludic b/selfhost/emit_stmt.ludic index 6e57fb9c..f87b2979 100644 --- a/selfhost/emit_stmt.ludic +++ b/selfhost/emit_stmt.ludic @@ -25,13 +25,13 @@ fn emit_assign(st: Node) -> void { if li >= 0 { # a `let` binding is immutable: rebinding it is an error (mutating THROUGH # it — `x.field = …`, `x[i] = …` — is fine, and lands in the branches below). - if loc_mut[li] == 0 { perr(sconcat("cannot assign to immutable '", sconcat(t.s, sconcat("' (declared with let; use var) — line ", itoa(st.line))))) } + if loc_mut[li] == 0 { perr(("cannot assign to immutable '" + (t.s + ("' (declared with let; use var) — line " + itoa(st.line))))) } addr = loc_reg[li]; ty = loc_ty[li] } else { let g = find_global(t.s) - if (g == null) { perr(sconcat("assign to unknown ", t.s)) } - addr = sconcat("@g_", t.s); ty = g.ty + if (g == null) { perr(("assign to unknown " + t.s)) } + addr = ("@g_" + t.s); ty = g.ty } } else { if t.kind == E_MEMBER { addr = emit_member_addr(t); ty = g_addr_ty } @@ -41,20 +41,20 @@ fn emit_assign(st: Node) -> void { let lt = llty(ty) let rv = emit_expr(st.b) var v = rv.code - if not streq(st.s, "=") { - let cur = emit_bind(sconcat("load ", sconcat(lt, sconcat(", ptr ", addr)))) + if not (st.s == "=") { + let cur = emit_bind(("load " + (lt + (", ptr " + addr)))) var opc = "add" - if streq(st.s, "-=") { opc = "sub" } - if streq(st.s, "*=") { opc = "mul" } - if streq(st.s, "/=") { opc = "sdiv" } - v = emit_bind(sconcat(opc, sconcat(" i32 ", sconcat(cur, sconcat(", ", v))))) + if (st.s == ("-=")) { opc = "sub" } + if (st.s == ("*=")) { opc = "mul" } + if (st.s == ("/=")) { opc = "sdiv" } + v = emit_bind((opc + (" i32 " + (cur + (", " + v))))) } store_at(lt, v, addr) } fn emit_if(st: Node) -> void { let c = emit_expr(st.a) - let cc = emit_bind(sconcat("icmp ne i32 ", sconcat(c.code, ", 0"))) + let cc = emit_bind(("icmp ne i32 " + (c.code + ", 0"))) let has_else = (st.c != null) let tl = lbl("then"); let el = lbl("else"); let en = lbl("ifend") if has_else { emit(" br i1 "); emit(cc); emit(", label %"); emit(tl); emit(", label %"); emit(el); emit("\n") } @@ -76,7 +76,7 @@ fn emit_while(st: Node) -> void { emit(" br label %"); emit(cl); emit("\n") emit(cl); emit(":\n") let c = emit_expr(st.a) - let cc = emit_bind(sconcat("icmp ne i32 ", sconcat(c.code, ", 0"))) + let cc = emit_bind(("icmp ne i32 " + (c.code + ", 0"))) emit(" br i1 "); emit(cc); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") emit(bl); emit(":\n"); g_term = false loop_push(cl, en) @@ -94,9 +94,9 @@ fn emit_for(st: Node) -> void { let cl = lbl("fcond"); let bl = lbl("fbody"); let ct = lbl("fcont"); let en = lbl("fend") emit(" br label %"); emit(cl); emit("\n") emit(cl); emit(":\n") - let iv = emit_bind(sconcat("load i32, ptr ", slot)) + let iv = emit_bind(("load i32, ptr " + slot)) let hi = emit_expr(st.b) - let cc = emit_bind(sconcat("icmp slt i32 ", sconcat(iv, sconcat(", ", hi.code)))) + let cc = emit_bind(("icmp slt i32 " + (iv + (", " + hi.code)))) emit(" br i1 "); emit(cc); emit(", label %"); emit(bl); emit(", label %"); emit(en); emit("\n") emit(bl); emit(":\n"); g_term = false loop_push(ct, en) @@ -104,8 +104,8 @@ fn emit_for(st: Node) -> void { loop_pop() if not g_term { emit(" br label %"); emit(ct); emit("\n") } emit(ct); emit(":\n") - let i2 = emit_bind(sconcat("load i32, ptr ", slot)) - let i3 = emit_bind(sconcat("add i32 ", sconcat(i2, ", 1"))) + let i2 = emit_bind(("load i32, ptr " + slot)) + let i3 = emit_bind(("add i32 " + (i2 + ", 1"))) store_at("i32", i3, slot) emit(" br label %"); emit(cl); emit("\n") emit(en); emit(":\n"); g_term = false @@ -122,7 +122,7 @@ fn emit_return(st: Node) -> void { fn arm_is_default(arm: Node) -> bool { var p = 0 - while p < len(arm.kids) { if arm.kids[p].kind == E_ID and streq(arm.kids[p].s, "_") { return true }; p = p + 1 } + while p < len(arm.kids) { if arm.kids[p].kind == E_ID and (arm.kids[p].s == "_") { return true }; p = p + 1 } return false } @@ -140,9 +140,9 @@ fn emit_match(st: Node) -> void { var p = 0 while p < len(arm.kids) { let pv = emit_expr(arm.kids[p]) - let c = emit_bind(sconcat("icmp eq i32 ", sconcat(sv.code, sconcat(", ", pv.code)))) + let c = emit_bind(("icmp eq i32 " + (sv.code + (", " + pv.code)))) if first { acc = c; first = false } - else { acc = emit_bind(sconcat("or i1 ", sconcat(acc, sconcat(", ", c)))) } + else { acc = emit_bind(("or i1 " + (acc + (", " + c)))) } p = p + 1 } let bodyl = lbl("mbody"); let nextl = lbl("marm") @@ -167,7 +167,7 @@ fn emit_stmt(st: Node) -> void { let slot = emit_alloca(llty(ty)) if (st.a == null) { var z = "0" - if streq(llty(ty), "ptr") { z = "null" } + if (llty(ty) == "ptr") { z = "null" } store_at(llty(ty), z, slot) } else { let v = emit_expr(st.a); store_at(llty(ty), v.code, slot) } loc_push(st.s, slot, ty) diff --git a/selfhost/emit_ui.ludic b/selfhost/emit_ui.ludic index 74587db6..6a08fc40 100644 --- a/selfhost/emit_ui.ludic +++ b/selfhost/emit_ui.ludic @@ -9,14 +9,14 @@ var ui_roots: []int # first-widget index of each ui block fn ui_wtype(w: Node) -> int { let s = w.s - if streq(s, "panel") { return 0 }; if streq(s, "col") { return 1 }; if streq(s, "row") { return 2 } - if streq(s, "label") { return 3 }; if streq(s, "button") { return 4 } - if streq(s, "image") { return 5 }; if streq(s, "spacer") { return 6 } + if (s == "panel") { return 0 }; if (s == "col") { return 1 }; if (s == "row") { return 2 } + if (s == "label") { return 3 }; if (s == "button") { return 4 } + if (s == "image") { return 5 }; if (s == "spacer") { return 6 } return 0 } fn ui_prop(w: Node, key: ptr) -> Node { var i = 0 - while i < len(w.b.kids) { if streq(w.b.kids[i].s, key) { return w.b.kids[i].a }; i = i + 1 } + while i < len(w.b.kids) { if (w.b.kids[i].s == key) { return w.b.kids[i].a }; i = i + 1 } return null } fn ui_flatten(w: Node, parent: int) -> void { @@ -45,13 +45,13 @@ fn ui_index_of(nm: ptr) -> int { let u = 0; var bi = 0 var i = 0 while i < len(prog) { - if prog[i].kind == N_UI and prog[i].ival == 1 { if streq(prog[i].s, s) { return ui_roots[bi] }; bi = bi + 1 } + if prog[i].kind == N_UI and prog[i].ival == 1 { if (prog[i].s == s) { return ui_roots[bi] }; bi = bi + 1 } i = i + 1 } i = 0 while i < len(uiw) { let idp = ui_prop(uiw[i], "id") - if (idp != null) { if idp.kind == E_ID and streq(idp.s, s) { return i } } + if (idp != null) { if idp.kind == E_ID and (idp.s == s) { return i } } i = i + 1 } return 0 @@ -64,10 +64,10 @@ fn ll_ui_set(idx: int, key: int, val: ptr) -> void { emit(" call void @fn_rt_ui_set(i32 "); emit(itoa(idx)); emit(", i32 "); emit(itoa(key)); emit(", i32 "); emit(val); emit(")\n") } fn ui_prop_key(k: ptr) -> int { - if streq(k,"w") { return 2 }; if streq(k,"h") { return 3 }; if streq(k,"x") { return 4 }; if streq(k,"y") { return 5 } - if streq(k,"pad") { return 7 }; if streq(k,"gap") { return 8 }; if streq(k,"bg") { return 9 }; if streq(k,"fg") { return 10 } - if streq(k,"border") { return 11 }; if streq(k,"grow") { return 13 }; if streq(k,"font") { return 14 }; if streq(k,"size") { return 15 } - if streq(k,"inset") { return 16 }; if streq(k,"focus") { return 17 } + if (k == "w") { return 2 }; if (k == "h") { return 3 }; if (k == "x") { return 4 }; if (k == "y") { return 5 } + if (k == "pad") { return 7 }; if (k == "gap") { return 8 }; if (k == "bg") { return 9 }; if (k == "fg") { return 10 } + if (k == "border") { return 11 }; if (k == "grow") { return 13 }; if (k == "font") { return 14 }; if (k == "size") { return 15 } + if (k == "inset") { return 16 }; if (k == "focus") { return 17 } return 0 - 1 } @@ -91,18 +91,18 @@ fn emit_ui_build() -> void { let pr = w.b.kids[p] let k = pr.s let v = pr.a - if streq(k, "id") { p = p + 1; continue } - if streq(k, "text") { + if (k == "id") { p = p + 1; continue } + if (k == "text") { let sv = emit_expr(v) emit(" call void @fn_rt_ui_static_text(i32 "); emit(itoa(i)); emit(", ptr "); emit(sv.code); emit(")\n") - } else { if streq(k, "skin") or streq(k, "image") { + } else { if (k == "skin") or (k == "image") { let sv = emit_expr(v) - let r = emit_bind(sconcat("call i32 @fn_rt_image_load(ptr ", sconcat(sv.code, ")"))) - if streq(k, "skin") { ll_ui_set(i, 20, r) } else { ll_ui_set(i, 19, r) } - } else { if streq(k, "align") { + let r = emit_bind(("call i32 @fn_rt_image_load(ptr " + (sv.code + ")"))) + if (k == "skin") { ll_ui_set(i, 20, r) } else { ll_ui_set(i, 19, r) } + } else { if (k == "align") { if v.kind == E_ID { var a = 0 - if streq(v.s, "center") { a = 1 }; if streq(v.s, "end") { a = 2 } + if (v.s == "center") { a = 1 }; if (v.s == "end") { a = 2 } ll_ui_set(i, 12, itoa(a)) } else { let vv = emit_expr(v); ll_ui_set(i, 12, vv.code) } } else { diff --git a/selfhost/ludicc.seed.ll b/selfhost/ludicc.seed.ll index 99ae1958..5c994c7d 100644 --- a/selfhost/ludicc.seed.ll +++ b/selfhost/ludicc.seed.ll @@ -51,6 +51,7 @@ declare void @win_close() @g_loc_ty = internal global ptr null @g_loc_mut = internal global ptr null @g_nloc = internal global i32 0 +@g_g_uses_str = internal global i32 0 @g_brk_lbl = internal global ptr null @g_cnt_lbl = internal global ptr null @g_nloop = internal global i32 0 @@ -375,1307 +376,1385 @@ declare void @win_close() @.str299 = private unnamed_addr constant [20 x i8] c" = internal global \00" @.str300 = private unnamed_addr constant [2 x i8] c" \00" @.str301 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str302 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" -@.str303 = private unnamed_addr constant [15 x i8] c"no such field \00" -@.str304 = private unnamed_addr constant [3 x i8] c" \00" -@.str305 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str306 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str307 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str308 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str309 = private unnamed_addr constant [21 x i8] c"indexing a non-slice\00" -@.str310 = private unnamed_addr constant [3 x i8] c" \00" -@.str311 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str312 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" -@.str313 = private unnamed_addr constant [3 x i8] c" \00" -@.str314 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" -@.str315 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str316 = private unnamed_addr constant [3 x i8] c" \00" -@.str317 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str318 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str319 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str320 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str321 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" -@.str322 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" -@.str323 = private unnamed_addr constant [6 x i8] c"peek8\00" -@.str324 = private unnamed_addr constant [6 x i8] c"poke8\00" -@.str325 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str326 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str327 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str328 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str329 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str330 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str331 = private unnamed_addr constant [10 x i8] c"print_str\00" -@.str332 = private unnamed_addr constant [10 x i8] c"print_int\00" -@.str333 = private unnamed_addr constant [8 x i8] c"os_argc\00" -@.str334 = private unnamed_addr constant [7 x i8] c"os_arg\00" -@.str335 = private unnamed_addr constant [8 x i8] c"os_exit\00" -@.str336 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str337 = private unnamed_addr constant [10 x i8] c"os_system\00" -@.str338 = private unnamed_addr constant [10 x i8] c"os_getenv\00" -@.str339 = private unnamed_addr constant [7 x i8] c"peek32\00" -@.str340 = private unnamed_addr constant [7 x i8] c"poke32\00" -@.str341 = private unnamed_addr constant [3 x i8] c" \00" -@.str342 = private unnamed_addr constant [4 x i8] c" = \00" +@.str302 = private unnamed_addr constant [41 x i8] c"define i32 @fn_str_eq(ptr %a, ptr %b) {\0A\00" +@.str303 = private unnamed_addr constant [25 x i8] c"entry:\0A br label %loop\0A\00" +@.str304 = private unnamed_addr constant [52 x i8] c"loop:\0A %i = phi i32 [ 0, %entry ], [ %i1, %cont ]\0A\00" +@.str305 = private unnamed_addr constant [51 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %i\0A\00" +@.str306 = private unnamed_addr constant [51 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %i\0A\00" +@.str307 = private unnamed_addr constant [51 x i8] c" %ca = load i8, ptr %pa\0A %cb = load i8, ptr %pb\0A\00" +@.str308 = private unnamed_addr constant [66 x i8] c" %df = icmp ne i8 %ca, %cb\0A br i1 %df, label %ret0, label %chk\0A\00" +@.str309 = private unnamed_addr constant [70 x i8] c"chk:\0A %zt = icmp eq i8 %ca, 0\0A br i1 %zt, label %ret1, label %cont\0A\00" +@.str310 = private unnamed_addr constant [46 x i8] c"cont:\0A %i1 = add i32 %i, 1\0A br label %loop\0A\00" +@.str311 = private unnamed_addr constant [39 x i8] c"ret1:\0A ret i32 1\0Aret0:\0A ret i32 0\0A}\0A\00" +@.str312 = private unnamed_addr constant [45 x i8] c"define ptr @fn_str_concat(ptr %a, ptr %b) {\0A\00" +@.str313 = private unnamed_addr constant [23 x i8] c"entry:\0A br label %al\0A\00" +@.str314 = private unnamed_addr constant [51 x i8] c"al:\0A %ia = phi i32 [ 0, %entry ], [ %ia1, %alb ]\0A\00" +@.str315 = private unnamed_addr constant [78 x i8] c" %pa = getelementptr inbounds i8, ptr %a, i32 %ia\0A %cca = load i8, ptr %pa\0A\00" +@.str316 = private unnamed_addr constant [64 x i8] c" %za = icmp eq i8 %cca, 0\0A br i1 %za, label %bl0, label %alb\0A\00" +@.str317 = private unnamed_addr constant [45 x i8] c"alb:\0A %ia1 = add i32 %ia, 1\0A br label %al\0A\00" +@.str318 = private unnamed_addr constant [21 x i8] c"bl0:\0A br label %bl\0A\00" +@.str319 = private unnamed_addr constant [49 x i8] c"bl:\0A %ib = phi i32 [ 0, %bl0 ], [ %ib1, %blb ]\0A\00" +@.str320 = private unnamed_addr constant [78 x i8] c" %pb = getelementptr inbounds i8, ptr %b, i32 %ib\0A %ccb = load i8, ptr %pb\0A\00" +@.str321 = private unnamed_addr constant [66 x i8] c" %zb = icmp eq i8 %ccb, 0\0A br i1 %zb, label %alloc, label %blb\0A\00" +@.str322 = private unnamed_addr constant [45 x i8] c"blb:\0A %ib1 = add i32 %ib, 1\0A br label %bl\0A\00" +@.str323 = private unnamed_addr constant [58 x i8] c"alloc:\0A %sum = add i32 %ia, %ib\0A %sz = add i32 %sum, 1\0A\00" +@.str324 = private unnamed_addr constant [83 x i8] c" %sz64 = sext i32 %sz to i64\0A %out = call ptr @malloc(i64 %sz64)\0A br label %c1\0A\00" +@.str325 = private unnamed_addr constant [49 x i8] c"c1:\0A %i = phi i32 [ 0, %alloc ], [ %i1, %c1b ]\0A\00" +@.str326 = private unnamed_addr constant [66 x i8] c" %d1 = icmp slt i32 %i, %ia\0A br i1 %d1, label %c1b, label %c2i\0A\00" +@.str327 = private unnamed_addr constant [81 x i8] c"c1b:\0A %s1 = getelementptr inbounds i8, ptr %a, i32 %i\0A %v1 = load i8, ptr %s1\0A\00" +@.str328 = private unnamed_addr constant [77 x i8] c" %o1 = getelementptr inbounds i8, ptr %out, i32 %i\0A store i8 %v1, ptr %o1\0A\00" +@.str329 = private unnamed_addr constant [38 x i8] c" %i1 = add i32 %i, 1\0A br label %c1\0A\00" +@.str330 = private unnamed_addr constant [21 x i8] c"c2i:\0A br label %c2\0A\00" +@.str331 = private unnamed_addr constant [47 x i8] c"c2:\0A %j = phi i32 [ 0, %c2i ], [ %j1, %c2b ]\0A\00" +@.str332 = private unnamed_addr constant [66 x i8] c" %d2 = icmp slt i32 %j, %ib\0A br i1 %d2, label %c2b, label %fin\0A\00" +@.str333 = private unnamed_addr constant [81 x i8] c"c2b:\0A %s2 = getelementptr inbounds i8, ptr %b, i32 %j\0A %v2 = load i8, ptr %s2\0A\00" +@.str334 = private unnamed_addr constant [102 x i8] c" %oj = add i32 %ia, %j\0A %o2 = getelementptr inbounds i8, ptr %out, i32 %oj\0A store i8 %v2, ptr %o2\0A\00" +@.str335 = private unnamed_addr constant [38 x i8] c" %j1 = add i32 %j, 1\0A br label %c2\0A\00" +@.str336 = private unnamed_addr constant [99 x i8] c"fin:\0A %pe = getelementptr inbounds i8, ptr %out, i32 %sum\0A store i8 0, ptr %pe\0A ret ptr %out\0A}\0A\00" +@.str337 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" +@.str338 = private unnamed_addr constant [15 x i8] c"no such field \00" +@.str339 = private unnamed_addr constant [3 x i8] c" \00" +@.str340 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str341 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str342 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str343 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str344 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" -@.str345 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str346 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str347 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str348 = private unnamed_addr constant [2 x i8] c")\00" -@.str349 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str350 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" -@.str351 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str352 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str353 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" -@.str354 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str355 = private unnamed_addr constant [2 x i8] c")\00" -@.str356 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str357 = private unnamed_addr constant [6 x i8] c"peek8\00" -@.str358 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str359 = private unnamed_addr constant [9 x i8] c"zext i8 \00" -@.str360 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str361 = private unnamed_addr constant [4 x i8] c"int\00" -@.str362 = private unnamed_addr constant [6 x i8] c"poke8\00" -@.str363 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" -@.str364 = private unnamed_addr constant [7 x i8] c" to i8\00" -@.str365 = private unnamed_addr constant [12 x i8] c" store i8 \00" -@.str366 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str367 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str368 = private unnamed_addr constant [2 x i8] c"0\00" -@.str369 = private unnamed_addr constant [5 x i8] c"void\00" -@.str370 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str371 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" -@.str372 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str373 = private unnamed_addr constant [2 x i8] c")\00" -@.str374 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str375 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str376 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str377 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str378 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str379 = private unnamed_addr constant [7 x i8] c"@fread\00" -@.str380 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str381 = private unnamed_addr constant [8 x i8] c"@fwrite\00" -@.str382 = private unnamed_addr constant [10 x i8] c"call i64 \00" -@.str383 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str384 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str385 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str386 = private unnamed_addr constant [2 x i8] c")\00" -@.str387 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str388 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str389 = private unnamed_addr constant [4 x i8] c"int\00" -@.str390 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str391 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str392 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str393 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" -@.str394 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str395 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str396 = private unnamed_addr constant [2 x i8] c")\00" -@.str397 = private unnamed_addr constant [4 x i8] c"int\00" -@.str398 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str399 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" -@.str400 = private unnamed_addr constant [2 x i8] c")\00" -@.str401 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str402 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str403 = private unnamed_addr constant [4 x i8] c"int\00" -@.str404 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str405 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" -@.str406 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str407 = private unnamed_addr constant [2 x i8] c"0\00" -@.str408 = private unnamed_addr constant [5 x i8] c"void\00" -@.str409 = private unnamed_addr constant [10 x i8] c"print_str\00" -@.str410 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_str, ptr \00" -@.str411 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str412 = private unnamed_addr constant [2 x i8] c"0\00" -@.str413 = private unnamed_addr constant [5 x i8] c"void\00" -@.str414 = private unnamed_addr constant [10 x i8] c"print_int\00" -@.str415 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" -@.str416 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str417 = private unnamed_addr constant [2 x i8] c"0\00" -@.str418 = private unnamed_addr constant [5 x i8] c"void\00" -@.str419 = private unnamed_addr constant [8 x i8] c"os_argc\00" -@.str420 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" -@.str421 = private unnamed_addr constant [4 x i8] c"int\00" -@.str422 = private unnamed_addr constant [7 x i8] c"os_arg\00" -@.str423 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" -@.str424 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" -@.str425 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str426 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str427 = private unnamed_addr constant [4 x i8] c"str\00" -@.str428 = private unnamed_addr constant [8 x i8] c"os_exit\00" -@.str429 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" -@.str430 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str431 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" -@.str432 = private unnamed_addr constant [2 x i8] c"0\00" -@.str433 = private unnamed_addr constant [5 x i8] c"void\00" -@.str434 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str435 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" -@.str436 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str437 = private unnamed_addr constant [10 x i8] c"os_system\00" -@.str438 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" -@.str439 = private unnamed_addr constant [2 x i8] c")\00" -@.str440 = private unnamed_addr constant [4 x i8] c"int\00" -@.str441 = private unnamed_addr constant [10 x i8] c"os_getenv\00" -@.str442 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" -@.str443 = private unnamed_addr constant [2 x i8] c")\00" -@.str444 = private unnamed_addr constant [4 x i8] c"str\00" -@.str445 = private unnamed_addr constant [7 x i8] c"peek32\00" -@.str446 = private unnamed_addr constant [3 x i8] c" \00" -@.str447 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str448 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str449 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str450 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str451 = private unnamed_addr constant [4 x i8] c"int\00" -@.str452 = private unnamed_addr constant [7 x i8] c"poke32\00" -@.str453 = private unnamed_addr constant [3 x i8] c" \00" -@.str454 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str455 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str456 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str457 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str458 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str459 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str460 = private unnamed_addr constant [2 x i8] c"0\00" -@.str461 = private unnamed_addr constant [5 x i8] c"void\00" -@.str462 = private unnamed_addr constant [2 x i8] c"0\00" -@.str463 = private unnamed_addr constant [5 x i8] c"void\00" -@.str464 = private unnamed_addr constant [9 x i8] c"mem_free\00" -@.str465 = private unnamed_addr constant [9 x i8] c"mem_copy\00" -@.str466 = private unnamed_addr constant [8 x i8] c"mem_set\00" -@.str467 = private unnamed_addr constant [8 x i8] c"ptr_add\00" -@.str468 = private unnamed_addr constant [10 x i8] c"read_byte\00" -@.str469 = private unnamed_addr constant [11 x i8] c"write_byte\00" -@.str470 = private unnamed_addr constant [8 x i8] c"str_len\00" -@.str471 = private unnamed_addr constant [8 x i8] c"os_time\00" -@.str472 = private unnamed_addr constant [6 x i8] c"peekf\00" -@.str473 = private unnamed_addr constant [6 x i8] c"pokef\00" -@.str474 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str475 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str476 = private unnamed_addr constant [6 x i8] c"peekp\00" -@.str477 = private unnamed_addr constant [6 x i8] c"pokep\00" -@.str478 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str479 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str480 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str481 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str482 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str483 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str484 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str485 = private unnamed_addr constant [9 x i8] c"mem_free\00" -@.str486 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" -@.str487 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str488 = private unnamed_addr constant [2 x i8] c"0\00" -@.str489 = private unnamed_addr constant [5 x i8] c"void\00" -@.str490 = private unnamed_addr constant [9 x i8] c"mem_copy\00" -@.str491 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str492 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str493 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str494 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str495 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str496 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str344 = private unnamed_addr constant [21 x i8] c"indexing a non-slice\00" +@.str345 = private unnamed_addr constant [3 x i8] c" \00" +@.str346 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str347 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str348 = private unnamed_addr constant [3 x i8] c" \00" +@.str349 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" +@.str350 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str351 = private unnamed_addr constant [3 x i8] c" \00" +@.str352 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str353 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str354 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str355 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str356 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" +@.str357 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" +@.str358 = private unnamed_addr constant [6 x i8] c"peek8\00" +@.str359 = private unnamed_addr constant [6 x i8] c"poke8\00" +@.str360 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str361 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str362 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str363 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str364 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str365 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str366 = private unnamed_addr constant [10 x i8] c"print_str\00" +@.str367 = private unnamed_addr constant [10 x i8] c"print_int\00" +@.str368 = private unnamed_addr constant [8 x i8] c"os_argc\00" +@.str369 = private unnamed_addr constant [7 x i8] c"os_arg\00" +@.str370 = private unnamed_addr constant [8 x i8] c"os_exit\00" +@.str371 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str372 = private unnamed_addr constant [10 x i8] c"os_system\00" +@.str373 = private unnamed_addr constant [10 x i8] c"os_getenv\00" +@.str374 = private unnamed_addr constant [7 x i8] c"peek32\00" +@.str375 = private unnamed_addr constant [7 x i8] c"poke32\00" +@.str376 = private unnamed_addr constant [3 x i8] c" \00" +@.str377 = private unnamed_addr constant [4 x i8] c" = \00" +@.str378 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str379 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" +@.str380 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str381 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str382 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str383 = private unnamed_addr constant [2 x i8] c")\00" +@.str384 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str385 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" +@.str386 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str387 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str388 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str389 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str390 = private unnamed_addr constant [2 x i8] c")\00" +@.str391 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str392 = private unnamed_addr constant [6 x i8] c"peek8\00" +@.str393 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str394 = private unnamed_addr constant [9 x i8] c"zext i8 \00" +@.str395 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str396 = private unnamed_addr constant [4 x i8] c"int\00" +@.str397 = private unnamed_addr constant [6 x i8] c"poke8\00" +@.str398 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" +@.str399 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str400 = private unnamed_addr constant [12 x i8] c" store i8 \00" +@.str401 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str402 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str403 = private unnamed_addr constant [2 x i8] c"0\00" +@.str404 = private unnamed_addr constant [5 x i8] c"void\00" +@.str405 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str406 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" +@.str407 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str408 = private unnamed_addr constant [2 x i8] c")\00" +@.str409 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str410 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str411 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str412 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str413 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str414 = private unnamed_addr constant [7 x i8] c"@fread\00" +@.str415 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str416 = private unnamed_addr constant [8 x i8] c"@fwrite\00" +@.str417 = private unnamed_addr constant [10 x i8] c"call i64 \00" +@.str418 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str419 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str420 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str421 = private unnamed_addr constant [2 x i8] c")\00" +@.str422 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str423 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str424 = private unnamed_addr constant [4 x i8] c"int\00" +@.str425 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str426 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str427 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str428 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" +@.str429 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str430 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str431 = private unnamed_addr constant [2 x i8] c")\00" +@.str432 = private unnamed_addr constant [4 x i8] c"int\00" +@.str433 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str434 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" +@.str435 = private unnamed_addr constant [2 x i8] c")\00" +@.str436 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str437 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str438 = private unnamed_addr constant [4 x i8] c"int\00" +@.str439 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str440 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" +@.str441 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str442 = private unnamed_addr constant [2 x i8] c"0\00" +@.str443 = private unnamed_addr constant [5 x i8] c"void\00" +@.str444 = private unnamed_addr constant [10 x i8] c"print_str\00" +@.str445 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_str, ptr \00" +@.str446 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str447 = private unnamed_addr constant [2 x i8] c"0\00" +@.str448 = private unnamed_addr constant [5 x i8] c"void\00" +@.str449 = private unnamed_addr constant [10 x i8] c"print_int\00" +@.str450 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" +@.str451 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str452 = private unnamed_addr constant [2 x i8] c"0\00" +@.str453 = private unnamed_addr constant [5 x i8] c"void\00" +@.str454 = private unnamed_addr constant [8 x i8] c"os_argc\00" +@.str455 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" +@.str456 = private unnamed_addr constant [4 x i8] c"int\00" +@.str457 = private unnamed_addr constant [7 x i8] c"os_arg\00" +@.str458 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" +@.str459 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" +@.str460 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str461 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str462 = private unnamed_addr constant [4 x i8] c"str\00" +@.str463 = private unnamed_addr constant [8 x i8] c"os_exit\00" +@.str464 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" +@.str465 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str466 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" +@.str467 = private unnamed_addr constant [2 x i8] c"0\00" +@.str468 = private unnamed_addr constant [5 x i8] c"void\00" +@.str469 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str470 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" +@.str471 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str472 = private unnamed_addr constant [10 x i8] c"os_system\00" +@.str473 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" +@.str474 = private unnamed_addr constant [2 x i8] c")\00" +@.str475 = private unnamed_addr constant [4 x i8] c"int\00" +@.str476 = private unnamed_addr constant [10 x i8] c"os_getenv\00" +@.str477 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" +@.str478 = private unnamed_addr constant [2 x i8] c")\00" +@.str479 = private unnamed_addr constant [4 x i8] c"str\00" +@.str480 = private unnamed_addr constant [7 x i8] c"peek32\00" +@.str481 = private unnamed_addr constant [3 x i8] c" \00" +@.str482 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str483 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str484 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str485 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str486 = private unnamed_addr constant [4 x i8] c"int\00" +@.str487 = private unnamed_addr constant [7 x i8] c"poke32\00" +@.str488 = private unnamed_addr constant [3 x i8] c" \00" +@.str489 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str490 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str491 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str492 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str493 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str494 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str495 = private unnamed_addr constant [2 x i8] c"0\00" +@.str496 = private unnamed_addr constant [5 x i8] c"void\00" @.str497 = private unnamed_addr constant [2 x i8] c"0\00" @.str498 = private unnamed_addr constant [5 x i8] c"void\00" -@.str499 = private unnamed_addr constant [8 x i8] c"mem_set\00" -@.str500 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str501 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str502 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" -@.str503 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str504 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str505 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str506 = private unnamed_addr constant [2 x i8] c"0\00" -@.str507 = private unnamed_addr constant [5 x i8] c"void\00" -@.str508 = private unnamed_addr constant [8 x i8] c"ptr_add\00" -@.str509 = private unnamed_addr constant [3 x i8] c" \00" -@.str510 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" -@.str511 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str512 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str513 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str514 = private unnamed_addr constant [10 x i8] c"read_byte\00" -@.str515 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" -@.str516 = private unnamed_addr constant [4 x i8] c"int\00" -@.str517 = private unnamed_addr constant [11 x i8] c"write_byte\00" -@.str518 = private unnamed_addr constant [25 x i8] c" call i32 @putchar(i32 \00" -@.str519 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str520 = private unnamed_addr constant [2 x i8] c"0\00" -@.str521 = private unnamed_addr constant [5 x i8] c"void\00" -@.str522 = private unnamed_addr constant [8 x i8] c"str_len\00" -@.str523 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" -@.str524 = private unnamed_addr constant [2 x i8] c")\00" -@.str525 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str526 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str527 = private unnamed_addr constant [4 x i8] c"int\00" -@.str528 = private unnamed_addr constant [8 x i8] c"os_time\00" -@.str529 = private unnamed_addr constant [25 x i8] c"call i64 @time(ptr null)\00" -@.str530 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str531 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str532 = private unnamed_addr constant [4 x i8] c"int\00" -@.str533 = private unnamed_addr constant [6 x i8] c"peekf\00" -@.str534 = private unnamed_addr constant [3 x i8] c" \00" -@.str535 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str536 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str537 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str538 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str539 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str540 = private unnamed_addr constant [6 x i8] c"pokef\00" -@.str541 = private unnamed_addr constant [3 x i8] c" \00" -@.str542 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str543 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str544 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str545 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str546 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str499 = private unnamed_addr constant [9 x i8] c"mem_free\00" +@.str500 = private unnamed_addr constant [9 x i8] c"mem_copy\00" +@.str501 = private unnamed_addr constant [8 x i8] c"mem_set\00" +@.str502 = private unnamed_addr constant [8 x i8] c"ptr_add\00" +@.str503 = private unnamed_addr constant [10 x i8] c"read_byte\00" +@.str504 = private unnamed_addr constant [11 x i8] c"write_byte\00" +@.str505 = private unnamed_addr constant [8 x i8] c"str_len\00" +@.str506 = private unnamed_addr constant [8 x i8] c"os_time\00" +@.str507 = private unnamed_addr constant [6 x i8] c"peekf\00" +@.str508 = private unnamed_addr constant [6 x i8] c"pokef\00" +@.str509 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str510 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str511 = private unnamed_addr constant [6 x i8] c"peekp\00" +@.str512 = private unnamed_addr constant [6 x i8] c"pokep\00" +@.str513 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str514 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str515 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str516 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str517 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str518 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str519 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str520 = private unnamed_addr constant [9 x i8] c"mem_free\00" +@.str521 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" +@.str522 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str523 = private unnamed_addr constant [2 x i8] c"0\00" +@.str524 = private unnamed_addr constant [5 x i8] c"void\00" +@.str525 = private unnamed_addr constant [9 x i8] c"mem_copy\00" +@.str526 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str527 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str528 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str529 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str530 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str531 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str532 = private unnamed_addr constant [2 x i8] c"0\00" +@.str533 = private unnamed_addr constant [5 x i8] c"void\00" +@.str534 = private unnamed_addr constant [8 x i8] c"mem_set\00" +@.str535 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str536 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str537 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" +@.str538 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str539 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str540 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str541 = private unnamed_addr constant [2 x i8] c"0\00" +@.str542 = private unnamed_addr constant [5 x i8] c"void\00" +@.str543 = private unnamed_addr constant [8 x i8] c"ptr_add\00" +@.str544 = private unnamed_addr constant [3 x i8] c" \00" +@.str545 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" +@.str546 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str547 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str548 = private unnamed_addr constant [2 x i8] c"0\00" -@.str549 = private unnamed_addr constant [5 x i8] c"void\00" -@.str550 = private unnamed_addr constant [6 x i8] c"peekp\00" -@.str551 = private unnamed_addr constant [3 x i8] c" \00" -@.str552 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" -@.str553 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str554 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str555 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str556 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str557 = private unnamed_addr constant [6 x i8] c"pokep\00" -@.str558 = private unnamed_addr constant [3 x i8] c" \00" -@.str559 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" -@.str560 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str561 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str562 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str563 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str564 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str565 = private unnamed_addr constant [2 x i8] c"0\00" -@.str566 = private unnamed_addr constant [5 x i8] c"void\00" -@.str567 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str568 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str569 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str570 = private unnamed_addr constant [4 x i8] c"int\00" -@.str571 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str572 = private unnamed_addr constant [2 x i8] c"1\00" -@.str573 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str574 = private unnamed_addr constant [2 x i8] c"0\00" -@.str575 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str576 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str577 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" -@.str578 = private unnamed_addr constant [4 x i8] c"str\00" -@.str579 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str580 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" -@.str581 = private unnamed_addr constant [4 x i8] c"int\00" -@.str582 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str583 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" -@.str584 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str585 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str586 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" -@.str587 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str548 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str549 = private unnamed_addr constant [10 x i8] c"read_byte\00" +@.str550 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" +@.str551 = private unnamed_addr constant [4 x i8] c"int\00" +@.str552 = private unnamed_addr constant [11 x i8] c"write_byte\00" +@.str553 = private unnamed_addr constant [25 x i8] c" call i32 @putchar(i32 \00" +@.str554 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str555 = private unnamed_addr constant [2 x i8] c"0\00" +@.str556 = private unnamed_addr constant [5 x i8] c"void\00" +@.str557 = private unnamed_addr constant [8 x i8] c"str_len\00" +@.str558 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str559 = private unnamed_addr constant [2 x i8] c")\00" +@.str560 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str561 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str562 = private unnamed_addr constant [4 x i8] c"int\00" +@.str563 = private unnamed_addr constant [8 x i8] c"os_time\00" +@.str564 = private unnamed_addr constant [25 x i8] c"call i64 @time(ptr null)\00" +@.str565 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str566 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str567 = private unnamed_addr constant [4 x i8] c"int\00" +@.str568 = private unnamed_addr constant [6 x i8] c"peekf\00" +@.str569 = private unnamed_addr constant [3 x i8] c" \00" +@.str570 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str571 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str572 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str573 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str574 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str575 = private unnamed_addr constant [6 x i8] c"pokef\00" +@.str576 = private unnamed_addr constant [3 x i8] c" \00" +@.str577 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str578 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str579 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str580 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str581 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str582 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str583 = private unnamed_addr constant [2 x i8] c"0\00" +@.str584 = private unnamed_addr constant [5 x i8] c"void\00" +@.str585 = private unnamed_addr constant [6 x i8] c"peekp\00" +@.str586 = private unnamed_addr constant [3 x i8] c" \00" +@.str587 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" @.str588 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str589 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str590 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str591 = private unnamed_addr constant [2 x i8] c"0\00" -@.str592 = private unnamed_addr constant [5 x i8] c"void\00" -@.str593 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str594 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" +@.str589 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str590 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str591 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str592 = private unnamed_addr constant [6 x i8] c"pokep\00" +@.str593 = private unnamed_addr constant [3 x i8] c" \00" +@.str594 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" @.str595 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str596 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str597 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str598 = private unnamed_addr constant [2 x i8] c"0\00" -@.str599 = private unnamed_addr constant [5 x i8] c"void\00" -@.str600 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str601 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" -@.str602 = private unnamed_addr constant [2 x i8] c"0\00" -@.str603 = private unnamed_addr constant [5 x i8] c"void\00" -@.str604 = private unnamed_addr constant [2 x i8] c"0\00" -@.str605 = private unnamed_addr constant [5 x i8] c"void\00" -@.str606 = private unnamed_addr constant [4 x i8] c"min\00" -@.str607 = private unnamed_addr constant [4 x i8] c"max\00" -@.str608 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str609 = private unnamed_addr constant [6 x i8] c"clamp\00" -@.str610 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str611 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str612 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str613 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str614 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str615 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str616 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str617 = private unnamed_addr constant [4 x i8] c"int\00" -@.str618 = private unnamed_addr constant [4 x i8] c"min\00" -@.str619 = private unnamed_addr constant [4 x i8] c"max\00" -@.str620 = private unnamed_addr constant [4 x i8] c"slt\00" -@.str621 = private unnamed_addr constant [4 x i8] c"max\00" -@.str622 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str623 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str624 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str625 = private unnamed_addr constant [3 x i8] c", \00" -@.str626 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str627 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str628 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str629 = private unnamed_addr constant [4 x i8] c"int\00" -@.str630 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str631 = private unnamed_addr constant [3 x i8] c", \00" -@.str632 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str633 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str634 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str635 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" -@.str636 = private unnamed_addr constant [3 x i8] c", \00" -@.str637 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str638 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str639 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str640 = private unnamed_addr constant [4 x i8] c"int\00" -@.str641 = private unnamed_addr constant [15 x i8] c"getelementptr \00" -@.str642 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" -@.str643 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" -@.str644 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str645 = private unnamed_addr constant [27 x i8] c"unknown record type in new\00" -@.str646 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str647 = private unnamed_addr constant [2 x i8] c")\00" -@.str648 = private unnamed_addr constant [3 x i8] c" \00" -@.str649 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str650 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str651 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str652 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str653 = private unnamed_addr constant [2 x i8] c"0\00" -@.str654 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str655 = private unnamed_addr constant [5 x i8] c"null\00" -@.str656 = private unnamed_addr constant [9 x i8] c" store \00" -@.str657 = private unnamed_addr constant [2 x i8] c" \00" -@.str658 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str659 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str660 = private unnamed_addr constant [8 x i8] c"%LSlice\00" -@.str661 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str662 = private unnamed_addr constant [2 x i8] c")\00" -@.str663 = private unnamed_addr constant [3 x i8] c" \00" -@.str664 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str665 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" -@.str666 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" -@.str667 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str668 = private unnamed_addr constant [3 x i8] c" \00" -@.str669 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str670 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" -@.str671 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str672 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str673 = private unnamed_addr constant [3 x i8] c" \00" -@.str674 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str675 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" -@.str676 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str677 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str678 = private unnamed_addr constant [3 x i8] c" \00" -@.str679 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str680 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str681 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str682 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str683 = private unnamed_addr constant [4 x i8] c"int\00" -@.str684 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str685 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str686 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" -@.str687 = private unnamed_addr constant [3 x i8] c", \00" -@.str688 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str689 = private unnamed_addr constant [4 x i8] c"put\00" -@.str690 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str691 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str692 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str693 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str694 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str695 = private unnamed_addr constant [9 x i8] c"mul i32 \00" -@.str696 = private unnamed_addr constant [4 x i8] c", 2\00" -@.str697 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str698 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str699 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str700 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" -@.str701 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str702 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str703 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str704 = private unnamed_addr constant [3 x i8] c", \00" -@.str705 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str706 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" -@.str707 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str708 = private unnamed_addr constant [2 x i8] c")\00" -@.str709 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str710 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str711 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str712 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str713 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str714 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str715 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str596 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str597 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str598 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str599 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str600 = private unnamed_addr constant [2 x i8] c"0\00" +@.str601 = private unnamed_addr constant [5 x i8] c"void\00" +@.str602 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str603 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str604 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str605 = private unnamed_addr constant [4 x i8] c"int\00" +@.str606 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str607 = private unnamed_addr constant [2 x i8] c"1\00" +@.str608 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str609 = private unnamed_addr constant [2 x i8] c"0\00" +@.str610 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str611 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str612 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" +@.str613 = private unnamed_addr constant [4 x i8] c"str\00" +@.str614 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str615 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" +@.str616 = private unnamed_addr constant [4 x i8] c"int\00" +@.str617 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str618 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" +@.str619 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str620 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str621 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" +@.str622 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str623 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str624 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str625 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str626 = private unnamed_addr constant [2 x i8] c"0\00" +@.str627 = private unnamed_addr constant [5 x i8] c"void\00" +@.str628 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str629 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" +@.str630 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str631 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str632 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str633 = private unnamed_addr constant [2 x i8] c"0\00" +@.str634 = private unnamed_addr constant [5 x i8] c"void\00" +@.str635 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str636 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" +@.str637 = private unnamed_addr constant [2 x i8] c"0\00" +@.str638 = private unnamed_addr constant [5 x i8] c"void\00" +@.str639 = private unnamed_addr constant [2 x i8] c"0\00" +@.str640 = private unnamed_addr constant [5 x i8] c"void\00" +@.str641 = private unnamed_addr constant [4 x i8] c"min\00" +@.str642 = private unnamed_addr constant [4 x i8] c"max\00" +@.str643 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str644 = private unnamed_addr constant [6 x i8] c"clamp\00" +@.str645 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str646 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str647 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str648 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str649 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str650 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str651 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str652 = private unnamed_addr constant [4 x i8] c"int\00" +@.str653 = private unnamed_addr constant [4 x i8] c"min\00" +@.str654 = private unnamed_addr constant [4 x i8] c"max\00" +@.str655 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str656 = private unnamed_addr constant [4 x i8] c"max\00" +@.str657 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str658 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str659 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str660 = private unnamed_addr constant [3 x i8] c", \00" +@.str661 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str662 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str663 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str664 = private unnamed_addr constant [4 x i8] c"int\00" +@.str665 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str666 = private unnamed_addr constant [3 x i8] c", \00" +@.str667 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str668 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str669 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str670 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str671 = private unnamed_addr constant [3 x i8] c", \00" +@.str672 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str673 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str674 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str675 = private unnamed_addr constant [4 x i8] c"int\00" +@.str676 = private unnamed_addr constant [15 x i8] c"getelementptr \00" +@.str677 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" +@.str678 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str679 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str680 = private unnamed_addr constant [27 x i8] c"unknown record type in new\00" +@.str681 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str682 = private unnamed_addr constant [2 x i8] c")\00" +@.str683 = private unnamed_addr constant [3 x i8] c" \00" +@.str684 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str685 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str686 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str687 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str688 = private unnamed_addr constant [2 x i8] c"0\00" +@.str689 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str690 = private unnamed_addr constant [5 x i8] c"null\00" +@.str691 = private unnamed_addr constant [9 x i8] c" store \00" +@.str692 = private unnamed_addr constant [2 x i8] c" \00" +@.str693 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str694 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str695 = private unnamed_addr constant [8 x i8] c"%LSlice\00" +@.str696 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str697 = private unnamed_addr constant [2 x i8] c")\00" +@.str698 = private unnamed_addr constant [3 x i8] c" \00" +@.str699 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str700 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str701 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" +@.str702 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str703 = private unnamed_addr constant [3 x i8] c" \00" +@.str704 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str705 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" +@.str706 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str707 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str708 = private unnamed_addr constant [3 x i8] c" \00" +@.str709 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str710 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" +@.str711 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str712 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str713 = private unnamed_addr constant [3 x i8] c" \00" +@.str714 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str715 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str716 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str717 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str718 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str719 = private unnamed_addr constant [3 x i8] c" \00" -@.str720 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str721 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str722 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str723 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str724 = private unnamed_addr constant [9 x i8] c" store \00" -@.str725 = private unnamed_addr constant [2 x i8] c" \00" -@.str726 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str727 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str728 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str729 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str730 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str731 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str732 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str733 = private unnamed_addr constant [2 x i8] c"0\00" -@.str734 = private unnamed_addr constant [5 x i8] c"void\00" -@.str735 = private unnamed_addr constant [6 x i8] c"load \00" -@.str736 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str737 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str738 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str739 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str740 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str741 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str742 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str743 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str744 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str745 = private unnamed_addr constant [3 x i8] c"sc\00" -@.str746 = private unnamed_addr constant [6 x i8] c"scend\00" -@.str747 = private unnamed_addr constant [4 x i8] c"and\00" -@.str748 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str749 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str750 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str717 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str718 = private unnamed_addr constant [4 x i8] c"int\00" +@.str719 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str720 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str721 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str722 = private unnamed_addr constant [3 x i8] c", \00" +@.str723 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str724 = private unnamed_addr constant [4 x i8] c"put\00" +@.str725 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str726 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str727 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str728 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str729 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str730 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str731 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str732 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str733 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str734 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str735 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" +@.str736 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str737 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str738 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str739 = private unnamed_addr constant [3 x i8] c", \00" +@.str740 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str741 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str742 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str743 = private unnamed_addr constant [2 x i8] c")\00" +@.str744 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str746 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str747 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str748 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str749 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str750 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str751 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str752 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str753 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str754 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str755 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str756 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str757 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str758 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str759 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str760 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str761 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str762 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str763 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str764 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str765 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str766 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str767 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str768 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str769 = private unnamed_addr constant [2 x i8] c"<\00" -@.str770 = private unnamed_addr constant [4 x i8] c"slt\00" -@.str771 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str772 = private unnamed_addr constant [4 x i8] c"sle\00" -@.str773 = private unnamed_addr constant [2 x i8] c">\00" -@.str774 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str775 = private unnamed_addr constant [3 x i8] c">=\00" -@.str776 = private unnamed_addr constant [4 x i8] c"sge\00" -@.str777 = private unnamed_addr constant [3 x i8] c"==\00" -@.str778 = private unnamed_addr constant [3 x i8] c"eq\00" -@.str779 = private unnamed_addr constant [3 x i8] c"ne\00" -@.str780 = private unnamed_addr constant [2 x i8] c"<\00" -@.str781 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str782 = private unnamed_addr constant [2 x i8] c">\00" -@.str783 = private unnamed_addr constant [3 x i8] c">=\00" -@.str784 = private unnamed_addr constant [3 x i8] c"==\00" -@.str785 = private unnamed_addr constant [3 x i8] c"!=\00" -@.str786 = private unnamed_addr constant [2 x i8] c"+\00" -@.str787 = private unnamed_addr constant [4 x i8] c"add\00" -@.str788 = private unnamed_addr constant [2 x i8] c"-\00" -@.str789 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str790 = private unnamed_addr constant [2 x i8] c"*\00" -@.str791 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str792 = private unnamed_addr constant [2 x i8] c"/\00" -@.str793 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str794 = private unnamed_addr constant [2 x i8] c"&\00" -@.str795 = private unnamed_addr constant [4 x i8] c"and\00" -@.str796 = private unnamed_addr constant [2 x i8] c"|\00" -@.str797 = private unnamed_addr constant [3 x i8] c"or\00" -@.str798 = private unnamed_addr constant [2 x i8] c"^\00" -@.str799 = private unnamed_addr constant [4 x i8] c"xor\00" -@.str800 = private unnamed_addr constant [3 x i8] c"<<\00" -@.str801 = private unnamed_addr constant [4 x i8] c"shl\00" -@.str802 = private unnamed_addr constant [3 x i8] c">>\00" -@.str803 = private unnamed_addr constant [5 x i8] c"lshr\00" -@.str804 = private unnamed_addr constant [5 x i8] c"srem\00" -@.str805 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str806 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str807 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str808 = private unnamed_addr constant [4 x i8] c"and\00" -@.str809 = private unnamed_addr constant [3 x i8] c"or\00" -@.str810 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str811 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str812 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str813 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str814 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str815 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str816 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str817 = private unnamed_addr constant [2 x i8] c" \00" -@.str818 = private unnamed_addr constant [2 x i8] c" \00" -@.str819 = private unnamed_addr constant [3 x i8] c", \00" -@.str820 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str821 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str822 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str823 = private unnamed_addr constant [2 x i8] c"*\00" -@.str824 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str825 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str826 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str827 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str828 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str829 = private unnamed_addr constant [3 x i8] c", \00" -@.str830 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" -@.str831 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str832 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str833 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str834 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str835 = private unnamed_addr constant [2 x i8] c"/\00" -@.str836 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str837 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str838 = private unnamed_addr constant [9 x i8] c"shl i64 \00" -@.str839 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str840 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str841 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str842 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" -@.str843 = private unnamed_addr constant [3 x i8] c", \00" -@.str844 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str845 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str846 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str847 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str848 = private unnamed_addr constant [3 x i8] c", \00" -@.str849 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str850 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str851 = private unnamed_addr constant [3 x i8] c", \00" -@.str852 = private unnamed_addr constant [4 x i8] c"int\00" -@.str853 = private unnamed_addr constant [5 x i8] c"self\00" -@.str854 = private unnamed_addr constant [2 x i8] c"0\00" -@.str855 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str856 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str857 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str858 = private unnamed_addr constant [4 x i8] c"key\00" -@.str859 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" -@.str860 = private unnamed_addr constant [4 x i8] c"int\00" -@.str861 = private unnamed_addr constant [5 x i8] c"save\00" -@.str862 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" -@.str863 = private unnamed_addr constant [2 x i8] c"0\00" -@.str864 = private unnamed_addr constant [5 x i8] c"void\00" -@.str865 = private unnamed_addr constant [9 x i8] c"ui_build\00" -@.str866 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" -@.str867 = private unnamed_addr constant [2 x i8] c"0\00" -@.str868 = private unnamed_addr constant [5 x i8] c"void\00" -@.str869 = private unnamed_addr constant [5 x i8] c"load\00" -@.str870 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" -@.str871 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str872 = private unnamed_addr constant [5 x i8] c"quit\00" -@.str873 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" -@.str874 = private unnamed_addr constant [2 x i8] c"0\00" -@.str875 = private unnamed_addr constant [5 x i8] c"void\00" -@.str876 = private unnamed_addr constant [4 x i8] c"len\00" -@.str877 = private unnamed_addr constant [5 x i8] c"push\00" -@.str878 = private unnamed_addr constant [3 x i8] c"fx\00" -@.str879 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str880 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str881 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str882 = private unnamed_addr constant [4 x i8] c"flr\00" -@.str883 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" -@.str884 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str885 = private unnamed_addr constant [4 x i8] c"int\00" -@.str886 = private unnamed_addr constant [4 x i8] c"rt_\00" -@.str887 = private unnamed_addr constant [18 x i8] c"unknown function \00" -@.str888 = private unnamed_addr constant [3 x i8] c" \00" -@.str889 = private unnamed_addr constant [2 x i8] c"0\00" -@.str890 = private unnamed_addr constant [5 x i8] c"void\00" -@.str891 = private unnamed_addr constant [4 x i8] c" = \00" -@.str892 = private unnamed_addr constant [6 x i8] c"call \00" -@.str893 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str894 = private unnamed_addr constant [2 x i8] c"(\00" -@.str895 = private unnamed_addr constant [3 x i8] c", \00" -@.str896 = private unnamed_addr constant [2 x i8] c" \00" -@.str897 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str898 = private unnamed_addr constant [2 x i8] c"0\00" -@.str899 = private unnamed_addr constant [4 x i8] c"int\00" -@.str900 = private unnamed_addr constant [4 x i8] c"int\00" -@.str901 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str902 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str903 = private unnamed_addr constant [5 x i8] c"null\00" -@.str904 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str905 = private unnamed_addr constant [4 x i8] c"str\00" -@.str906 = private unnamed_addr constant [4 x i8] c"int\00" -@.str907 = private unnamed_addr constant [6 x i8] c"load \00" -@.str908 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" -@.str909 = private unnamed_addr constant [4 x i8] c"int\00" -@.str910 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" -@.str911 = private unnamed_addr constant [4 x i8] c"int\00" -@.str912 = private unnamed_addr constant [2 x i8] c"-\00" -@.str913 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str914 = private unnamed_addr constant [4 x i8] c"int\00" -@.str915 = private unnamed_addr constant [2 x i8] c"~\00" -@.str916 = private unnamed_addr constant [9 x i8] c"xor i32 \00" -@.str917 = private unnamed_addr constant [5 x i8] c", -1\00" -@.str918 = private unnamed_addr constant [4 x i8] c"int\00" -@.str919 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str920 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str921 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str922 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str923 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str924 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" -@.str925 = private unnamed_addr constant [2 x i8] c"0\00" -@.str926 = private unnamed_addr constant [4 x i8] c"int\00" -@.str927 = private unnamed_addr constant [9 x i8] c" store \00" -@.str928 = private unnamed_addr constant [2 x i8] c" \00" -@.str929 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str930 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str931 = private unnamed_addr constant [2 x i8] c"0\00" -@.str932 = private unnamed_addr constant [4 x i8] c"int\00" -@.str933 = private unnamed_addr constant [29 x i8] c"cannot assign to immutable '\00" -@.str934 = private unnamed_addr constant [41 x i8] c"' (declared with let; use var) \E2\80\94 line \00" -@.str935 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" -@.str936 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str937 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" -@.str938 = private unnamed_addr constant [2 x i8] c"=\00" -@.str939 = private unnamed_addr constant [6 x i8] c"load \00" -@.str940 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str941 = private unnamed_addr constant [4 x i8] c"add\00" -@.str942 = private unnamed_addr constant [3 x i8] c"-=\00" -@.str943 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str944 = private unnamed_addr constant [3 x i8] c"*=\00" -@.str945 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str946 = private unnamed_addr constant [3 x i8] c"/=\00" -@.str947 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str948 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str949 = private unnamed_addr constant [3 x i8] c", \00" -@.str950 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str951 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str952 = private unnamed_addr constant [5 x i8] c"then\00" -@.str953 = private unnamed_addr constant [5 x i8] c"else\00" -@.str954 = private unnamed_addr constant [6 x i8] c"ifend\00" -@.str955 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str956 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str957 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str958 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str959 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str960 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str961 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str962 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str963 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str964 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str965 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str966 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str967 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str968 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str969 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str970 = private unnamed_addr constant [6 x i8] c"wcond\00" -@.str971 = private unnamed_addr constant [6 x i8] c"wbody\00" -@.str972 = private unnamed_addr constant [5 x i8] c"wend\00" -@.str973 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str974 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str975 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str976 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str977 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str978 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str979 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str980 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str981 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str982 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str983 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str984 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str985 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str986 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str987 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str752 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str753 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str754 = private unnamed_addr constant [3 x i8] c" \00" +@.str755 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str756 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str757 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str758 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str759 = private unnamed_addr constant [9 x i8] c" store \00" +@.str760 = private unnamed_addr constant [2 x i8] c" \00" +@.str761 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str762 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str763 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str764 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str765 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str766 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str767 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str768 = private unnamed_addr constant [2 x i8] c"0\00" +@.str769 = private unnamed_addr constant [5 x i8] c"void\00" +@.str770 = private unnamed_addr constant [6 x i8] c"load \00" +@.str771 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str772 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str773 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str774 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str775 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str776 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str777 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str778 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str779 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str780 = private unnamed_addr constant [3 x i8] c"sc\00" +@.str781 = private unnamed_addr constant [6 x i8] c"scend\00" +@.str782 = private unnamed_addr constant [4 x i8] c"and\00" +@.str783 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str784 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str785 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str786 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str787 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str788 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str789 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str790 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str791 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str792 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str793 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str794 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str795 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str796 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str797 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str798 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str799 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str800 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str801 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str802 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str803 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str804 = private unnamed_addr constant [2 x i8] c"<\00" +@.str805 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str806 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str807 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str808 = private unnamed_addr constant [2 x i8] c">\00" +@.str809 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str810 = private unnamed_addr constant [3 x i8] c">=\00" +@.str811 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str812 = private unnamed_addr constant [3 x i8] c"==\00" +@.str813 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str814 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str815 = private unnamed_addr constant [2 x i8] c"<\00" +@.str816 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str817 = private unnamed_addr constant [2 x i8] c">\00" +@.str818 = private unnamed_addr constant [3 x i8] c">=\00" +@.str819 = private unnamed_addr constant [3 x i8] c"==\00" +@.str820 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str821 = private unnamed_addr constant [2 x i8] c"+\00" +@.str822 = private unnamed_addr constant [4 x i8] c"add\00" +@.str823 = private unnamed_addr constant [2 x i8] c"-\00" +@.str824 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str825 = private unnamed_addr constant [2 x i8] c"*\00" +@.str826 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str827 = private unnamed_addr constant [2 x i8] c"/\00" +@.str828 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str829 = private unnamed_addr constant [2 x i8] c"&\00" +@.str830 = private unnamed_addr constant [4 x i8] c"and\00" +@.str831 = private unnamed_addr constant [2 x i8] c"|\00" +@.str832 = private unnamed_addr constant [3 x i8] c"or\00" +@.str833 = private unnamed_addr constant [2 x i8] c"^\00" +@.str834 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str835 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str836 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str837 = private unnamed_addr constant [3 x i8] c">>\00" +@.str838 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str839 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str840 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str841 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str842 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str843 = private unnamed_addr constant [2 x i8] c"+\00" +@.str844 = private unnamed_addr constant [29 x i8] c"call ptr @fn_str_concat(ptr \00" +@.str845 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str846 = private unnamed_addr constant [2 x i8] c")\00" +@.str847 = private unnamed_addr constant [4 x i8] c"str\00" +@.str848 = private unnamed_addr constant [25 x i8] c"call i32 @fn_str_eq(ptr \00" +@.str849 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str850 = private unnamed_addr constant [2 x i8] c")\00" +@.str851 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str852 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str853 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str854 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str855 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str856 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str857 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str858 = private unnamed_addr constant [4 x i8] c"and\00" +@.str859 = private unnamed_addr constant [3 x i8] c"or\00" +@.str860 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str861 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str862 = private unnamed_addr constant [2 x i8] c"+\00" +@.str863 = private unnamed_addr constant [2 x i8] c"+\00" +@.str864 = private unnamed_addr constant [3 x i8] c"==\00" +@.str865 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str866 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str867 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str868 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str869 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str870 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str871 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str872 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str873 = private unnamed_addr constant [2 x i8] c" \00" +@.str874 = private unnamed_addr constant [2 x i8] c" \00" +@.str875 = private unnamed_addr constant [3 x i8] c", \00" +@.str876 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str877 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str878 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str879 = private unnamed_addr constant [2 x i8] c"*\00" +@.str880 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str881 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str882 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str883 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str884 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str885 = private unnamed_addr constant [3 x i8] c", \00" +@.str886 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" +@.str887 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str888 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str889 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str890 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str891 = private unnamed_addr constant [2 x i8] c"/\00" +@.str892 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str893 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str894 = private unnamed_addr constant [9 x i8] c"shl i64 \00" +@.str895 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str896 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str897 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str898 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str899 = private unnamed_addr constant [3 x i8] c", \00" +@.str900 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str901 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str902 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str903 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str904 = private unnamed_addr constant [3 x i8] c", \00" +@.str905 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str906 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str907 = private unnamed_addr constant [3 x i8] c", \00" +@.str908 = private unnamed_addr constant [4 x i8] c"int\00" +@.str909 = private unnamed_addr constant [5 x i8] c"self\00" +@.str910 = private unnamed_addr constant [2 x i8] c"0\00" +@.str911 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str912 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str913 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str914 = private unnamed_addr constant [4 x i8] c"key\00" +@.str915 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" +@.str916 = private unnamed_addr constant [4 x i8] c"int\00" +@.str917 = private unnamed_addr constant [5 x i8] c"save\00" +@.str918 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" +@.str919 = private unnamed_addr constant [2 x i8] c"0\00" +@.str920 = private unnamed_addr constant [5 x i8] c"void\00" +@.str921 = private unnamed_addr constant [9 x i8] c"ui_build\00" +@.str922 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" +@.str923 = private unnamed_addr constant [2 x i8] c"0\00" +@.str924 = private unnamed_addr constant [5 x i8] c"void\00" +@.str925 = private unnamed_addr constant [5 x i8] c"load\00" +@.str926 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" +@.str927 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str928 = private unnamed_addr constant [5 x i8] c"quit\00" +@.str929 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" +@.str930 = private unnamed_addr constant [2 x i8] c"0\00" +@.str931 = private unnamed_addr constant [5 x i8] c"void\00" +@.str932 = private unnamed_addr constant [4 x i8] c"len\00" +@.str933 = private unnamed_addr constant [5 x i8] c"push\00" +@.str934 = private unnamed_addr constant [3 x i8] c"fx\00" +@.str935 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str936 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str937 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str938 = private unnamed_addr constant [4 x i8] c"flr\00" +@.str939 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str940 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str941 = private unnamed_addr constant [4 x i8] c"int\00" +@.str942 = private unnamed_addr constant [4 x i8] c"rt_\00" +@.str943 = private unnamed_addr constant [18 x i8] c"unknown function \00" +@.str944 = private unnamed_addr constant [3 x i8] c" \00" +@.str945 = private unnamed_addr constant [2 x i8] c"0\00" +@.str946 = private unnamed_addr constant [5 x i8] c"void\00" +@.str947 = private unnamed_addr constant [4 x i8] c" = \00" +@.str948 = private unnamed_addr constant [6 x i8] c"call \00" +@.str949 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str950 = private unnamed_addr constant [2 x i8] c"(\00" +@.str951 = private unnamed_addr constant [3 x i8] c", \00" +@.str952 = private unnamed_addr constant [2 x i8] c" \00" +@.str953 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str954 = private unnamed_addr constant [2 x i8] c"0\00" +@.str955 = private unnamed_addr constant [4 x i8] c"int\00" +@.str956 = private unnamed_addr constant [4 x i8] c"int\00" +@.str957 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str958 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str959 = private unnamed_addr constant [5 x i8] c"null\00" +@.str960 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str961 = private unnamed_addr constant [4 x i8] c"str\00" +@.str962 = private unnamed_addr constant [4 x i8] c"int\00" +@.str963 = private unnamed_addr constant [6 x i8] c"load \00" +@.str964 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" +@.str965 = private unnamed_addr constant [4 x i8] c"int\00" +@.str966 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" +@.str967 = private unnamed_addr constant [4 x i8] c"int\00" +@.str968 = private unnamed_addr constant [2 x i8] c"-\00" +@.str969 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str970 = private unnamed_addr constant [4 x i8] c"int\00" +@.str971 = private unnamed_addr constant [2 x i8] c"~\00" +@.str972 = private unnamed_addr constant [9 x i8] c"xor i32 \00" +@.str973 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str974 = private unnamed_addr constant [4 x i8] c"int\00" +@.str975 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str976 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str977 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str978 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str979 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str980 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" +@.str981 = private unnamed_addr constant [2 x i8] c"0\00" +@.str982 = private unnamed_addr constant [4 x i8] c"int\00" +@.str983 = private unnamed_addr constant [9 x i8] c" store \00" +@.str984 = private unnamed_addr constant [2 x i8] c" \00" +@.str985 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str986 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str987 = private unnamed_addr constant [2 x i8] c"0\00" @.str988 = private unnamed_addr constant [4 x i8] c"int\00" -@.str989 = private unnamed_addr constant [6 x i8] c"fcond\00" -@.str990 = private unnamed_addr constant [6 x i8] c"fbody\00" -@.str991 = private unnamed_addr constant [6 x i8] c"fcont\00" -@.str992 = private unnamed_addr constant [5 x i8] c"fend\00" -@.str993 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str994 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str995 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str996 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str997 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str998 = private unnamed_addr constant [3 x i8] c", \00" -@.str999 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1000 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1001 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1002 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1003 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1004 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1005 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1006 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1007 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1008 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1009 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1010 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1011 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1012 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1013 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1014 = private unnamed_addr constant [8 x i8] c"%retval\00" -@.str1015 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1016 = private unnamed_addr constant [2 x i8] c"_\00" -@.str1017 = private unnamed_addr constant [5 x i8] c"mend\00" -@.str1018 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1019 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1020 = private unnamed_addr constant [3 x i8] c", \00" -@.str1021 = private unnamed_addr constant [7 x i8] c"or i1 \00" -@.str1022 = private unnamed_addr constant [3 x i8] c", \00" -@.str1023 = private unnamed_addr constant [6 x i8] c"mbody\00" -@.str1024 = private unnamed_addr constant [5 x i8] c"marm\00" -@.str1025 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1026 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1027 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1028 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1029 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1030 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1031 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1032 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1033 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1034 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1035 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1036 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1037 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1038 = private unnamed_addr constant [5 x i8] c"null\00" +@.str989 = private unnamed_addr constant [29 x i8] c"cannot assign to immutable '\00" +@.str990 = private unnamed_addr constant [41 x i8] c"' (declared with let; use var) \E2\80\94 line \00" +@.str991 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" +@.str992 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str993 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" +@.str994 = private unnamed_addr constant [2 x i8] c"=\00" +@.str995 = private unnamed_addr constant [6 x i8] c"load \00" +@.str996 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str997 = private unnamed_addr constant [4 x i8] c"add\00" +@.str998 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str999 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str1000 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str1001 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str1002 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str1003 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str1004 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str1005 = private unnamed_addr constant [3 x i8] c", \00" +@.str1006 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1007 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1008 = private unnamed_addr constant [5 x i8] c"then\00" +@.str1009 = private unnamed_addr constant [5 x i8] c"else\00" +@.str1010 = private unnamed_addr constant [6 x i8] c"ifend\00" +@.str1011 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1012 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1013 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1014 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1015 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1016 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1017 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1018 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1019 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1020 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1021 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1022 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1023 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1024 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1025 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1026 = private unnamed_addr constant [6 x i8] c"wcond\00" +@.str1027 = private unnamed_addr constant [6 x i8] c"wbody\00" +@.str1028 = private unnamed_addr constant [5 x i8] c"wend\00" +@.str1029 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1030 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1031 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1032 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1033 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1034 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1035 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1036 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1037 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1038 = private unnamed_addr constant [3 x i8] c":\0A\00" @.str1039 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str1040 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1041 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1042 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1043 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" -@.str1044 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" -@.str1045 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" -@.str1046 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" -@.str1047 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" -@.str1048 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1049 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" -@.str1050 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1051 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" -@.str1052 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1053 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" -@.str1054 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str1055 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1056 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1057 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" -@.str1058 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str1059 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1060 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" -@.str1061 = private unnamed_addr constant [5 x i8] c"@ME_\00" -@.str1062 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" -@.str1063 = private unnamed_addr constant [5 x i8] c"@HE_\00" -@.str1064 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" -@.str1065 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" -@.str1066 = private unnamed_addr constant [3 x i8] c"%h\00" -@.str1067 = private unnamed_addr constant [3 x i8] c" \00" -@.str1068 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1069 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1070 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str1071 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" -@.str1072 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1073 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" -@.str1074 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" -@.str1075 = private unnamed_addr constant [37 x i8] c" store i32 0, ptr %k\0A ret void\0A}\0A\0A\00" -@.str1076 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" -@.str1077 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1078 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" -@.str1079 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" -@.str1080 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" -@.str1081 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" -@.str1082 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1083 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1084 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" -@.str1085 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" -@.str1086 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1087 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" -@.str1088 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" -@.str1089 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" -@.str1090 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" -@.str1091 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1092 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str1093 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" -@.str1094 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1095 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1096 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1097 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" -@.str1098 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" -@.str1099 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" -@.str1100 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1101 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1102 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" -@.str1103 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1104 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1105 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1106 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" -@.str1107 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" -@.str1108 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" -@.str1109 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1110 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1111 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1112 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1113 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1114 = private unnamed_addr constant [6 x i8] c"qcond\00" -@.str1115 = private unnamed_addr constant [6 x i8] c"qbody\00" -@.str1116 = private unnamed_addr constant [6 x i8] c"qnext\00" -@.str1117 = private unnamed_addr constant [5 x i8] c"qend\00" -@.str1118 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1119 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1120 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1121 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1122 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" -@.str1123 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str1124 = private unnamed_addr constant [3 x i8] c", \00" -@.str1125 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1126 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1127 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1041 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1042 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1043 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1044 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1045 = private unnamed_addr constant [6 x i8] c"fcond\00" +@.str1046 = private unnamed_addr constant [6 x i8] c"fbody\00" +@.str1047 = private unnamed_addr constant [6 x i8] c"fcont\00" +@.str1048 = private unnamed_addr constant [5 x i8] c"fend\00" +@.str1049 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1050 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1051 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1052 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1053 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1054 = private unnamed_addr constant [3 x i8] c", \00" +@.str1055 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1056 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1057 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1058 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1059 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1060 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1061 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1062 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1063 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1064 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1065 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1066 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1067 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1068 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1069 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1070 = private unnamed_addr constant [8 x i8] c"%retval\00" +@.str1071 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1072 = private unnamed_addr constant [2 x i8] c"_\00" +@.str1073 = private unnamed_addr constant [5 x i8] c"mend\00" +@.str1074 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1075 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1076 = private unnamed_addr constant [3 x i8] c", \00" +@.str1077 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str1078 = private unnamed_addr constant [3 x i8] c", \00" +@.str1079 = private unnamed_addr constant [6 x i8] c"mbody\00" +@.str1080 = private unnamed_addr constant [5 x i8] c"marm\00" +@.str1081 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1082 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1083 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1084 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1085 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1086 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1087 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1088 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1089 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1090 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1091 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1092 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1093 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1094 = private unnamed_addr constant [5 x i8] c"null\00" +@.str1095 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1096 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1097 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1098 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1099 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" +@.str1100 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" +@.str1101 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" +@.str1102 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" +@.str1103 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" +@.str1104 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1105 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" +@.str1106 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1107 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" +@.str1108 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1109 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" +@.str1110 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str1111 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str1112 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1113 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" +@.str1114 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str1115 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str1116 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" +@.str1117 = private unnamed_addr constant [5 x i8] c"@ME_\00" +@.str1118 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" +@.str1119 = private unnamed_addr constant [5 x i8] c"@HE_\00" +@.str1120 = private unnamed_addr constant [26 x i8] c" = internal global i32 1\0A\00" +@.str1121 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" +@.str1122 = private unnamed_addr constant [3 x i8] c"%h\00" +@.str1123 = private unnamed_addr constant [3 x i8] c" \00" +@.str1124 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1125 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1126 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str1127 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" @.str1128 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1129 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1130 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1131 = private unnamed_addr constant [3 x i8] c" \00" -@.str1132 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1133 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" -@.str1134 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1135 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1136 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1137 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1138 = private unnamed_addr constant [3 x i8] c"qa\00" -@.str1139 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1140 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1141 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1142 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1143 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1144 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1145 = private unnamed_addr constant [3 x i8] c" \00" -@.str1146 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1147 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1148 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1149 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1150 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1151 = private unnamed_addr constant [3 x i8] c", \00" -@.str1152 = private unnamed_addr constant [19 x i8] c"load i32, ptr @ME_\00" -@.str1153 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1154 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1155 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str1156 = private unnamed_addr constant [3 x i8] c", \00" -@.str1157 = private unnamed_addr constant [3 x i8] c" \00" -@.str1158 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1159 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1160 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1161 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1162 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1163 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" -@.str1164 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1165 = private unnamed_addr constant [3 x i8] c"qt\00" -@.str1166 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1167 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1168 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1169 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1170 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1171 = private unnamed_addr constant [3 x i8] c" \00" -@.str1172 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1173 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1174 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1175 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1176 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1177 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1178 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1179 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1180 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1181 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1182 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1183 = private unnamed_addr constant [3 x i8] c"qw\00" -@.str1184 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1185 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1186 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1187 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1188 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1189 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1129 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" +@.str1130 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" +@.str1131 = private unnamed_addr constant [37 x i8] c" store i32 0, ptr %k\0A ret void\0A}\0A\0A\00" +@.str1132 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" +@.str1133 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str1134 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" +@.str1135 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" +@.str1136 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" +@.str1137 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" +@.str1138 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str1139 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str1140 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" +@.str1141 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" +@.str1142 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str1143 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" +@.str1144 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" +@.str1145 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" +@.str1146 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" +@.str1147 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str1148 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1149 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" +@.str1150 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str1151 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str1152 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str1153 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" +@.str1154 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" +@.str1155 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" +@.str1156 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str1157 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str1158 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" +@.str1159 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str1160 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str1161 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str1162 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" +@.str1163 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" +@.str1164 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" +@.str1165 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str1166 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str1167 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1168 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1169 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1170 = private unnamed_addr constant [6 x i8] c"qcond\00" +@.str1171 = private unnamed_addr constant [6 x i8] c"qbody\00" +@.str1172 = private unnamed_addr constant [6 x i8] c"qnext\00" +@.str1173 = private unnamed_addr constant [5 x i8] c"qend\00" +@.str1174 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1175 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1176 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1177 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1178 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" +@.str1179 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1180 = private unnamed_addr constant [3 x i8] c", \00" +@.str1181 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1182 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1183 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1184 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1185 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1186 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1187 = private unnamed_addr constant [3 x i8] c" \00" +@.str1188 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1189 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" @.str1190 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1191 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1192 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1193 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1194 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1195 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1196 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1197 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1198 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1199 = private unnamed_addr constant [25 x i8] c"spawn: unknown property \00" -@.str1200 = private unnamed_addr constant [3 x i8] c" \00" -@.str1201 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1202 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1203 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1191 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1192 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1193 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1194 = private unnamed_addr constant [3 x i8] c"qa\00" +@.str1195 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1196 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1197 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1198 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1199 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1200 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1201 = private unnamed_addr constant [3 x i8] c" \00" +@.str1202 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1203 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" @.str1204 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1205 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" -@.str1206 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1207 = private unnamed_addr constant [3 x i8] c" \00" -@.str1208 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1209 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1210 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1211 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1212 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1205 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1206 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1207 = private unnamed_addr constant [3 x i8] c", \00" +@.str1208 = private unnamed_addr constant [19 x i8] c"load i32, ptr @ME_\00" +@.str1209 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1210 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1211 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str1212 = private unnamed_addr constant [3 x i8] c", \00" @.str1213 = private unnamed_addr constant [3 x i8] c" \00" -@.str1214 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1215 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1214 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1215 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" @.str1216 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str1217 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1218 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1219 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1220 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1221 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1222 = private unnamed_addr constant [2 x i8] c" \00" -@.str1223 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1224 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1225 = private unnamed_addr constant [3 x i8] c" \00" -@.str1226 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1227 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1228 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1229 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1230 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1231 = private unnamed_addr constant [2 x i8] c" \00" -@.str1232 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1233 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1234 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1235 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1236 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1237 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1238 = private unnamed_addr constant [3 x i8] c" \00" -@.str1239 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1240 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1241 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1242 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1218 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str1219 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" +@.str1220 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1221 = private unnamed_addr constant [3 x i8] c"qt\00" +@.str1222 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1223 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1224 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1225 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1226 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1227 = private unnamed_addr constant [3 x i8] c" \00" +@.str1228 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1229 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1230 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1231 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1232 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1233 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1234 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1235 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1236 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1237 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1238 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1239 = private unnamed_addr constant [3 x i8] c"qw\00" +@.str1240 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1241 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1242 = private unnamed_addr constant [10 x i8] c", label %\00" @.str1243 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1244 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1245 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1246 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1247 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1248 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" -@.str1249 = private unnamed_addr constant [3 x i8] c" \00" -@.str1250 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1251 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1252 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1253 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1254 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1255 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1244 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1245 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1246 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1247 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1248 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1249 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1250 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1251 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1252 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1253 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1254 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1255 = private unnamed_addr constant [25 x i8] c"spawn: unknown property \00" @.str1256 = private unnamed_addr constant [3 x i8] c" \00" @.str1257 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1258 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1259 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1260 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1261 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1262 = private unnamed_addr constant [3 x i8] c", \00" -@.str1263 = private unnamed_addr constant [3 x i8] c"dh\00" -@.str1264 = private unnamed_addr constant [4 x i8] c"dhn\00" -@.str1265 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1266 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1267 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1258 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1259 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1260 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1261 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" +@.str1262 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1263 = private unnamed_addr constant [3 x i8] c" \00" +@.str1264 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1265 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1266 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1267 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str1268 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1269 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" -@.str1270 = private unnamed_addr constant [6 x i8] c"(i32 \00" -@.str1271 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1272 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1269 = private unnamed_addr constant [3 x i8] c" \00" +@.str1270 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str1271 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1272 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str1273 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1274 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1275 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" -@.str1276 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1277 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1278 = private unnamed_addr constant [2 x i8] c"1\00" -@.str1279 = private unnamed_addr constant [3 x i8] c" \00" -@.str1280 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1281 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1282 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1283 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1284 = private unnamed_addr constant [12 x i8] c" store i8 \00" -@.str1285 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1286 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1287 = private unnamed_addr constant [3 x i8] c" \00" -@.str1288 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1289 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1290 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1291 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1292 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1293 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1294 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1295 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1296 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1297 = private unnamed_addr constant [5 x i8] c"@HE_\00" -@.str1298 = private unnamed_addr constant [5 x i8] c"@ME_\00" -@.str1299 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1300 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1301 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1302 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1303 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1304 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str1305 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" -@.str1306 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" -@.str1307 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str1308 = private unnamed_addr constant [19 x i8] c"load i32, ptr @HE_\00" -@.str1309 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1310 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1311 = private unnamed_addr constant [5 x i8] c"hrun\00" -@.str1312 = private unnamed_addr constant [6 x i8] c"hskip\00" -@.str1313 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1314 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1315 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1316 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1317 = private unnamed_addr constant [20 x i8] c":\0A call void @sys_\00" -@.str1318 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str1319 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1320 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1321 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1322 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1323 = private unnamed_addr constant [3 x i8] c"%e\00" -@.str1324 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1325 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str1326 = private unnamed_addr constant [25 x i8] c"define void @on_despawn_\00" -@.str1327 = private unnamed_addr constant [19 x i8] c"(i32 %e) {\0Aentry:\0A\00" -@.str1328 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str1329 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str1330 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str1331 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str1332 = private unnamed_addr constant [8 x i8] c"rt_init\00" -@.str1333 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" -@.str1334 = private unnamed_addr constant [6 x i8] c"Start\00" -@.str1335 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str1336 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" -@.str1337 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" -@.str1338 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1339 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1340 = private unnamed_addr constant [11 x i8] c"rt_running\00" -@.str1341 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" -@.str1342 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1343 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1344 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str1345 = private unnamed_addr constant [3 x i8] c", \00" -@.str1346 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1347 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str1348 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1349 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str1350 = private unnamed_addr constant [7 x i8] c"body:\0A\00" -@.str1351 = private unnamed_addr constant [8 x i8] c"rt_poll\00" -@.str1352 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" -@.str1353 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1354 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" -@.str1355 = private unnamed_addr constant [6 x i8] c"Input\00" -@.str1356 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" -@.str1357 = private unnamed_addr constant [7 x i8] c"Update\00" -@.str1358 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" -@.str1359 = private unnamed_addr constant [7 x i8] c"Render\00" -@.str1360 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str1361 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str1362 = private unnamed_addr constant [7 x i8] c"OnQuit\00" -@.str1363 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" -@.str1364 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" -@.str1365 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" -@.str1366 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" -@.str1367 = private unnamed_addr constant [2 x i8] c")\00" -@.str1368 = private unnamed_addr constant [6 x i8] c"smend\00" -@.str1369 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1370 = private unnamed_addr constant [3 x i8] c", \00" -@.str1371 = private unnamed_addr constant [6 x i8] c"sbody\00" -@.str1372 = private unnamed_addr constant [5 x i8] c"sarm\00" -@.str1373 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1374 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1375 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1274 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1275 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1276 = private unnamed_addr constant [5 x i8] c"null\00" +@.str1277 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1278 = private unnamed_addr constant [2 x i8] c" \00" +@.str1279 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1280 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1281 = private unnamed_addr constant [3 x i8] c" \00" +@.str1282 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str1283 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1284 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1285 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1286 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1287 = private unnamed_addr constant [2 x i8] c" \00" +@.str1288 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1289 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1290 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1291 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1292 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1293 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1294 = private unnamed_addr constant [3 x i8] c" \00" +@.str1295 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1296 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1297 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1298 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1299 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1300 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1301 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1302 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1303 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1304 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" +@.str1305 = private unnamed_addr constant [3 x i8] c" \00" +@.str1306 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1307 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str1308 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1309 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1310 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1311 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1312 = private unnamed_addr constant [3 x i8] c" \00" +@.str1313 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1314 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str1315 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1316 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1317 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1318 = private unnamed_addr constant [3 x i8] c", \00" +@.str1319 = private unnamed_addr constant [3 x i8] c"dh\00" +@.str1320 = private unnamed_addr constant [4 x i8] c"dhn\00" +@.str1321 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1322 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1323 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1324 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1325 = private unnamed_addr constant [27 x i8] c":\0A call void @on_despawn_\00" +@.str1326 = private unnamed_addr constant [6 x i8] c"(i32 \00" +@.str1327 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1328 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1329 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1330 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1331 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" +@.str1332 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1333 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1334 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1335 = private unnamed_addr constant [3 x i8] c" \00" +@.str1336 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1337 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1338 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1339 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1340 = private unnamed_addr constant [12 x i8] c" store i8 \00" +@.str1341 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1342 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1343 = private unnamed_addr constant [3 x i8] c" \00" +@.str1344 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1345 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1346 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1347 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1348 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1349 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1350 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1351 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1352 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1353 = private unnamed_addr constant [5 x i8] c"@HE_\00" +@.str1354 = private unnamed_addr constant [5 x i8] c"@ME_\00" +@.str1355 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1356 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1357 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1358 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1359 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1360 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str1361 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" +@.str1362 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" +@.str1363 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str1364 = private unnamed_addr constant [19 x i8] c"load i32, ptr @HE_\00" +@.str1365 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1366 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1367 = private unnamed_addr constant [5 x i8] c"hrun\00" +@.str1368 = private unnamed_addr constant [6 x i8] c"hskip\00" +@.str1369 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1370 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1371 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1372 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1373 = private unnamed_addr constant [20 x i8] c":\0A call void @sys_\00" +@.str1374 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str1375 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str1376 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str1377 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1378 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1379 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1380 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1381 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1382 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1383 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1384 = private unnamed_addr constant [27 x i8] c"'become' outside a machine\00" -@.str1385 = private unnamed_addr constant [18 x i8] c"become: no state \00" -@.str1386 = private unnamed_addr constant [32 x i8] c" call void @fn_rt_set_reg(i32 \00" -@.str1387 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1388 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1389 = private unnamed_addr constant [4 x i8] c"%io\00" -@.str1390 = private unnamed_addr constant [3 x i8] c" \00" -@.str1391 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" -@.str1392 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str1393 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str1394 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" -@.str1395 = private unnamed_addr constant [8 x i8] c"@L_entc\00" -@.str1396 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1397 = private unnamed_addr constant [9 x i8] c"@L_freen\00" -@.str1398 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1399 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" -@.str1400 = private unnamed_addr constant [5 x i8] c", 4\0A\00" -@.str1401 = private unnamed_addr constant [9 x i8] c"@L_alive\00" -@.str1402 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1403 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" -@.str1404 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1405 = private unnamed_addr constant [8 x i8] c"@L_kind\00" -@.str1406 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1407 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str1408 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1409 = private unnamed_addr constant [5 x i8] c"%csz\00" -@.str1410 = private unnamed_addr constant [3 x i8] c" \00" -@.str1411 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" -@.str1412 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" -@.str1413 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" -@.str1414 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str1415 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str1416 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" -@.str1417 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" -@.str1418 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" -@.str1419 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" -@.str1420 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" -@.str1421 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" -@.str1422 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" -@.str1423 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str1424 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" -@.str1425 = private unnamed_addr constant [7 x i8] c"fwrite\00" -@.str1426 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" -@.str1427 = private unnamed_addr constant [68 x i8] c" %c = call i32 @fclose(ptr %f)\0A br label %out\0Aout:\0A ret void\0A}\0A\0A\00" -@.str1428 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" -@.str1429 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" -@.str1430 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str1431 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" -@.str1432 = private unnamed_addr constant [6 x i8] c"fread\00" -@.str1433 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" -@.str1434 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" -@.str1435 = private unnamed_addr constant [6 x i8] c"panel\00" -@.str1436 = private unnamed_addr constant [4 x i8] c"col\00" -@.str1437 = private unnamed_addr constant [4 x i8] c"row\00" -@.str1438 = private unnamed_addr constant [6 x i8] c"label\00" -@.str1439 = private unnamed_addr constant [7 x i8] c"button\00" -@.str1440 = private unnamed_addr constant [6 x i8] c"image\00" -@.str1441 = private unnamed_addr constant [7 x i8] c"spacer\00" -@.str1442 = private unnamed_addr constant [3 x i8] c"id\00" -@.str1443 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" -@.str1444 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1445 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1446 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1447 = private unnamed_addr constant [2 x i8] c"w\00" -@.str1448 = private unnamed_addr constant [2 x i8] c"h\00" -@.str1449 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1450 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1451 = private unnamed_addr constant [4 x i8] c"pad\00" -@.str1452 = private unnamed_addr constant [4 x i8] c"gap\00" -@.str1453 = private unnamed_addr constant [3 x i8] c"bg\00" -@.str1454 = private unnamed_addr constant [3 x i8] c"fg\00" -@.str1455 = private unnamed_addr constant [7 x i8] c"border\00" -@.str1456 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str1457 = private unnamed_addr constant [5 x i8] c"font\00" -@.str1458 = private unnamed_addr constant [5 x i8] c"size\00" -@.str1459 = private unnamed_addr constant [6 x i8] c"inset\00" -@.str1460 = private unnamed_addr constant [6 x i8] c"focus\00" -@.str1461 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" -@.str1462 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1463 = private unnamed_addr constant [2 x i8] c"1\00" -@.str1464 = private unnamed_addr constant [3 x i8] c"id\00" -@.str1465 = private unnamed_addr constant [5 x i8] c"text\00" -@.str1466 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" -@.str1467 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1468 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1469 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str1470 = private unnamed_addr constant [6 x i8] c"image\00" -@.str1471 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" -@.str1472 = private unnamed_addr constant [2 x i8] c")\00" -@.str1473 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str1474 = private unnamed_addr constant [6 x i8] c"align\00" -@.str1475 = private unnamed_addr constant [7 x i8] c"center\00" -@.str1476 = private unnamed_addr constant [4 x i8] c"end\00" -@.str1477 = private unnamed_addr constant [2 x i8] c"1\00" -@.str1478 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" -@.str1479 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1480 = private unnamed_addr constant [3 x i8] c", \00" -@.str1481 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str1482 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1483 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" -@.str1484 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1485 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1486 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str1487 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1488 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1489 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1490 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str1491 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1492 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str1493 = private unnamed_addr constant [6 x i8] c"load \00" -@.str1494 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" -@.str1495 = private unnamed_addr constant [7 x i8] c" ret \00" -@.str1496 = private unnamed_addr constant [2 x i8] c" \00" -@.str1497 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1498 = private unnamed_addr constant [8 x i8] c"define \00" -@.str1499 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str1500 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1501 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" -@.str1502 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str1503 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1504 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" -@.str1505 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str1506 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str1507 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" -@.str1508 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1509 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str1510 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" -@.str1511 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str1512 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1513 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str1514 = private unnamed_addr constant [3 x i8] c"}\0A\00" -@.str1515 = private unnamed_addr constant [3 x i8] c"wb\00" -@.str1516 = private unnamed_addr constant [7 x i8] c".ludic\00" -@.str1517 = private unnamed_addr constant [2 x i8] c"/\00" -@.str1518 = private unnamed_addr constant [6 x i8] c"ludic\00" -@.str1519 = private unnamed_addr constant [11 x i8] c"--windowed\00" -@.str1520 = private unnamed_addr constant [11 x i8] c"--headless\00" -@.str1521 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" -@.str1522 = private unnamed_addr constant [6 x i8] c"--fmt\00" -@.str1523 = private unnamed_addr constant [13 x i8] c"--save-temps\00" -@.str1524 = private unnamed_addr constant [6 x i8] c"--run\00" -@.str1525 = private unnamed_addr constant [3 x i8] c"-o\00" -@.str1526 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" -@.str1527 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1528 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" -@.str1529 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" -@.str1530 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" -@.str1531 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" -@.str1532 = private unnamed_addr constant [4 x i8] c".ll\00" -@.str1533 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" -@.str1534 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" -@.str1535 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str1536 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" -@.str1537 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" -@.str1538 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" -@.str1539 = private unnamed_addr constant [2 x i8] c" \00" -@.str1540 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" -@.str1541 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str1542 = private unnamed_addr constant [7 x i8] c"rm -f \00" -@.str1543 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" -define i32 @fn_streq(ptr %arg_a, ptr %arg_b) { +@.str1378 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1379 = private unnamed_addr constant [3 x i8] c"%e\00" +@.str1380 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1381 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str1382 = private unnamed_addr constant [25 x i8] c"define void @on_despawn_\00" +@.str1383 = private unnamed_addr constant [19 x i8] c"(i32 %e) {\0Aentry:\0A\00" +@.str1384 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str1385 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str1386 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str1387 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str1388 = private unnamed_addr constant [8 x i8] c"rt_init\00" +@.str1389 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" +@.str1390 = private unnamed_addr constant [6 x i8] c"Start\00" +@.str1391 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str1392 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" +@.str1393 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" +@.str1394 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1395 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1396 = private unnamed_addr constant [11 x i8] c"rt_running\00" +@.str1397 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" +@.str1398 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1399 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1400 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str1401 = private unnamed_addr constant [3 x i8] c", \00" +@.str1402 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1403 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str1404 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1405 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str1406 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1407 = private unnamed_addr constant [8 x i8] c"rt_poll\00" +@.str1408 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" +@.str1409 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1410 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" +@.str1411 = private unnamed_addr constant [6 x i8] c"Input\00" +@.str1412 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" +@.str1413 = private unnamed_addr constant [7 x i8] c"Update\00" +@.str1414 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" +@.str1415 = private unnamed_addr constant [7 x i8] c"Render\00" +@.str1416 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str1417 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1418 = private unnamed_addr constant [7 x i8] c"OnQuit\00" +@.str1419 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" +@.str1420 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" +@.str1421 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" +@.str1422 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" +@.str1423 = private unnamed_addr constant [2 x i8] c")\00" +@.str1424 = private unnamed_addr constant [6 x i8] c"smend\00" +@.str1425 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1426 = private unnamed_addr constant [3 x i8] c", \00" +@.str1427 = private unnamed_addr constant [6 x i8] c"sbody\00" +@.str1428 = private unnamed_addr constant [5 x i8] c"sarm\00" +@.str1429 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1430 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1431 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1432 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1433 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1434 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1435 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1436 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1437 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1438 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1439 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1440 = private unnamed_addr constant [27 x i8] c"'become' outside a machine\00" +@.str1441 = private unnamed_addr constant [18 x i8] c"become: no state \00" +@.str1442 = private unnamed_addr constant [32 x i8] c" call void @fn_rt_set_reg(i32 \00" +@.str1443 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1444 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1445 = private unnamed_addr constant [4 x i8] c"%io\00" +@.str1446 = private unnamed_addr constant [3 x i8] c" \00" +@.str1447 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" +@.str1448 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str1449 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str1450 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" +@.str1451 = private unnamed_addr constant [8 x i8] c"@L_entc\00" +@.str1452 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1453 = private unnamed_addr constant [9 x i8] c"@L_freen\00" +@.str1454 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1455 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" +@.str1456 = private unnamed_addr constant [5 x i8] c", 4\0A\00" +@.str1457 = private unnamed_addr constant [9 x i8] c"@L_alive\00" +@.str1458 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1459 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" +@.str1460 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1461 = private unnamed_addr constant [8 x i8] c"@L_kind\00" +@.str1462 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1463 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str1464 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1465 = private unnamed_addr constant [5 x i8] c"%csz\00" +@.str1466 = private unnamed_addr constant [3 x i8] c" \00" +@.str1467 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" +@.str1468 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" +@.str1469 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" +@.str1470 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str1471 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str1472 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" +@.str1473 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" +@.str1474 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" +@.str1475 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" +@.str1476 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" +@.str1477 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" +@.str1478 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" +@.str1479 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str1480 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" +@.str1481 = private unnamed_addr constant [7 x i8] c"fwrite\00" +@.str1482 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" +@.str1483 = private unnamed_addr constant [68 x i8] c" %c = call i32 @fclose(ptr %f)\0A br label %out\0Aout:\0A ret void\0A}\0A\0A\00" +@.str1484 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" +@.str1485 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" +@.str1486 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str1487 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" +@.str1488 = private unnamed_addr constant [6 x i8] c"fread\00" +@.str1489 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" +@.str1490 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" +@.str1491 = private unnamed_addr constant [6 x i8] c"panel\00" +@.str1492 = private unnamed_addr constant [4 x i8] c"col\00" +@.str1493 = private unnamed_addr constant [4 x i8] c"row\00" +@.str1494 = private unnamed_addr constant [6 x i8] c"label\00" +@.str1495 = private unnamed_addr constant [7 x i8] c"button\00" +@.str1496 = private unnamed_addr constant [6 x i8] c"image\00" +@.str1497 = private unnamed_addr constant [7 x i8] c"spacer\00" +@.str1498 = private unnamed_addr constant [3 x i8] c"id\00" +@.str1499 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" +@.str1500 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1501 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1502 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1503 = private unnamed_addr constant [2 x i8] c"w\00" +@.str1504 = private unnamed_addr constant [2 x i8] c"h\00" +@.str1505 = private unnamed_addr constant [2 x i8] c"x\00" +@.str1506 = private unnamed_addr constant [2 x i8] c"y\00" +@.str1507 = private unnamed_addr constant [4 x i8] c"pad\00" +@.str1508 = private unnamed_addr constant [4 x i8] c"gap\00" +@.str1509 = private unnamed_addr constant [3 x i8] c"bg\00" +@.str1510 = private unnamed_addr constant [3 x i8] c"fg\00" +@.str1511 = private unnamed_addr constant [7 x i8] c"border\00" +@.str1512 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str1513 = private unnamed_addr constant [5 x i8] c"font\00" +@.str1514 = private unnamed_addr constant [5 x i8] c"size\00" +@.str1515 = private unnamed_addr constant [6 x i8] c"inset\00" +@.str1516 = private unnamed_addr constant [6 x i8] c"focus\00" +@.str1517 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" +@.str1518 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1519 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1520 = private unnamed_addr constant [3 x i8] c"id\00" +@.str1521 = private unnamed_addr constant [5 x i8] c"text\00" +@.str1522 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" +@.str1523 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1524 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1525 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str1526 = private unnamed_addr constant [6 x i8] c"image\00" +@.str1527 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" +@.str1528 = private unnamed_addr constant [2 x i8] c")\00" +@.str1529 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str1530 = private unnamed_addr constant [6 x i8] c"align\00" +@.str1531 = private unnamed_addr constant [7 x i8] c"center\00" +@.str1532 = private unnamed_addr constant [4 x i8] c"end\00" +@.str1533 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1534 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" +@.str1535 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str1536 = private unnamed_addr constant [3 x i8] c", \00" +@.str1537 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str1538 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1539 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" +@.str1540 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1541 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1542 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str1543 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1544 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1545 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1546 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str1547 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1548 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str1549 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1550 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" +@.str1551 = private unnamed_addr constant [7 x i8] c" ret \00" +@.str1552 = private unnamed_addr constant [2 x i8] c" \00" +@.str1553 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1554 = private unnamed_addr constant [8 x i8] c"define \00" +@.str1555 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str1556 = private unnamed_addr constant [2 x i8] c"(\00" +@.str1557 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" +@.str1558 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str1559 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1560 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" +@.str1561 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str1562 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str1563 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" +@.str1564 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1565 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str1566 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" +@.str1567 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str1568 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1569 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str1570 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1571 = private unnamed_addr constant [3 x i8] c"wb\00" +@.str1572 = private unnamed_addr constant [7 x i8] c".ludic\00" +@.str1573 = private unnamed_addr constant [2 x i8] c"/\00" +@.str1574 = private unnamed_addr constant [6 x i8] c"ludic\00" +@.str1575 = private unnamed_addr constant [11 x i8] c"--windowed\00" +@.str1576 = private unnamed_addr constant [11 x i8] c"--headless\00" +@.str1577 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" +@.str1578 = private unnamed_addr constant [6 x i8] c"--fmt\00" +@.str1579 = private unnamed_addr constant [13 x i8] c"--save-temps\00" +@.str1580 = private unnamed_addr constant [6 x i8] c"--run\00" +@.str1581 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str1582 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" +@.str1583 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1584 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" +@.str1585 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" +@.str1586 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" +@.str1587 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str1588 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str1589 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" +@.str1590 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" +@.str1591 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str1592 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" +@.str1593 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" +@.str1594 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" +@.str1595 = private unnamed_addr constant [2 x i8] c" \00" +@.str1596 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" +@.str1597 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str1598 = private unnamed_addr constant [7 x i8] c"rm -f \00" +@.str1599 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" +define i32 @fn_str_eq(ptr %a, ptr %b) { entry: - %retval = alloca i32 - %t0 = alloca ptr - %t1 = alloca ptr - %t2 = alloca i32 - %t9 = alloca i32 - %t15 = alloca i32 - store ptr %arg_a, ptr %t0 - store ptr %arg_b, ptr %t1 - store i32 0, ptr %t2 - br label %wcond0 -wcond0: - %t3 = icmp ne i32 1, 0 - br i1 %t3, label %wbody1, label %wend2 -wbody1: - %t4 = load ptr, ptr %t0 - %t5 = load i32, ptr %t2 - %t6 = getelementptr inbounds i8, ptr %t4, i32 %t5 - %t7 = load i8, ptr %t6 - %t8 = zext i8 %t7 to i32 - store i32 %t8, ptr %t9 - %t10 = load ptr, ptr %t1 - %t11 = load i32, ptr %t2 - %t12 = getelementptr inbounds i8, ptr %t10, i32 %t11 - %t13 = load i8, ptr %t12 - %t14 = zext i8 %t13 to i32 - store i32 %t14, ptr %t15 - %t16 = load i32, ptr %t9 - %t17 = load i32, ptr %t15 - %t18 = icmp ne i32 %t16, %t17 - %t19 = zext i1 %t18 to i32 - %t20 = icmp ne i32 %t19, 0 - br i1 %t20, label %then3, label %ifend5 -then3: - store i32 0, ptr %retval - br label %ret -ifend5: - %t21 = load i32, ptr %t9 - %t22 = icmp eq i32 %t21, 0 - %t23 = zext i1 %t22 to i32 - %t24 = icmp ne i32 %t23, 0 - br i1 %t24, label %then6, label %ifend8 -then6: - store i32 1, ptr %retval - br label %ret -ifend8: - %t25 = load i32, ptr %t2 - %t26 = add i32 %t25, 1 - store i32 %t26, ptr %t2 - br label %wcond0 -wend2: - store i32 0, ptr %retval - br label %ret -ret: - %t27 = load i32, ptr %retval - ret i32 %t27 + br label %loop +loop: + %i = phi i32 [ 0, %entry ], [ %i1, %cont ] + %pa = getelementptr inbounds i8, ptr %a, i32 %i + %pb = getelementptr inbounds i8, ptr %b, i32 %i + %ca = load i8, ptr %pa + %cb = load i8, ptr %pb + %df = icmp ne i8 %ca, %cb + br i1 %df, label %ret0, label %chk +chk: + %zt = icmp eq i8 %ca, 0 + br i1 %zt, label %ret1, label %cont +cont: + %i1 = add i32 %i, 1 + br label %loop +ret1: + ret i32 1 +ret0: + ret i32 0 +} +define ptr @fn_str_concat(ptr %a, ptr %b) { +entry: + br label %al +al: + %ia = phi i32 [ 0, %entry ], [ %ia1, %alb ] + %pa = getelementptr inbounds i8, ptr %a, i32 %ia + %cca = load i8, ptr %pa + %za = icmp eq i8 %cca, 0 + br i1 %za, label %bl0, label %alb +alb: + %ia1 = add i32 %ia, 1 + br label %al +bl0: + br label %bl +bl: + %ib = phi i32 [ 0, %bl0 ], [ %ib1, %blb ] + %pb = getelementptr inbounds i8, ptr %b, i32 %ib + %ccb = load i8, ptr %pb + %zb = icmp eq i8 %ccb, 0 + br i1 %zb, label %alloc, label %blb +blb: + %ib1 = add i32 %ib, 1 + br label %bl +alloc: + %sum = add i32 %ia, %ib + %sz = add i32 %sum, 1 + %sz64 = sext i32 %sz to i64 + %out = call ptr @malloc(i64 %sz64) + br label %c1 +c1: + %i = phi i32 [ 0, %alloc ], [ %i1, %c1b ] + %d1 = icmp slt i32 %i, %ia + br i1 %d1, label %c1b, label %c2i +c1b: + %s1 = getelementptr inbounds i8, ptr %a, i32 %i + %v1 = load i8, ptr %s1 + %o1 = getelementptr inbounds i8, ptr %out, i32 %i + store i8 %v1, ptr %o1 + %i1 = add i32 %i, 1 + br label %c1 +c2i: + br label %c2 +c2: + %j = phi i32 [ 0, %c2i ], [ %j1, %c2b ] + %d2 = icmp slt i32 %j, %ib + br i1 %d2, label %c2b, label %fin +c2b: + %s2 = getelementptr inbounds i8, ptr %b, i32 %j + %v2 = load i8, ptr %s2 + %oj = add i32 %ia, %j + %o2 = getelementptr inbounds i8, ptr %out, i32 %oj + store i8 %v2, ptr %o2 + %j1 = add i32 %j, 1 + br label %c2 +fin: + %pe = getelementptr inbounds i8, ptr %out, i32 %sum + store i8 0, ptr %pe + ret ptr %out } - define i32 @fn_slen(ptr %arg_s) { entry: %retval = alloca i32 @@ -3848,7 +3927,7 @@ sc0: %t17 = getelementptr inbounds %Cmp_Tok, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %t17 %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_streq(ptr %t18, ptr %t19) + %t20 = call i32 @fn_str_eq(ptr %t18, ptr %t19) %t21 = icmp ne i32 %t20, 0 %t22 = zext i1 %t21 to i32 store i32 %t22, ptr %t8 @@ -3890,7 +3969,7 @@ sc0: %t17 = getelementptr inbounds %Cmp_Tok, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %t17 %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_streq(ptr %t18, ptr %t19) + %t20 = call i32 @fn_str_eq(ptr %t18, ptr %t19) %t21 = icmp ne i32 %t20, 0 %t22 = zext i1 %t21 to i32 store i32 %t22, ptr %t8 @@ -4281,7 +4360,7 @@ then9: %t61 = load ptr, ptr %t6 %t62 = getelementptr inbounds %Cmp_Tok, ptr %t61, i32 0, i32 1 %t63 = load ptr, ptr %t62 - %t64 = call i32 @fn_streq(ptr %t63, ptr @.str10) + %t64 = call i32 @fn_str_eq(ptr %t63, ptr @.str10) %t65 = icmp ne i32 %t64, 0 br i1 %t65, label %then12, label %ifend14 then12: @@ -4300,7 +4379,7 @@ ifend14: %t73 = load ptr, ptr %t6 %t74 = getelementptr inbounds %Cmp_Tok, ptr %t73, i32 0, i32 1 %t75 = load ptr, ptr %t74 - %t76 = call i32 @fn_streq(ptr %t75, ptr @.str11) + %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str11) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then15, label %ifend17 then15: @@ -4319,7 +4398,7 @@ ifend17: %t85 = load ptr, ptr %t6 %t86 = getelementptr inbounds %Cmp_Tok, ptr %t85, i32 0, i32 1 %t87 = load ptr, ptr %t86 - %t88 = call i32 @fn_streq(ptr %t87, ptr @.str12) + %t88 = call i32 @fn_str_eq(ptr %t87, ptr @.str12) %t89 = icmp ne i32 %t88, 0 br i1 %t89, label %then18, label %ifend20 then18: @@ -4333,7 +4412,7 @@ ifend20: %t93 = load ptr, ptr %t6 %t94 = getelementptr inbounds %Cmp_Tok, ptr %t93, i32 0, i32 1 %t95 = load ptr, ptr %t94 - %t96 = call i32 @fn_streq(ptr %t95, ptr @.str13) + %t96 = call i32 @fn_str_eq(ptr %t95, ptr @.str13) %t97 = icmp ne i32 %t96, 0 br i1 %t97, label %then21, label %ifend23 then21: @@ -5154,7 +5233,7 @@ then0: %t14 = load ptr, ptr %t6 %t15 = getelementptr inbounds %Cmp_Tok, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 - %t17 = call i32 @fn_streq(ptr %t16, ptr @.str57) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str57) %t18 = icmp ne i32 %t17, 0 %t19 = zext i1 %t18 to i32 store i32 %t19, ptr %t13 @@ -5163,7 +5242,7 @@ sc3: %t20 = load ptr, ptr %t6 %t21 = getelementptr inbounds %Cmp_Tok, ptr %t20, i32 0, i32 1 %t22 = load ptr, ptr %t21 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str58) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str58) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t13 @@ -5177,7 +5256,7 @@ then5: %t29 = load ptr, ptr %t6 %t30 = getelementptr inbounds %Cmp_Tok, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str59) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str59) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then8, label %ifend10 then8: @@ -5241,7 +5320,7 @@ ifend7: %t69 = load ptr, ptr %t6 %t70 = getelementptr inbounds %Cmp_Tok, ptr %t69, i32 0, i32 1 %t71 = load ptr, ptr %t70 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str62) + %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str62) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then17, label %ifend19 then17: @@ -5290,7 +5369,7 @@ ifend19: %t102 = load ptr, ptr %t6 %t103 = getelementptr inbounds %Cmp_Tok, ptr %t102, i32 0, i32 1 %t104 = load ptr, ptr %t103 - %t105 = call i32 @fn_streq(ptr %t104, ptr @.str64) + %t105 = call i32 @fn_str_eq(ptr %t104, ptr @.str64) %t106 = icmp ne i32 %t105, 0 br i1 %t106, label %then25, label %ifend27 then25: @@ -5347,7 +5426,7 @@ ifend27: %t133 = load ptr, ptr %t6 %t134 = getelementptr inbounds %Cmp_Tok, ptr %t133, i32 0, i32 1 %t135 = load ptr, ptr %t134 - %t136 = call i32 @fn_streq(ptr %t135, ptr @.str67) + %t136 = call i32 @fn_str_eq(ptr %t135, ptr @.str67) %t137 = icmp ne i32 %t136, 0 br i1 %t137, label %then34, label %ifend36 then34: @@ -5371,7 +5450,7 @@ ifend36: %t149 = load ptr, ptr %t6 %t150 = getelementptr inbounds %Cmp_Tok, ptr %t149, i32 0, i32 1 %t151 = load ptr, ptr %t150 - %t152 = call i32 @fn_streq(ptr %t151, ptr @.str68) + %t152 = call i32 @fn_str_eq(ptr %t151, ptr @.str68) %t153 = icmp ne i32 %t152, 0 br i1 %t153, label %then37, label %ifend39 then37: @@ -5414,7 +5493,7 @@ ifend39: %t176 = load ptr, ptr %t6 %t177 = getelementptr inbounds %Cmp_Tok, ptr %t176, i32 0, i32 1 %t178 = load ptr, ptr %t177 - %t179 = call i32 @fn_streq(ptr %t178, ptr @.str71) + %t179 = call i32 @fn_str_eq(ptr %t178, ptr @.str71) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then43, label %ifend45 then43: @@ -5425,7 +5504,7 @@ ifend45: %t182 = load ptr, ptr %t6 %t183 = getelementptr inbounds %Cmp_Tok, ptr %t182, i32 0, i32 1 %t184 = load ptr, ptr %t183 - %t185 = call i32 @fn_streq(ptr %t184, ptr @.str72) + %t185 = call i32 @fn_str_eq(ptr %t184, ptr @.str72) %t186 = icmp ne i32 %t185, 0 br i1 %t186, label %then46, label %ifend48 then46: @@ -5534,7 +5613,7 @@ ifend48: %t248 = load ptr, ptr %t6 %t249 = getelementptr inbounds %Cmp_Tok, ptr %t248, i32 0, i32 1 %t250 = load ptr, ptr %t249 - %t251 = call i32 @fn_streq(ptr %t250, ptr @.str77) + %t251 = call i32 @fn_str_eq(ptr %t250, ptr @.str77) %t252 = icmp ne i32 %t251, 0 br i1 %t252, label %then60, label %ifend62 then60: @@ -5554,7 +5633,7 @@ ifend62: %t261 = load ptr, ptr %t6 %t262 = getelementptr inbounds %Cmp_Tok, ptr %t261, i32 0, i32 1 %t263 = load ptr, ptr %t262 - %t264 = call i32 @fn_streq(ptr %t263, ptr @.str78) + %t264 = call i32 @fn_str_eq(ptr %t263, ptr @.str78) %t265 = icmp ne i32 %t264, 0 br i1 %t265, label %then63, label %ifend65 then63: @@ -5574,7 +5653,7 @@ ifend65: %t275 = load ptr, ptr %t6 %t276 = getelementptr inbounds %Cmp_Tok, ptr %t275, i32 0, i32 1 %t277 = load ptr, ptr %t276 - %t278 = call i32 @fn_streq(ptr %t277, ptr @.str79) + %t278 = call i32 @fn_str_eq(ptr %t277, ptr @.str79) %t279 = icmp ne i32 %t278, 0 %t280 = zext i1 %t279 to i32 store i32 %t280, ptr %t274 @@ -5583,7 +5662,7 @@ sc66: %t281 = load ptr, ptr %t6 %t282 = getelementptr inbounds %Cmp_Tok, ptr %t281, i32 0, i32 1 %t283 = load ptr, ptr %t282 - %t284 = call i32 @fn_streq(ptr %t283, ptr @.str80) + %t284 = call i32 @fn_str_eq(ptr %t283, ptr @.str80) %t285 = icmp ne i32 %t284, 0 %t286 = zext i1 %t285 to i32 store i32 %t286, ptr %t274 @@ -5597,7 +5676,7 @@ then68: %t290 = load ptr, ptr %t6 %t291 = getelementptr inbounds %Cmp_Tok, ptr %t290, i32 0, i32 1 %t292 = load ptr, ptr %t291 - %t293 = call i32 @fn_streq(ptr %t292, ptr @.str81) + %t293 = call i32 @fn_str_eq(ptr %t292, ptr @.str81) %t294 = icmp ne i32 %t293, 0 br i1 %t294, label %then71, label %ifend73 then71: @@ -5637,7 +5716,7 @@ ifend70: %t313 = load ptr, ptr %t6 %t314 = getelementptr inbounds %Cmp_Tok, ptr %t313, i32 0, i32 1 %t315 = load ptr, ptr %t314 - %t316 = call i32 @fn_streq(ptr %t315, ptr @.str83) + %t316 = call i32 @fn_str_eq(ptr %t315, ptr @.str83) %t317 = icmp ne i32 %t316, 0 br i1 %t317, label %then77, label %ifend79 then77: @@ -5651,7 +5730,7 @@ ifend79: %t321 = load ptr, ptr %t6 %t322 = getelementptr inbounds %Cmp_Tok, ptr %t321, i32 0, i32 1 %t323 = load ptr, ptr %t322 - %t324 = call i32 @fn_streq(ptr %t323, ptr @.str84) + %t324 = call i32 @fn_str_eq(ptr %t323, ptr @.str84) %t325 = icmp ne i32 %t324, 0 br i1 %t325, label %then80, label %ifend82 then80: @@ -5665,7 +5744,7 @@ ifend82: %t329 = load ptr, ptr %t6 %t330 = getelementptr inbounds %Cmp_Tok, ptr %t329, i32 0, i32 1 %t331 = load ptr, ptr %t330 - %t332 = call i32 @fn_streq(ptr %t331, ptr @.str85) + %t332 = call i32 @fn_str_eq(ptr %t331, ptr @.str85) %t333 = icmp ne i32 %t332, 0 br i1 %t333, label %then83, label %ifend85 then83: @@ -6215,7 +6294,7 @@ then0: ifend2: %t10 = load ptr, ptr %t0 %t11 = load ptr, ptr %t1 - %t12 = call ptr @fn_sconcat(ptr %t10, ptr %t11) + %t12 = call ptr @fn_str_concat(ptr %t10, ptr %t11) store ptr %t12, ptr %retval br label %ret ret: @@ -6248,7 +6327,7 @@ wbody1: %t13 = getelementptr inbounds ptr, ptr %t11, i32 %t12 %t14 = load ptr, ptr %t13 %t15 = load ptr, ptr %t0 - %t16 = call i32 @fn_streq(ptr %t14, ptr %t15) + %t16 = call i32 @fn_str_eq(ptr %t14, ptr %t15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then3, label %ifend5 then3: @@ -6304,7 +6383,7 @@ wbody1: %t12 = call ptr @fn_eat_id() store ptr %t12, ptr %t13 %t14 = load ptr, ptr %t13 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str110) + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str110) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then3, label %else4 then3: @@ -6312,7 +6391,7 @@ then3: br label %ifend5 else4: %t17 = load ptr, ptr %t13 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str111) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str111) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then6, label %else7 then6: @@ -6321,7 +6400,7 @@ then6: br label %ifend8 else7: %t21 = load ptr, ptr %t13 - %t22 = call i32 @fn_streq(ptr %t21, ptr @.str112) + %t22 = call i32 @fn_str_eq(ptr %t21, ptr @.str112) %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then9, label %else10 then9: @@ -6332,7 +6411,7 @@ then9: br label %ifend11 else10: %t25 = load ptr, ptr %t13 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str115) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str115) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then12, label %else13 then12: @@ -6343,7 +6422,7 @@ then12: br label %ifend14 else13: %t29 = load ptr, ptr %t13 - %t30 = call i32 @fn_streq(ptr %t29, ptr @.str118) + %t30 = call i32 @fn_str_eq(ptr %t29, ptr @.str118) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then15, label %else16 then15: @@ -6354,7 +6433,7 @@ then15: br label %ifend17 else16: %t33 = load ptr, ptr %t13 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str121) + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str121) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then18, label %else19 then18: @@ -6365,7 +6444,7 @@ then18: br label %ifend20 else19: %t37 = load ptr, ptr %t13 - %t38 = call i32 @fn_streq(ptr %t37, ptr @.str124) + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str124) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then21, label %else22 then21: @@ -6376,7 +6455,7 @@ then21: br label %ifend23 else22: %t41 = load ptr, ptr %t13 - %t42 = call i32 @fn_streq(ptr %t41, ptr @.str127) + %t42 = call i32 @fn_str_eq(ptr %t41, ptr @.str127) %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %then24, label %else25 then24: @@ -6384,7 +6463,7 @@ then24: br label %ifend26 else25: %t44 = load ptr, ptr %t13 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str129) + %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str129) %t46 = icmp ne i32 %t45, 0 br i1 %t46, label %then27, label %else28 then27: @@ -7035,7 +7114,7 @@ put4: br i1 %t34, label %then5, label %ifend7 then5: %t35 = load ptr, ptr %t4 - %t36 = call ptr @fn_sconcat(ptr @.str147, ptr %t35) + %t36 = call ptr @fn_str_concat(ptr @.str147, ptr %t35) call void @fn_perr(ptr %t36) br label %ifend7 ifend7: @@ -7366,7 +7445,7 @@ then6: %t15 = call ptr @fn_eat_id() store ptr %t15, ptr %t16 %t17 = load ptr, ptr %t16 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str162) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str162) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then9, label %ifend11 then9: @@ -8014,7 +8093,7 @@ ifend5: store ptr %t11, ptr %t12 call void @fn_eat_op(ptr @.str190) %t13 = load ptr, ptr %t12 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str191) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str191) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then6, label %else7 then6: @@ -8145,7 +8224,7 @@ wend11: br label %ifend8 else7: %t98 = load ptr, ptr %t12 - %t99 = call i32 @fn_streq(ptr %t98, ptr @.str198) + %t99 = call i32 @fn_str_eq(ptr %t98, ptr @.str198) %t100 = icmp ne i32 %t99, 0 br i1 %t100, label %then22, label %else23 then22: @@ -8676,7 +8755,7 @@ sc5: %t44 = load ptr, ptr %t43 %t45 = getelementptr inbounds %Cmp_Tok, ptr %t44, i32 0, i32 1 %t46 = load ptr, ptr %t45 - %t47 = call i32 @fn_streq(ptr %t46, ptr @.str221) + %t47 = call i32 @fn_str_eq(ptr %t46, ptr @.str221) %t48 = icmp ne i32 %t47, 0 %t49 = zext i1 %t48 to i32 store i32 %t49, ptr %t8 @@ -8891,7 +8970,7 @@ entry: store ptr %arg_llt, ptr %t0 %t1 = load i32, ptr @g_ll_t %t2 = call ptr @fn_itoa(i32 %t1) - %t3 = call ptr @fn_sconcat(ptr @.str228, ptr %t2) + %t3 = call ptr @fn_str_concat(ptr @.str228, ptr %t2) store ptr %t3, ptr %t4 %t5 = load i32, ptr @g_ll_t %t6 = add i32 %t5, 1 @@ -8916,105 +8995,13 @@ ret: ret ptr %t15 } -define ptr @fn_sconcat(ptr %arg_a, ptr %arg_b) { -entry: - %retval = alloca ptr - %t0 = alloca ptr - %t1 = alloca ptr - %t4 = alloca i32 - %t7 = alloca i32 - %t14 = alloca ptr - %t15 = alloca i32 - %t32 = alloca i32 - store ptr %arg_a, ptr %t0 - store ptr %arg_b, ptr %t1 - %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_slen(ptr %t2) - store i32 %t3, ptr %t4 - %t5 = load ptr, ptr %t1 - %t6 = call i32 @fn_slen(ptr %t5) - store i32 %t6, ptr %t7 - %t8 = load i32, ptr %t4 - %t9 = load i32, ptr %t7 - %t10 = add i32 %t8, %t9 - %t11 = add i32 %t10, 1 - %t12 = zext i32 %t11 to i64 - %t13 = call ptr @malloc(i64 %t12) - store ptr %t13, ptr %t14 - store i32 0, ptr %t15 - br label %wcond0 -wcond0: - %t16 = load i32, ptr %t15 - %t17 = load i32, ptr %t4 - %t18 = icmp slt i32 %t16, %t17 - %t19 = zext i1 %t18 to i32 - %t20 = icmp ne i32 %t19, 0 - br i1 %t20, label %wbody1, label %wend2 -wbody1: - %t21 = load ptr, ptr %t14 - %t22 = load i32, ptr %t15 - %t23 = load ptr, ptr %t0 - %t24 = load i32, ptr %t15 - %t25 = getelementptr inbounds i8, ptr %t23, i32 %t24 - %t26 = load i8, ptr %t25 - %t27 = zext i8 %t26 to i32 - %t28 = getelementptr inbounds i8, ptr %t21, i32 %t22 - %t29 = trunc i32 %t27 to i8 - store i8 %t29, ptr %t28 - %t30 = load i32, ptr %t15 - %t31 = add i32 %t30, 1 - store i32 %t31, ptr %t15 - br label %wcond0 -wend2: - store i32 0, ptr %t32 - br label %wcond3 -wcond3: - %t33 = load i32, ptr %t32 - %t34 = load i32, ptr %t7 - %t35 = icmp slt i32 %t33, %t34 - %t36 = zext i1 %t35 to i32 - %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %wbody4, label %wend5 -wbody4: - %t38 = load ptr, ptr %t14 - %t39 = load i32, ptr %t4 - %t40 = load i32, ptr %t32 - %t41 = add i32 %t39, %t40 - %t42 = load ptr, ptr %t1 - %t43 = load i32, ptr %t32 - %t44 = getelementptr inbounds i8, ptr %t42, i32 %t43 - %t45 = load i8, ptr %t44 - %t46 = zext i8 %t45 to i32 - %t47 = getelementptr inbounds i8, ptr %t38, i32 %t41 - %t48 = trunc i32 %t46 to i8 - store i8 %t48, ptr %t47 - %t49 = load i32, ptr %t32 - %t50 = add i32 %t49, 1 - store i32 %t50, ptr %t32 - br label %wcond3 -wend5: - %t51 = load ptr, ptr %t14 - %t52 = load i32, ptr %t4 - %t53 = load i32, ptr %t7 - %t54 = add i32 %t52, %t53 - %t55 = getelementptr inbounds i8, ptr %t51, i32 %t54 - %t56 = trunc i32 0 to i8 - store i8 %t56, ptr %t55 - %t57 = load ptr, ptr %t14 - store ptr %t57, ptr %retval - br label %ret -ret: - %t58 = load ptr, ptr %retval - ret ptr %t58 -} - define ptr @fn_nreg() { entry: %retval = alloca ptr %t3 = alloca ptr %t0 = load i32, ptr @g_ll_t %t1 = call ptr @fn_itoa(i32 %t0) - %t2 = call ptr @fn_sconcat(ptr @.str232, ptr %t1) + %t2 = call ptr @fn_str_concat(ptr @.str232, ptr %t1) store ptr %t2, ptr %t3 %t4 = load i32, ptr @g_ll_t %t5 = add i32 %t4, 1 @@ -9036,7 +9023,7 @@ entry: %t1 = load ptr, ptr %t0 %t2 = load i32, ptr @g_ll_lbl %t3 = call ptr @fn_itoa(i32 %t2) - %t4 = call ptr @fn_sconcat(ptr %t1, ptr %t3) + %t4 = call ptr @fn_str_concat(ptr %t1, ptr %t3) store ptr %t4, ptr %t5 %t6 = load i32, ptr @g_ll_lbl %t7 = add i32 %t6, 1 @@ -9057,14 +9044,14 @@ entry: %t2 = alloca i32 store ptr %arg_t, ptr %t0 %t3 = load ptr, ptr %t0 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str233) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str233) %t5 = icmp ne i32 %t4, 0 %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t2 br i1 %t5, label %scend1, label %sc0 sc0: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str234) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str234) %t9 = icmp ne i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t2 @@ -9077,7 +9064,7 @@ scend1: br i1 %t12, label %scend3, label %sc2 sc2: %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str235) + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str235) %t16 = icmp ne i32 %t15, 0 %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t1 @@ -9091,7 +9078,7 @@ then4: br label %ret ifend6: %t20 = load ptr, ptr %t0 - %t21 = call i32 @fn_streq(ptr %t20, ptr @.str237) + %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str237) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then7, label %ifend9 then7: @@ -9199,7 +9186,7 @@ sc3: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 1 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t0 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 %t30 = zext i1 %t29 to i32 store i32 %t30, ptr %t16 @@ -9266,7 +9253,7 @@ sc3: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 1 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t0 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 %t30 = zext i1 %t29 to i32 store i32 %t30, ptr %t16 @@ -9312,7 +9299,7 @@ entry: %t0 = alloca ptr store ptr %arg_name, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call ptr @fn_sconcat(ptr @.str240, ptr %t1) + %t2 = call ptr @fn_str_concat(ptr @.str240, ptr %t1) store ptr %t2, ptr %retval br label %ret ret: @@ -9353,7 +9340,7 @@ wbody1: %t20 = getelementptr inbounds %Cmp_Node, ptr %t19, i32 0, i32 1 %t21 = load ptr, ptr %t20 %t22 = load ptr, ptr %t1 - %t23 = call i32 @fn_streq(ptr %t21, ptr %t22) + %t23 = call i32 @fn_str_eq(ptr %t21, ptr %t22) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then3, label %ifend5 then3: @@ -9407,7 +9394,7 @@ wbody1: %t20 = getelementptr inbounds %Cmp_Node, ptr %t19, i32 0, i32 1 %t21 = load ptr, ptr %t20 %t22 = load ptr, ptr %t1 - %t23 = call i32 @fn_streq(ptr %t21, ptr %t22) + %t23 = call i32 @fn_str_eq(ptr %t21, ptr %t22) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then3, label %ifend5 then3: @@ -9478,7 +9465,7 @@ sc3: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 1 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t0 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 %t30 = zext i1 %t29 to i32 store i32 %t30, ptr %t16 @@ -9506,7 +9493,7 @@ sc8: %t43 = getelementptr inbounds %Cmp_Node, ptr %t42, i32 0, i32 1 %t44 = load ptr, ptr %t43 %t45 = load ptr, ptr %t0 - %t46 = call i32 @fn_streq(ptr %t44, ptr %t45) + %t46 = call i32 @fn_str_eq(ptr %t44, ptr %t45) %t47 = icmp ne i32 %t46, 0 %t48 = zext i1 %t47 to i32 store i32 %t48, ptr %t34 @@ -9576,7 +9563,7 @@ sc3: %t26 = getelementptr inbounds %Cmp_Node, ptr %t25, i32 0, i32 1 %t27 = load ptr, ptr %t26 %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_streq(ptr %t27, ptr %t28) + %t29 = call i32 @fn_str_eq(ptr %t27, ptr %t28) %t30 = icmp ne i32 %t29, 0 %t31 = zext i1 %t30 to i32 store i32 %t31, ptr %t17 @@ -9611,7 +9598,7 @@ wbody9: %t52 = getelementptr inbounds %Cmp_Node, ptr %t51, i32 0, i32 1 %t53 = load ptr, ptr %t52 %t54 = load ptr, ptr %t1 - %t55 = call i32 @fn_streq(ptr %t53, ptr %t54) + %t55 = call i32 @fn_str_eq(ptr %t53, ptr %t54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then11, label %ifend13 then11: @@ -9680,7 +9667,7 @@ sc3: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 1 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t0 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 %t30 = zext i1 %t29 to i32 store i32 %t30, ptr %t16 @@ -9723,8 +9710,8 @@ entry: %t7 = getelementptr inbounds %Cmp_Node, ptr %t6, i32 0, i32 1 %t8 = load ptr, ptr %t0 %t9 = load ptr, ptr %t1 - %t10 = call ptr @fn_sconcat(ptr @.str242, ptr %t9) - %t11 = call ptr @fn_sconcat(ptr %t8, ptr %t10) + %t10 = call ptr @fn_str_concat(ptr @.str242, ptr %t9) + %t11 = call ptr @fn_str_concat(ptr %t8, ptr %t10) store ptr %t11, ptr %t7 %t12 = load ptr, ptr %t5 %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 3 @@ -9787,8 +9774,8 @@ then0: ifend2: %t6 = load ptr, ptr %t0 %t7 = load ptr, ptr %t1 - %t8 = call ptr @fn_sconcat(ptr @.str243, ptr %t7) - %t9 = call ptr @fn_sconcat(ptr %t6, ptr %t8) + %t8 = call ptr @fn_str_concat(ptr @.str243, ptr %t7) + %t9 = call ptr @fn_str_concat(ptr %t6, ptr %t8) store ptr %t9, ptr %t10 store i32 0, ptr %t11 br label %wcond3 @@ -9811,7 +9798,7 @@ wbody4: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 1 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t10 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then6, label %ifend8 then6: @@ -9958,7 +9945,7 @@ wbody1: %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t16, ptr %t17) + %t18 = call i32 @fn_str_eq(ptr %t16, ptr %t17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then3, label %ifend5 then3: @@ -10062,7 +10049,7 @@ wbody1: %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t16, ptr %t17) + %t18 = call i32 @fn_str_eq(ptr %t16, ptr %t17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then3, label %ifend5 then3: @@ -10166,7 +10153,7 @@ wbody1: %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t16, ptr %t17) + %t18 = call i32 @fn_str_eq(ptr %t16, ptr %t17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then3, label %ifend5 then3: @@ -10320,7 +10307,7 @@ wbody1: %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t16, ptr %t17) + %t18 = call i32 @fn_str_eq(ptr %t16, ptr %t17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then3, label %ifend5 then3: @@ -10374,7 +10361,7 @@ wbody1: %t15 = getelementptr inbounds %Cmp_Node, ptr %t14, i32 0, i32 1 %t16 = load ptr, ptr %t15 %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t16, ptr %t17) + %t18 = call i32 @fn_str_eq(ptr %t16, ptr %t17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then3, label %ifend5 then3: @@ -10641,7 +10628,7 @@ wbody1: %t12 = getelementptr inbounds ptr, ptr %t10, i32 %t11 %t13 = load ptr, ptr %t12 %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t13, ptr %t14) + %t15 = call i32 @fn_str_eq(ptr %t13, ptr %t14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then3, label %ifend5 then3: @@ -10701,7 +10688,7 @@ entry: store ptr %arg_s, ptr %t0 %t1 = load i32, ptr @g_ll_str %t2 = call ptr @fn_itoa(i32 %t1) - %t3 = call ptr @fn_sconcat(ptr @.str244, ptr %t2) + %t3 = call ptr @fn_str_concat(ptr @.str244, ptr %t2) store ptr %t3, ptr %t4 %t5 = load i32, ptr @g_ll_str %t6 = add i32 %t5, 1 @@ -10864,7 +10851,7 @@ then0: %t8 = getelementptr inbounds %Cmp_Node, ptr %t7, i32 0, i32 3 %t9 = load ptr, ptr %t8 %t10 = call ptr @fn_llty(ptr %t9) - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str252) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str252) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3, label %ifend5 then3: @@ -10938,7 +10925,7 @@ sc13: %t58 = load ptr, ptr %t16 %t59 = getelementptr inbounds %Cmp_Node, ptr %t58, i32 0, i32 1 %t60 = load ptr, ptr %t59 - %t61 = call i32 @fn_streq(ptr %t60, ptr @.str255) + %t61 = call i32 @fn_str_eq(ptr %t60, ptr @.str255) %t62 = icmp ne i32 %t61, 0 %t63 = zext i1 %t62 to i32 store i32 %t63, ptr %t50 @@ -10972,7 +10959,7 @@ then17: %t81 = getelementptr inbounds %Cmp_Node, ptr %t80, i32 0, i32 2 %t82 = load i32, ptr %t81 %t83 = call ptr @fn_itoa(i32 %t82) - %t84 = call ptr @fn_sconcat(ptr @.str256, ptr %t83) + %t84 = call ptr @fn_str_concat(ptr @.str256, ptr %t83) store ptr %t84, ptr %retval br label %ret ifend19: @@ -10980,7 +10967,7 @@ ifend19: %t86 = getelementptr inbounds %Cmp_Node, ptr %t85, i32 0, i32 3 %t87 = load ptr, ptr %t86 %t88 = call ptr @fn_llty(ptr %t87) - %t89 = call i32 @fn_streq(ptr %t88, ptr @.str257) + %t89 = call i32 @fn_str_eq(ptr %t88, ptr @.str257) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then20, label %ifend22 then20: @@ -11190,6 +11177,48 @@ ret: ret void } +define void @fn_emit_str_prelude() { +entry: + call void @fn_emith(ptr @.str302) + call void @fn_emith(ptr @.str303) + call void @fn_emith(ptr @.str304) + call void @fn_emith(ptr @.str305) + call void @fn_emith(ptr @.str306) + call void @fn_emith(ptr @.str307) + call void @fn_emith(ptr @.str308) + call void @fn_emith(ptr @.str309) + call void @fn_emith(ptr @.str310) + call void @fn_emith(ptr @.str311) + call void @fn_emith(ptr @.str312) + call void @fn_emith(ptr @.str313) + call void @fn_emith(ptr @.str314) + call void @fn_emith(ptr @.str315) + call void @fn_emith(ptr @.str316) + call void @fn_emith(ptr @.str317) + call void @fn_emith(ptr @.str318) + call void @fn_emith(ptr @.str319) + call void @fn_emith(ptr @.str320) + call void @fn_emith(ptr @.str321) + call void @fn_emith(ptr @.str322) + call void @fn_emith(ptr @.str323) + call void @fn_emith(ptr @.str324) + call void @fn_emith(ptr @.str325) + call void @fn_emith(ptr @.str326) + call void @fn_emith(ptr @.str327) + call void @fn_emith(ptr @.str328) + call void @fn_emith(ptr @.str329) + call void @fn_emith(ptr @.str330) + call void @fn_emith(ptr @.str331) + call void @fn_emith(ptr @.str332) + call void @fn_emith(ptr @.str333) + call void @fn_emith(ptr @.str334) + call void @fn_emith(ptr @.str335) + call void @fn_emith(ptr @.str336) + br label %ret +ret: + ret void +} + define ptr @fn_emit_member_addr(ptr %arg_e) { entry: %retval = alloca ptr @@ -11218,7 +11247,7 @@ then0: %t15 = load ptr, ptr %t5 %t16 = getelementptr inbounds %Cmp_Val, ptr %t15, i32 0, i32 1 %t17 = load ptr, ptr %t16 - %t18 = call ptr @fn_sconcat(ptr @.str302, ptr %t17) + %t18 = call ptr @fn_str_concat(ptr @.str337, ptr %t17) call void @fn_perr(ptr %t18) br label %ifend2 ifend2: @@ -11237,7 +11266,7 @@ then3: %t29 = load ptr, ptr %t0 %t30 = getelementptr inbounds %Cmp_Node, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_sconcat(ptr @.str303, ptr %t31) + %t32 = call ptr @fn_str_concat(ptr @.str338, ptr %t31) call void @fn_perr(ptr %t32) br label %ifend5 ifend5: @@ -11249,25 +11278,25 @@ ifend5: store ptr %t37, ptr @g_g_addr_ty %t38 = call ptr @fn_nreg() store ptr %t38, ptr %t39 - call void @fn_emit(ptr @.str304) + call void @fn_emit(ptr @.str339) %t40 = load ptr, ptr %t39 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str305) + call void @fn_emit(ptr @.str340) %t41 = load ptr, ptr %t5 %t42 = getelementptr inbounds %Cmp_Val, ptr %t41, i32 0, i32 1 %t43 = load ptr, ptr %t42 %t44 = call ptr @fn_layout_ty(ptr %t43) call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str306) + call void @fn_emit(ptr @.str341) %t45 = load ptr, ptr %t5 %t46 = getelementptr inbounds %Cmp_Val, ptr %t45, i32 0, i32 0 %t47 = load ptr, ptr %t46 call void @fn_emit(ptr %t47) - call void @fn_emit(ptr @.str307) + call void @fn_emit(ptr @.str342) %t48 = load i32, ptr %t24 %t49 = call ptr @fn_itoa(i32 %t48) call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str308) + call void @fn_emit(ptr @.str343) %t50 = load ptr, ptr %t39 store ptr %t50, ptr %retval br label %ret @@ -11301,7 +11330,7 @@ entry: %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str309) + call void @fn_perr(ptr @.str344) br label %ifend2 ifend2: %t13 = load ptr, ptr %t5 @@ -11313,24 +11342,24 @@ ifend2: store ptr %t18, ptr @g_g_addr_ty %t19 = call ptr @fn_nreg() store ptr %t19, ptr %t20 - call void @fn_emit(ptr @.str310) + call void @fn_emit(ptr @.str345) %t21 = load ptr, ptr %t20 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str311) + call void @fn_emit(ptr @.str346) %t22 = load ptr, ptr %t5 %t23 = getelementptr inbounds %Cmp_Val, ptr %t22, i32 0, i32 0 %t24 = load ptr, ptr %t23 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str312) + call void @fn_emit(ptr @.str347) %t25 = call ptr @fn_nreg() store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str313) + call void @fn_emit(ptr @.str348) %t27 = load ptr, ptr %t26 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str314) + call void @fn_emit(ptr @.str349) %t28 = load ptr, ptr %t20 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str315) + call void @fn_emit(ptr @.str350) %t29 = load ptr, ptr %t0 %t30 = getelementptr inbounds %Cmp_Node, ptr %t29, i32 0, i32 5 %t31 = load ptr, ptr %t30 @@ -11338,22 +11367,22 @@ ifend2: store ptr %t32, ptr %t33 %t34 = call ptr @fn_nreg() store ptr %t34, ptr %t35 - call void @fn_emit(ptr @.str316) + call void @fn_emit(ptr @.str351) %t36 = load ptr, ptr %t35 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str317) + call void @fn_emit(ptr @.str352) %t37 = load ptr, ptr %t17 %t38 = call ptr @fn_llty(ptr %t37) call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str318) + call void @fn_emit(ptr @.str353) %t39 = load ptr, ptr %t26 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str319) + call void @fn_emit(ptr @.str354) %t40 = load ptr, ptr %t33 %t41 = getelementptr inbounds %Cmp_Val, ptr %t40, i32 0, i32 0 %t42 = load ptr, ptr %t41 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str320) + call void @fn_emit(ptr @.str355) %t43 = load ptr, ptr %t35 store ptr %t43, ptr %retval br label %ret @@ -11380,14 +11409,14 @@ entry: %t110 = alloca i32 store ptr %arg_name, ptr %t0 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str321) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str356) %t4 = icmp ne i32 %t3, 0 %t5 = zext i1 %t4 to i32 store i32 %t5, ptr %t1 br i1 %t4, label %scend1, label %sc0 sc0: %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_streq(ptr %t6, ptr @.str322) + %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str357) %t8 = icmp ne i32 %t7, 0 %t9 = zext i1 %t8 to i32 store i32 %t9, ptr %t1 @@ -11401,14 +11430,14 @@ then2: br label %ret ifend4: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str323) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str358) %t15 = icmp ne i32 %t14, 0 %t16 = zext i1 %t15 to i32 store i32 %t16, ptr %t12 br i1 %t15, label %scend6, label %sc5 sc5: %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str324) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str359) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t12 @@ -11422,14 +11451,14 @@ then7: br label %ret ifend9: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str325) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str360) %t27 = icmp ne i32 %t26, 0 %t28 = zext i1 %t27 to i32 store i32 %t28, ptr %t24 br i1 %t27, label %scend11, label %sc10 sc10: %t29 = load ptr, ptr %t0 - %t30 = call i32 @fn_streq(ptr %t29, ptr @.str326) + %t30 = call i32 @fn_str_eq(ptr %t29, ptr @.str361) %t31 = icmp ne i32 %t30, 0 %t32 = zext i1 %t31 to i32 store i32 %t32, ptr %t24 @@ -11442,7 +11471,7 @@ scend11: br i1 %t34, label %scend13, label %sc12 sc12: %t36 = load ptr, ptr %t0 - %t37 = call i32 @fn_streq(ptr %t36, ptr @.str327) + %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str362) %t38 = icmp ne i32 %t37, 0 %t39 = zext i1 %t38 to i32 store i32 %t39, ptr %t23 @@ -11456,14 +11485,14 @@ then14: br label %ret ifend16: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str328) + %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str363) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t43 br i1 %t46, label %scend18, label %sc17 sc17: %t48 = load ptr, ptr %t0 - %t49 = call i32 @fn_streq(ptr %t48, ptr @.str329) + %t49 = call i32 @fn_str_eq(ptr %t48, ptr @.str364) %t50 = icmp ne i32 %t49, 0 %t51 = zext i1 %t50 to i32 store i32 %t51, ptr %t43 @@ -11476,7 +11505,7 @@ scend18: br i1 %t53, label %scend20, label %sc19 sc19: %t55 = load ptr, ptr %t0 - %t56 = call i32 @fn_streq(ptr %t55, ptr @.str330) + %t56 = call i32 @fn_str_eq(ptr %t55, ptr @.str365) %t57 = icmp ne i32 %t56, 0 %t58 = zext i1 %t57 to i32 store i32 %t58, ptr %t42 @@ -11490,14 +11519,14 @@ then21: br label %ret ifend23: %t62 = load ptr, ptr %t0 - %t63 = call i32 @fn_streq(ptr %t62, ptr @.str331) + %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str366) %t64 = icmp ne i32 %t63, 0 %t65 = zext i1 %t64 to i32 store i32 %t65, ptr %t61 br i1 %t64, label %scend25, label %sc24 sc24: %t66 = load ptr, ptr %t0 - %t67 = call i32 @fn_streq(ptr %t66, ptr @.str332) + %t67 = call i32 @fn_str_eq(ptr %t66, ptr @.str367) %t68 = icmp ne i32 %t67, 0 %t69 = zext i1 %t68 to i32 store i32 %t69, ptr %t61 @@ -11511,14 +11540,14 @@ then26: br label %ret ifend28: %t75 = load ptr, ptr %t0 - %t76 = call i32 @fn_streq(ptr %t75, ptr @.str333) + %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str368) %t77 = icmp ne i32 %t76, 0 %t78 = zext i1 %t77 to i32 store i32 %t78, ptr %t74 br i1 %t77, label %scend30, label %sc29 sc29: %t79 = load ptr, ptr %t0 - %t80 = call i32 @fn_streq(ptr %t79, ptr @.str334) + %t80 = call i32 @fn_str_eq(ptr %t79, ptr @.str369) %t81 = icmp ne i32 %t80, 0 %t82 = zext i1 %t81 to i32 store i32 %t82, ptr %t74 @@ -11531,7 +11560,7 @@ scend30: br i1 %t84, label %scend32, label %sc31 sc31: %t86 = load ptr, ptr %t0 - %t87 = call i32 @fn_streq(ptr %t86, ptr @.str335) + %t87 = call i32 @fn_str_eq(ptr %t86, ptr @.str370) %t88 = icmp ne i32 %t87, 0 %t89 = zext i1 %t88 to i32 store i32 %t89, ptr %t73 @@ -11544,7 +11573,7 @@ scend32: br i1 %t91, label %scend34, label %sc33 sc33: %t93 = load ptr, ptr %t0 - %t94 = call i32 @fn_streq(ptr %t93, ptr @.str336) + %t94 = call i32 @fn_str_eq(ptr %t93, ptr @.str371) %t95 = icmp ne i32 %t94, 0 %t96 = zext i1 %t95 to i32 store i32 %t96, ptr %t72 @@ -11558,14 +11587,14 @@ then35: br label %ret ifend37: %t100 = load ptr, ptr %t0 - %t101 = call i32 @fn_streq(ptr %t100, ptr @.str337) + %t101 = call i32 @fn_str_eq(ptr %t100, ptr @.str372) %t102 = icmp ne i32 %t101, 0 %t103 = zext i1 %t102 to i32 store i32 %t103, ptr %t99 br i1 %t102, label %scend39, label %sc38 sc38: %t104 = load ptr, ptr %t0 - %t105 = call i32 @fn_streq(ptr %t104, ptr @.str338) + %t105 = call i32 @fn_str_eq(ptr %t104, ptr @.str373) %t106 = icmp ne i32 %t105, 0 %t107 = zext i1 %t106 to i32 store i32 %t107, ptr %t99 @@ -11579,14 +11608,14 @@ then40: br label %ret ifend42: %t111 = load ptr, ptr %t0 - %t112 = call i32 @fn_streq(ptr %t111, ptr @.str339) + %t112 = call i32 @fn_str_eq(ptr %t111, ptr @.str374) %t113 = icmp ne i32 %t112, 0 %t114 = zext i1 %t113 to i32 store i32 %t114, ptr %t110 br i1 %t113, label %scend44, label %sc43 sc43: %t115 = load ptr, ptr %t0 - %t116 = call i32 @fn_streq(ptr %t115, ptr @.str340) + %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str375) %t117 = icmp ne i32 %t116, 0 %t118 = zext i1 %t117 to i32 store i32 %t118, ptr %t110 @@ -11614,13 +11643,13 @@ entry: store ptr %arg_rest, ptr %t0 %t1 = call ptr @fn_nreg() store ptr %t1, ptr %t2 - call void @fn_emit(ptr @.str341) + call void @fn_emit(ptr @.str376) %t3 = load ptr, ptr %t2 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str342) + call void @fn_emit(ptr @.str377) %t4 = load ptr, ptr %t0 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str343) + call void @fn_emit(ptr @.str378) %t5 = load ptr, ptr %t2 store ptr %t5, ptr %retval br label %ret @@ -11711,7 +11740,7 @@ entry: store ptr %arg_e, ptr %t1 store i32 1, ptr @g_g_intrin_ok %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str344) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str379) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -11719,20 +11748,20 @@ then0: %t6 = call ptr @fn_arg_code(ptr %t5, i32 0) store ptr %t6, ptr %t7 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str346) - %t10 = call ptr @fn_sconcat(ptr @.str345, ptr %t9) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str381) + %t10 = call ptr @fn_str_concat(ptr @.str380, ptr %t9) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t12 - %t14 = call ptr @fn_sconcat(ptr %t13, ptr @.str348) - %t15 = call ptr @fn_sconcat(ptr @.str347, ptr %t14) + %t14 = call ptr @fn_str_concat(ptr %t13, ptr @.str383) + %t15 = call ptr @fn_str_concat(ptr @.str382, ptr %t14) %t16 = call ptr @fn_emit_bind(ptr %t15) - %t17 = call ptr @fn_val(ptr %t16, ptr @.str349) + %t17 = call ptr @fn_val(ptr %t16, ptr @.str384) store ptr %t17, ptr %retval br label %ret ifend2: %t18 = load ptr, ptr %t0 - %t19 = call i32 @fn_streq(ptr %t18, ptr @.str350) + %t19 = call i32 @fn_str_eq(ptr %t18, ptr @.str385) %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %then3, label %ifend5 then3: @@ -11743,23 +11772,23 @@ then3: %t25 = call ptr @fn_arg_code(ptr %t24, i32 1) store ptr %t25, ptr %t26 %t27 = load ptr, ptr %t26 - %t28 = call ptr @fn_sconcat(ptr %t27, ptr @.str352) - %t29 = call ptr @fn_sconcat(ptr @.str351, ptr %t28) + %t28 = call ptr @fn_str_concat(ptr %t27, ptr @.str387) + %t29 = call ptr @fn_str_concat(ptr @.str386, ptr %t28) %t30 = call ptr @fn_emit_bind(ptr %t29) store ptr %t30, ptr %t31 %t32 = load ptr, ptr %t23 %t33 = load ptr, ptr %t31 - %t34 = call ptr @fn_sconcat(ptr %t33, ptr @.str355) - %t35 = call ptr @fn_sconcat(ptr @.str354, ptr %t34) - %t36 = call ptr @fn_sconcat(ptr %t32, ptr %t35) - %t37 = call ptr @fn_sconcat(ptr @.str353, ptr %t36) + %t34 = call ptr @fn_str_concat(ptr %t33, ptr @.str390) + %t35 = call ptr @fn_str_concat(ptr @.str389, ptr %t34) + %t36 = call ptr @fn_str_concat(ptr %t32, ptr %t35) + %t37 = call ptr @fn_str_concat(ptr @.str388, ptr %t36) %t38 = call ptr @fn_emit_bind(ptr %t37) - %t39 = call ptr @fn_val(ptr %t38, ptr @.str356) + %t39 = call ptr @fn_val(ptr %t38, ptr @.str391) store ptr %t39, ptr %retval br label %ret ifend5: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str357) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str392) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then6, label %ifend8 then6: @@ -11774,19 +11803,19 @@ then6: %t51 = call ptr @fn_emit_gep_i8(ptr %t49, ptr %t50) store ptr %t51, ptr %t52 %t53 = load ptr, ptr %t52 - %t54 = call ptr @fn_sconcat(ptr @.str358, ptr %t53) + %t54 = call ptr @fn_str_concat(ptr @.str393, ptr %t53) %t55 = call ptr @fn_emit_bind(ptr %t54) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t56 - %t58 = call ptr @fn_sconcat(ptr %t57, ptr @.str360) - %t59 = call ptr @fn_sconcat(ptr @.str359, ptr %t58) + %t58 = call ptr @fn_str_concat(ptr %t57, ptr @.str395) + %t59 = call ptr @fn_str_concat(ptr @.str394, ptr %t58) %t60 = call ptr @fn_emit_bind(ptr %t59) - %t61 = call ptr @fn_val(ptr %t60, ptr @.str361) + %t61 = call ptr @fn_val(ptr %t60, ptr @.str396) store ptr %t61, ptr %retval br label %ret ifend8: %t62 = load ptr, ptr %t0 - %t63 = call i32 @fn_streq(ptr %t62, ptr @.str362) + %t63 = call i32 @fn_str_eq(ptr %t62, ptr @.str397) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then9, label %ifend11 then9: @@ -11804,23 +11833,23 @@ then9: %t76 = call ptr @fn_emit_gep_i8(ptr %t74, ptr %t75) store ptr %t76, ptr %t77 %t78 = load ptr, ptr %t73 - %t79 = call ptr @fn_sconcat(ptr %t78, ptr @.str364) - %t80 = call ptr @fn_sconcat(ptr @.str363, ptr %t79) + %t79 = call ptr @fn_str_concat(ptr %t78, ptr @.str399) + %t80 = call ptr @fn_str_concat(ptr @.str398, ptr %t79) %t81 = call ptr @fn_emit_bind(ptr %t80) store ptr %t81, ptr %t82 - call void @fn_emit(ptr @.str365) + call void @fn_emit(ptr @.str400) %t83 = load ptr, ptr %t82 call void @fn_emit(ptr %t83) - call void @fn_emit(ptr @.str366) + call void @fn_emit(ptr @.str401) %t84 = load ptr, ptr %t77 call void @fn_emit(ptr %t84) - call void @fn_emit(ptr @.str367) - %t85 = call ptr @fn_val(ptr @.str368, ptr @.str369) + call void @fn_emit(ptr @.str402) + %t85 = call ptr @fn_val(ptr @.str403, ptr @.str404) store ptr %t85, ptr %retval br label %ret ifend11: %t86 = load ptr, ptr %t0 - %t87 = call i32 @fn_streq(ptr %t86, ptr @.str370) + %t87 = call i32 @fn_str_eq(ptr %t86, ptr @.str405) %t88 = icmp ne i32 %t87, 0 br i1 %t88, label %then12, label %ifend14 then12: @@ -11832,24 +11861,24 @@ then12: store ptr %t93, ptr %t94 %t95 = load ptr, ptr %t91 %t96 = load ptr, ptr %t94 - %t97 = call ptr @fn_sconcat(ptr %t96, ptr @.str373) - %t98 = call ptr @fn_sconcat(ptr @.str372, ptr %t97) - %t99 = call ptr @fn_sconcat(ptr %t95, ptr %t98) - %t100 = call ptr @fn_sconcat(ptr @.str371, ptr %t99) + %t97 = call ptr @fn_str_concat(ptr %t96, ptr @.str408) + %t98 = call ptr @fn_str_concat(ptr @.str407, ptr %t97) + %t99 = call ptr @fn_str_concat(ptr %t95, ptr %t98) + %t100 = call ptr @fn_str_concat(ptr @.str406, ptr %t99) %t101 = call ptr @fn_emit_bind(ptr %t100) - %t102 = call ptr @fn_val(ptr %t101, ptr @.str374) + %t102 = call ptr @fn_val(ptr %t101, ptr @.str409) store ptr %t102, ptr %retval br label %ret ifend14: %t104 = load ptr, ptr %t0 - %t105 = call i32 @fn_streq(ptr %t104, ptr @.str375) + %t105 = call i32 @fn_str_eq(ptr %t104, ptr @.str410) %t106 = icmp ne i32 %t105, 0 %t107 = zext i1 %t106 to i32 store i32 %t107, ptr %t103 br i1 %t106, label %scend16, label %sc15 sc15: %t108 = load ptr, ptr %t0 - %t109 = call i32 @fn_streq(ptr %t108, ptr @.str376) + %t109 = call i32 @fn_str_eq(ptr %t108, ptr @.str411) %t110 = icmp ne i32 %t109, 0 %t111 = zext i1 %t110 to i32 store i32 %t111, ptr %t103 @@ -11869,43 +11898,43 @@ then17: %t121 = call ptr @fn_arg_code(ptr %t120, i32 2) store ptr %t121, ptr %t122 %t123 = load ptr, ptr %t122 - %t124 = call ptr @fn_sconcat(ptr %t123, ptr @.str378) - %t125 = call ptr @fn_sconcat(ptr @.str377, ptr %t124) + %t124 = call ptr @fn_str_concat(ptr %t123, ptr @.str413) + %t125 = call ptr @fn_str_concat(ptr @.str412, ptr %t124) %t126 = call ptr @fn_emit_bind(ptr %t125) store ptr %t126, ptr %t127 - store ptr @.str379, ptr %t128 + store ptr @.str414, ptr %t128 %t129 = load ptr, ptr %t0 - %t130 = call i32 @fn_streq(ptr %t129, ptr @.str380) + %t130 = call i32 @fn_str_eq(ptr %t129, ptr @.str415) %t131 = icmp ne i32 %t130, 0 br i1 %t131, label %then20, label %ifend22 then20: - store ptr @.str381, ptr %t128 + store ptr @.str416, ptr %t128 br label %ifend22 ifend22: %t132 = load ptr, ptr %t128 %t133 = load ptr, ptr %t119 %t134 = load ptr, ptr %t127 %t135 = load ptr, ptr %t116 - %t136 = call ptr @fn_sconcat(ptr %t135, ptr @.str386) - %t137 = call ptr @fn_sconcat(ptr @.str385, ptr %t136) - %t138 = call ptr @fn_sconcat(ptr %t134, ptr %t137) - %t139 = call ptr @fn_sconcat(ptr @.str384, ptr %t138) - %t140 = call ptr @fn_sconcat(ptr %t133, ptr %t139) - %t141 = call ptr @fn_sconcat(ptr @.str383, ptr %t140) - %t142 = call ptr @fn_sconcat(ptr %t132, ptr %t141) - %t143 = call ptr @fn_sconcat(ptr @.str382, ptr %t142) + %t136 = call ptr @fn_str_concat(ptr %t135, ptr @.str421) + %t137 = call ptr @fn_str_concat(ptr @.str420, ptr %t136) + %t138 = call ptr @fn_str_concat(ptr %t134, ptr %t137) + %t139 = call ptr @fn_str_concat(ptr @.str419, ptr %t138) + %t140 = call ptr @fn_str_concat(ptr %t133, ptr %t139) + %t141 = call ptr @fn_str_concat(ptr @.str418, ptr %t140) + %t142 = call ptr @fn_str_concat(ptr %t132, ptr %t141) + %t143 = call ptr @fn_str_concat(ptr @.str417, ptr %t142) %t144 = call ptr @fn_emit_bind(ptr %t143) store ptr %t144, ptr %t145 %t146 = load ptr, ptr %t145 - %t147 = call ptr @fn_sconcat(ptr %t146, ptr @.str388) - %t148 = call ptr @fn_sconcat(ptr @.str387, ptr %t147) + %t147 = call ptr @fn_str_concat(ptr %t146, ptr @.str423) + %t148 = call ptr @fn_str_concat(ptr @.str422, ptr %t147) %t149 = call ptr @fn_emit_bind(ptr %t148) - %t150 = call ptr @fn_val(ptr %t149, ptr @.str389) + %t150 = call ptr @fn_val(ptr %t149, ptr @.str424) store ptr %t150, ptr %retval br label %ret ifend19: %t151 = load ptr, ptr %t0 - %t152 = call i32 @fn_streq(ptr %t151, ptr @.str390) + %t152 = call i32 @fn_str_eq(ptr %t151, ptr @.str425) %t153 = icmp ne i32 %t152, 0 br i1 %t153, label %then23, label %ifend25 then23: @@ -11919,26 +11948,26 @@ then23: %t161 = call ptr @fn_arg_code(ptr %t160, i32 2) store ptr %t161, ptr %t162 %t163 = load ptr, ptr %t159 - %t164 = call ptr @fn_sconcat(ptr %t163, ptr @.str392) - %t165 = call ptr @fn_sconcat(ptr @.str391, ptr %t164) + %t164 = call ptr @fn_str_concat(ptr %t163, ptr @.str427) + %t165 = call ptr @fn_str_concat(ptr @.str426, ptr %t164) %t166 = call ptr @fn_emit_bind(ptr %t165) store ptr %t166, ptr %t167 %t168 = load ptr, ptr %t156 %t169 = load ptr, ptr %t167 %t170 = load ptr, ptr %t162 - %t171 = call ptr @fn_sconcat(ptr %t170, ptr @.str396) - %t172 = call ptr @fn_sconcat(ptr @.str395, ptr %t171) - %t173 = call ptr @fn_sconcat(ptr %t169, ptr %t172) - %t174 = call ptr @fn_sconcat(ptr @.str394, ptr %t173) - %t175 = call ptr @fn_sconcat(ptr %t168, ptr %t174) - %t176 = call ptr @fn_sconcat(ptr @.str393, ptr %t175) + %t171 = call ptr @fn_str_concat(ptr %t170, ptr @.str431) + %t172 = call ptr @fn_str_concat(ptr @.str430, ptr %t171) + %t173 = call ptr @fn_str_concat(ptr %t169, ptr %t172) + %t174 = call ptr @fn_str_concat(ptr @.str429, ptr %t173) + %t175 = call ptr @fn_str_concat(ptr %t168, ptr %t174) + %t176 = call ptr @fn_str_concat(ptr @.str428, ptr %t175) %t177 = call ptr @fn_emit_bind(ptr %t176) - %t178 = call ptr @fn_val(ptr %t177, ptr @.str397) + %t178 = call ptr @fn_val(ptr %t177, ptr @.str432) store ptr %t178, ptr %retval br label %ret ifend25: %t179 = load ptr, ptr %t0 - %t180 = call i32 @fn_streq(ptr %t179, ptr @.str398) + %t180 = call i32 @fn_str_eq(ptr %t179, ptr @.str433) %t181 = icmp ne i32 %t180, 0 br i1 %t181, label %then26, label %ifend28 then26: @@ -11946,130 +11975,130 @@ then26: %t183 = call ptr @fn_arg_code(ptr %t182, i32 0) store ptr %t183, ptr %t184 %t185 = load ptr, ptr %t184 - %t186 = call ptr @fn_sconcat(ptr %t185, ptr @.str400) - %t187 = call ptr @fn_sconcat(ptr @.str399, ptr %t186) + %t186 = call ptr @fn_str_concat(ptr %t185, ptr @.str435) + %t187 = call ptr @fn_str_concat(ptr @.str434, ptr %t186) %t188 = call ptr @fn_emit_bind(ptr %t187) store ptr %t188, ptr %t189 %t190 = load ptr, ptr %t189 - %t191 = call ptr @fn_sconcat(ptr %t190, ptr @.str402) - %t192 = call ptr @fn_sconcat(ptr @.str401, ptr %t191) + %t191 = call ptr @fn_str_concat(ptr %t190, ptr @.str437) + %t192 = call ptr @fn_str_concat(ptr @.str436, ptr %t191) %t193 = call ptr @fn_emit_bind(ptr %t192) - %t194 = call ptr @fn_val(ptr %t193, ptr @.str403) + %t194 = call ptr @fn_val(ptr %t193, ptr @.str438) store ptr %t194, ptr %retval br label %ret ifend28: %t195 = load ptr, ptr %t0 - %t196 = call i32 @fn_streq(ptr %t195, ptr @.str404) + %t196 = call i32 @fn_str_eq(ptr %t195, ptr @.str439) %t197 = icmp ne i32 %t196, 0 br i1 %t197, label %then29, label %ifend31 then29: %t198 = load ptr, ptr %t1 %t199 = call ptr @fn_arg_code(ptr %t198, i32 0) store ptr %t199, ptr %t200 - call void @fn_emit(ptr @.str405) + call void @fn_emit(ptr @.str440) %t201 = load ptr, ptr %t200 call void @fn_emit(ptr %t201) - call void @fn_emit(ptr @.str406) - %t202 = call ptr @fn_val(ptr @.str407, ptr @.str408) + call void @fn_emit(ptr @.str441) + %t202 = call ptr @fn_val(ptr @.str442, ptr @.str443) store ptr %t202, ptr %retval br label %ret ifend31: %t203 = load ptr, ptr %t0 - %t204 = call i32 @fn_streq(ptr %t203, ptr @.str409) + %t204 = call i32 @fn_str_eq(ptr %t203, ptr @.str444) %t205 = icmp ne i32 %t204, 0 br i1 %t205, label %then32, label %ifend34 then32: %t206 = load ptr, ptr %t1 %t207 = call ptr @fn_arg_code(ptr %t206, i32 0) store ptr %t207, ptr %t208 - call void @fn_emit(ptr @.str410) + call void @fn_emit(ptr @.str445) %t209 = load ptr, ptr %t208 call void @fn_emit(ptr %t209) - call void @fn_emit(ptr @.str411) - %t210 = call ptr @fn_val(ptr @.str412, ptr @.str413) + call void @fn_emit(ptr @.str446) + %t210 = call ptr @fn_val(ptr @.str447, ptr @.str448) store ptr %t210, ptr %retval br label %ret ifend34: %t211 = load ptr, ptr %t0 - %t212 = call i32 @fn_streq(ptr %t211, ptr @.str414) + %t212 = call i32 @fn_str_eq(ptr %t211, ptr @.str449) %t213 = icmp ne i32 %t212, 0 br i1 %t213, label %then35, label %ifend37 then35: %t214 = load ptr, ptr %t1 %t215 = call ptr @fn_arg_code(ptr %t214, i32 0) store ptr %t215, ptr %t216 - call void @fn_emit(ptr @.str415) + call void @fn_emit(ptr @.str450) %t217 = load ptr, ptr %t216 call void @fn_emit(ptr %t217) - call void @fn_emit(ptr @.str416) - %t218 = call ptr @fn_val(ptr @.str417, ptr @.str418) + call void @fn_emit(ptr @.str451) + %t218 = call ptr @fn_val(ptr @.str452, ptr @.str453) store ptr %t218, ptr %retval br label %ret ifend37: %t219 = load ptr, ptr %t0 - %t220 = call i32 @fn_streq(ptr %t219, ptr @.str419) + %t220 = call i32 @fn_str_eq(ptr %t219, ptr @.str454) %t221 = icmp ne i32 %t220, 0 br i1 %t221, label %then38, label %ifend40 then38: - %t222 = call ptr @fn_emit_bind(ptr @.str420) - %t223 = call ptr @fn_val(ptr %t222, ptr @.str421) + %t222 = call ptr @fn_emit_bind(ptr @.str455) + %t223 = call ptr @fn_val(ptr %t222, ptr @.str456) store ptr %t223, ptr %retval br label %ret ifend40: %t224 = load ptr, ptr %t0 - %t225 = call i32 @fn_streq(ptr %t224, ptr @.str422) + %t225 = call i32 @fn_str_eq(ptr %t224, ptr @.str457) %t226 = icmp ne i32 %t225, 0 br i1 %t226, label %then41, label %ifend43 then41: %t227 = load ptr, ptr %t1 %t228 = call ptr @fn_arg_code(ptr %t227, i32 0) store ptr %t228, ptr %t229 - %t230 = call ptr @fn_emit_bind(ptr @.str423) + %t230 = call ptr @fn_emit_bind(ptr @.str458) store ptr %t230, ptr %t231 %t232 = load ptr, ptr %t231 %t233 = load ptr, ptr %t229 - %t234 = call ptr @fn_sconcat(ptr @.str425, ptr %t233) - %t235 = call ptr @fn_sconcat(ptr %t232, ptr %t234) - %t236 = call ptr @fn_sconcat(ptr @.str424, ptr %t235) + %t234 = call ptr @fn_str_concat(ptr @.str460, ptr %t233) + %t235 = call ptr @fn_str_concat(ptr %t232, ptr %t234) + %t236 = call ptr @fn_str_concat(ptr @.str459, ptr %t235) %t237 = call ptr @fn_emit_bind(ptr %t236) store ptr %t237, ptr %t238 %t239 = load ptr, ptr %t238 - %t240 = call ptr @fn_sconcat(ptr @.str426, ptr %t239) + %t240 = call ptr @fn_str_concat(ptr @.str461, ptr %t239) %t241 = call ptr @fn_emit_bind(ptr %t240) - %t242 = call ptr @fn_val(ptr %t241, ptr @.str427) + %t242 = call ptr @fn_val(ptr %t241, ptr @.str462) store ptr %t242, ptr %retval br label %ret ifend43: %t243 = load ptr, ptr %t0 - %t244 = call i32 @fn_streq(ptr %t243, ptr @.str428) + %t244 = call i32 @fn_str_eq(ptr %t243, ptr @.str463) %t245 = icmp ne i32 %t244, 0 br i1 %t245, label %then44, label %ifend46 then44: %t246 = load ptr, ptr %t1 %t247 = call ptr @fn_arg_code(ptr %t246, i32 0) store ptr %t247, ptr %t248 - call void @fn_emit(ptr @.str429) + call void @fn_emit(ptr @.str464) %t249 = load ptr, ptr %t248 call void @fn_emit(ptr %t249) - call void @fn_emit(ptr @.str430) - call void @fn_emit(ptr @.str431) + call void @fn_emit(ptr @.str465) + call void @fn_emit(ptr @.str466) store i32 1, ptr @g_g_term - %t250 = call ptr @fn_val(ptr @.str432, ptr @.str433) + %t250 = call ptr @fn_val(ptr @.str467, ptr @.str468) store ptr %t250, ptr %retval br label %ret ifend46: %t251 = load ptr, ptr %t0 - %t252 = call i32 @fn_streq(ptr %t251, ptr @.str434) + %t252 = call i32 @fn_str_eq(ptr %t251, ptr @.str469) %t253 = icmp ne i32 %t252, 0 br i1 %t253, label %then47, label %ifend49 then47: - %t254 = call ptr @fn_emit_bind(ptr @.str435) - %t255 = call ptr @fn_val(ptr %t254, ptr @.str436) + %t254 = call ptr @fn_emit_bind(ptr @.str470) + %t255 = call ptr @fn_val(ptr %t254, ptr @.str471) store ptr %t255, ptr %retval br label %ret ifend49: %t256 = load ptr, ptr %t0 - %t257 = call i32 @fn_streq(ptr %t256, ptr @.str437) + %t257 = call i32 @fn_str_eq(ptr %t256, ptr @.str472) %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %then50, label %ifend52 then50: @@ -12077,15 +12106,15 @@ then50: %t260 = call ptr @fn_arg_code(ptr %t259, i32 0) store ptr %t260, ptr %t261 %t262 = load ptr, ptr %t261 - %t263 = call ptr @fn_sconcat(ptr %t262, ptr @.str439) - %t264 = call ptr @fn_sconcat(ptr @.str438, ptr %t263) + %t263 = call ptr @fn_str_concat(ptr %t262, ptr @.str474) + %t264 = call ptr @fn_str_concat(ptr @.str473, ptr %t263) %t265 = call ptr @fn_emit_bind(ptr %t264) - %t266 = call ptr @fn_val(ptr %t265, ptr @.str440) + %t266 = call ptr @fn_val(ptr %t265, ptr @.str475) store ptr %t266, ptr %retval br label %ret ifend52: %t267 = load ptr, ptr %t0 - %t268 = call i32 @fn_streq(ptr %t267, ptr @.str441) + %t268 = call i32 @fn_str_eq(ptr %t267, ptr @.str476) %t269 = icmp ne i32 %t268, 0 br i1 %t269, label %then53, label %ifend55 then53: @@ -12093,15 +12122,15 @@ then53: %t271 = call ptr @fn_arg_code(ptr %t270, i32 0) store ptr %t271, ptr %t272 %t273 = load ptr, ptr %t272 - %t274 = call ptr @fn_sconcat(ptr %t273, ptr @.str443) - %t275 = call ptr @fn_sconcat(ptr @.str442, ptr %t274) + %t274 = call ptr @fn_str_concat(ptr %t273, ptr @.str478) + %t275 = call ptr @fn_str_concat(ptr @.str477, ptr %t274) %t276 = call ptr @fn_emit_bind(ptr %t275) - %t277 = call ptr @fn_val(ptr %t276, ptr @.str444) + %t277 = call ptr @fn_val(ptr %t276, ptr @.str479) store ptr %t277, ptr %retval br label %ret ifend55: %t278 = load ptr, ptr %t0 - %t279 = call i32 @fn_streq(ptr %t278, ptr @.str445) + %t279 = call i32 @fn_str_eq(ptr %t278, ptr @.str480) %t280 = icmp ne i32 %t279, 0 br i1 %t280, label %then56, label %ifend58 then56: @@ -12113,25 +12142,25 @@ then56: store ptr %t285, ptr %t286 %t287 = call ptr @fn_nreg() store ptr %t287, ptr %t288 - call void @fn_emit(ptr @.str446) + call void @fn_emit(ptr @.str481) %t289 = load ptr, ptr %t288 call void @fn_emit(ptr %t289) - call void @fn_emit(ptr @.str447) + call void @fn_emit(ptr @.str482) %t290 = load ptr, ptr %t283 call void @fn_emit(ptr %t290) - call void @fn_emit(ptr @.str448) + call void @fn_emit(ptr @.str483) %t291 = load ptr, ptr %t286 call void @fn_emit(ptr %t291) - call void @fn_emit(ptr @.str449) + call void @fn_emit(ptr @.str484) %t292 = load ptr, ptr %t288 - %t293 = call ptr @fn_sconcat(ptr @.str450, ptr %t292) + %t293 = call ptr @fn_str_concat(ptr @.str485, ptr %t292) %t294 = call ptr @fn_emit_bind(ptr %t293) - %t295 = call ptr @fn_val(ptr %t294, ptr @.str451) + %t295 = call ptr @fn_val(ptr %t294, ptr @.str486) store ptr %t295, ptr %retval br label %ret ifend58: %t296 = load ptr, ptr %t0 - %t297 = call i32 @fn_streq(ptr %t296, ptr @.str452) + %t297 = call i32 @fn_str_eq(ptr %t296, ptr @.str487) %t298 = icmp ne i32 %t297, 0 br i1 %t298, label %then59, label %ifend61 then59: @@ -12146,29 +12175,29 @@ then59: store ptr %t306, ptr %t307 %t308 = call ptr @fn_nreg() store ptr %t308, ptr %t309 - call void @fn_emit(ptr @.str453) + call void @fn_emit(ptr @.str488) %t310 = load ptr, ptr %t309 call void @fn_emit(ptr %t310) - call void @fn_emit(ptr @.str454) + call void @fn_emit(ptr @.str489) %t311 = load ptr, ptr %t301 call void @fn_emit(ptr %t311) - call void @fn_emit(ptr @.str455) + call void @fn_emit(ptr @.str490) %t312 = load ptr, ptr %t304 call void @fn_emit(ptr %t312) - call void @fn_emit(ptr @.str456) - call void @fn_emit(ptr @.str457) + call void @fn_emit(ptr @.str491) + call void @fn_emit(ptr @.str492) %t313 = load ptr, ptr %t307 call void @fn_emit(ptr %t313) - call void @fn_emit(ptr @.str458) + call void @fn_emit(ptr @.str493) %t314 = load ptr, ptr %t309 call void @fn_emit(ptr %t314) - call void @fn_emit(ptr @.str459) - %t315 = call ptr @fn_val(ptr @.str460, ptr @.str461) + call void @fn_emit(ptr @.str494) + %t315 = call ptr @fn_val(ptr @.str495, ptr @.str496) store ptr %t315, ptr %retval br label %ret ifend61: store i32 0, ptr @g_g_intrin_ok - %t316 = call ptr @fn_val(ptr @.str462, ptr @.str463) + %t316 = call ptr @fn_val(ptr @.str497, ptr @.str498) store ptr %t316, ptr %retval br label %ret ret: @@ -12195,14 +12224,14 @@ entry: %t118 = alloca i32 store ptr %arg_name, ptr %t0 %t3 = load ptr, ptr %t0 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str464) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str499) %t5 = icmp ne i32 %t4, 0 %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t2 br i1 %t5, label %scend1, label %sc0 sc0: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str465) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str500) %t9 = icmp ne i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t2 @@ -12215,7 +12244,7 @@ scend1: br i1 %t12, label %scend3, label %sc2 sc2: %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str466) + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str501) %t16 = icmp ne i32 %t15, 0 %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t1 @@ -12229,14 +12258,14 @@ then4: br label %ret ifend6: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str467) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str502) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t21 br i1 %t24, label %scend8, label %sc7 sc7: %t26 = load ptr, ptr %t0 - %t27 = call i32 @fn_streq(ptr %t26, ptr @.str468) + %t27 = call i32 @fn_str_eq(ptr %t26, ptr @.str503) %t28 = icmp ne i32 %t27, 0 %t29 = zext i1 %t28 to i32 store i32 %t29, ptr %t21 @@ -12249,7 +12278,7 @@ scend8: br i1 %t31, label %scend10, label %sc9 sc9: %t33 = load ptr, ptr %t0 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str469) + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str504) %t35 = icmp ne i32 %t34, 0 %t36 = zext i1 %t35 to i32 store i32 %t36, ptr %t20 @@ -12263,14 +12292,14 @@ then11: br label %ret ifend13: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str470) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str505) %t42 = icmp ne i32 %t41, 0 %t43 = zext i1 %t42 to i32 store i32 %t43, ptr %t39 br i1 %t42, label %scend15, label %sc14 sc14: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str471) + %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str506) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t39 @@ -12284,14 +12313,14 @@ then16: br label %ret ifend18: %t53 = load ptr, ptr %t0 - %t54 = call i32 @fn_streq(ptr %t53, ptr @.str472) + %t54 = call i32 @fn_str_eq(ptr %t53, ptr @.str507) %t55 = icmp ne i32 %t54, 0 %t56 = zext i1 %t55 to i32 store i32 %t56, ptr %t52 br i1 %t55, label %scend20, label %sc19 sc19: %t57 = load ptr, ptr %t0 - %t58 = call i32 @fn_streq(ptr %t57, ptr @.str473) + %t58 = call i32 @fn_str_eq(ptr %t57, ptr @.str508) %t59 = icmp ne i32 %t58, 0 %t60 = zext i1 %t59 to i32 store i32 %t60, ptr %t52 @@ -12304,7 +12333,7 @@ scend20: br i1 %t62, label %scend22, label %sc21 sc21: %t64 = load ptr, ptr %t0 - %t65 = call i32 @fn_streq(ptr %t64, ptr @.str474) + %t65 = call i32 @fn_str_eq(ptr %t64, ptr @.str509) %t66 = icmp ne i32 %t65, 0 %t67 = zext i1 %t66 to i32 store i32 %t67, ptr %t51 @@ -12317,7 +12346,7 @@ scend22: br i1 %t69, label %scend24, label %sc23 sc23: %t71 = load ptr, ptr %t0 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str475) + %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str510) %t73 = icmp ne i32 %t72, 0 %t74 = zext i1 %t73 to i32 store i32 %t74, ptr %t50 @@ -12331,14 +12360,14 @@ then25: br label %ret ifend27: %t78 = load ptr, ptr %t0 - %t79 = call i32 @fn_streq(ptr %t78, ptr @.str476) + %t79 = call i32 @fn_str_eq(ptr %t78, ptr @.str511) %t80 = icmp ne i32 %t79, 0 %t81 = zext i1 %t80 to i32 store i32 %t81, ptr %t77 br i1 %t80, label %scend29, label %sc28 sc28: %t82 = load ptr, ptr %t0 - %t83 = call i32 @fn_streq(ptr %t82, ptr @.str477) + %t83 = call i32 @fn_str_eq(ptr %t82, ptr @.str512) %t84 = icmp ne i32 %t83, 0 %t85 = zext i1 %t84 to i32 store i32 %t85, ptr %t77 @@ -12352,14 +12381,14 @@ then30: br label %ret ifend32: %t89 = load ptr, ptr %t0 - %t90 = call i32 @fn_streq(ptr %t89, ptr @.str478) + %t90 = call i32 @fn_str_eq(ptr %t89, ptr @.str513) %t91 = icmp ne i32 %t90, 0 %t92 = zext i1 %t91 to i32 store i32 %t92, ptr %t88 br i1 %t91, label %scend34, label %sc33 sc33: %t93 = load ptr, ptr %t0 - %t94 = call i32 @fn_streq(ptr %t93, ptr @.str479) + %t94 = call i32 @fn_str_eq(ptr %t93, ptr @.str514) %t95 = icmp ne i32 %t94, 0 %t96 = zext i1 %t95 to i32 store i32 %t96, ptr %t88 @@ -12373,14 +12402,14 @@ then35: br label %ret ifend37: %t101 = load ptr, ptr %t0 - %t102 = call i32 @fn_streq(ptr %t101, ptr @.str480) + %t102 = call i32 @fn_str_eq(ptr %t101, ptr @.str515) %t103 = icmp ne i32 %t102, 0 %t104 = zext i1 %t103 to i32 store i32 %t104, ptr %t100 br i1 %t103, label %scend39, label %sc38 sc38: %t105 = load ptr, ptr %t0 - %t106 = call i32 @fn_streq(ptr %t105, ptr @.str481) + %t106 = call i32 @fn_str_eq(ptr %t105, ptr @.str516) %t107 = icmp ne i32 %t106, 0 %t108 = zext i1 %t107 to i32 store i32 %t108, ptr %t100 @@ -12393,7 +12422,7 @@ scend39: br i1 %t110, label %scend41, label %sc40 sc40: %t112 = load ptr, ptr %t0 - %t113 = call i32 @fn_streq(ptr %t112, ptr @.str482) + %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str517) %t114 = icmp ne i32 %t113, 0 %t115 = zext i1 %t114 to i32 store i32 %t115, ptr %t99 @@ -12407,14 +12436,14 @@ then42: br label %ret ifend44: %t119 = load ptr, ptr %t0 - %t120 = call i32 @fn_streq(ptr %t119, ptr @.str483) + %t120 = call i32 @fn_str_eq(ptr %t119, ptr @.str518) %t121 = icmp ne i32 %t120, 0 %t122 = zext i1 %t121 to i32 store i32 %t122, ptr %t118 br i1 %t121, label %scend46, label %sc45 sc45: %t123 = load ptr, ptr %t0 - %t124 = call i32 @fn_streq(ptr %t123, ptr @.str484) + %t124 = call i32 @fn_str_eq(ptr %t123, ptr @.str519) %t125 = icmp ne i32 %t124, 0 %t126 = zext i1 %t125 to i32 store i32 %t126, ptr %t118 @@ -12481,23 +12510,23 @@ entry: store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str485) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str520) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: %t5 = load ptr, ptr %t1 %t6 = call ptr @fn_arg_code(ptr %t5, i32 0) store ptr %t6, ptr %t7 - call void @fn_emit(ptr @.str486) + call void @fn_emit(ptr @.str521) %t8 = load ptr, ptr %t7 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str487) - %t9 = call ptr @fn_val(ptr @.str488, ptr @.str489) + call void @fn_emit(ptr @.str522) + %t9 = call ptr @fn_val(ptr @.str523, ptr @.str524) store ptr %t9, ptr %retval br label %ret ifend2: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str490) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str525) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3, label %ifend5 then3: @@ -12511,26 +12540,26 @@ then3: %t20 = call ptr @fn_arg_code(ptr %t19, i32 2) store ptr %t20, ptr %t21 %t22 = load ptr, ptr %t21 - %t23 = call ptr @fn_sconcat(ptr %t22, ptr @.str492) - %t24 = call ptr @fn_sconcat(ptr @.str491, ptr %t23) + %t23 = call ptr @fn_str_concat(ptr %t22, ptr @.str527) + %t24 = call ptr @fn_str_concat(ptr @.str526, ptr %t23) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str493) + call void @fn_emit(ptr @.str528) %t27 = load ptr, ptr %t15 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str494) + call void @fn_emit(ptr @.str529) %t28 = load ptr, ptr %t18 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str495) + call void @fn_emit(ptr @.str530) %t29 = load ptr, ptr %t26 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str496) - %t30 = call ptr @fn_val(ptr @.str497, ptr @.str498) + call void @fn_emit(ptr @.str531) + %t30 = call ptr @fn_val(ptr @.str532, ptr @.str533) store ptr %t30, ptr %retval br label %ret ifend5: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str499) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str534) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then6, label %ifend8 then6: @@ -12544,26 +12573,26 @@ then6: %t41 = call ptr @fn_arg_code(ptr %t40, i32 2) store ptr %t41, ptr %t42 %t43 = load ptr, ptr %t42 - %t44 = call ptr @fn_sconcat(ptr %t43, ptr @.str501) - %t45 = call ptr @fn_sconcat(ptr @.str500, ptr %t44) + %t44 = call ptr @fn_str_concat(ptr %t43, ptr @.str536) + %t45 = call ptr @fn_str_concat(ptr @.str535, ptr %t44) %t46 = call ptr @fn_emit_bind(ptr %t45) store ptr %t46, ptr %t47 - call void @fn_emit(ptr @.str502) + call void @fn_emit(ptr @.str537) %t48 = load ptr, ptr %t36 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str503) + call void @fn_emit(ptr @.str538) %t49 = load ptr, ptr %t39 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str504) + call void @fn_emit(ptr @.str539) %t50 = load ptr, ptr %t47 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str505) - %t51 = call ptr @fn_val(ptr @.str506, ptr @.str507) + call void @fn_emit(ptr @.str540) + %t51 = call ptr @fn_val(ptr @.str541, ptr @.str542) store ptr %t51, ptr %retval br label %ret ifend8: %t52 = load ptr, ptr %t0 - %t53 = call i32 @fn_streq(ptr %t52, ptr @.str508) + %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str543) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then9, label %ifend11 then9: @@ -12575,49 +12604,49 @@ then9: store ptr %t59, ptr %t60 %t61 = call ptr @fn_nreg() store ptr %t61, ptr %t62 - call void @fn_emit(ptr @.str509) + call void @fn_emit(ptr @.str544) %t63 = load ptr, ptr %t62 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str510) + call void @fn_emit(ptr @.str545) %t64 = load ptr, ptr %t57 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str511) + call void @fn_emit(ptr @.str546) %t65 = load ptr, ptr %t60 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str512) + call void @fn_emit(ptr @.str547) %t66 = load ptr, ptr %t62 - %t67 = call ptr @fn_val(ptr %t66, ptr @.str513) + %t67 = call ptr @fn_val(ptr %t66, ptr @.str548) store ptr %t67, ptr %retval br label %ret ifend11: %t68 = load ptr, ptr %t0 - %t69 = call i32 @fn_streq(ptr %t68, ptr @.str514) + %t69 = call i32 @fn_str_eq(ptr %t68, ptr @.str549) %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then12, label %ifend14 then12: - %t71 = call ptr @fn_emit_bind(ptr @.str515) - %t72 = call ptr @fn_val(ptr %t71, ptr @.str516) + %t71 = call ptr @fn_emit_bind(ptr @.str550) + %t72 = call ptr @fn_val(ptr %t71, ptr @.str551) store ptr %t72, ptr %retval br label %ret ifend14: %t73 = load ptr, ptr %t0 - %t74 = call i32 @fn_streq(ptr %t73, ptr @.str517) + %t74 = call i32 @fn_str_eq(ptr %t73, ptr @.str552) %t75 = icmp ne i32 %t74, 0 br i1 %t75, label %then15, label %ifend17 then15: %t76 = load ptr, ptr %t1 %t77 = call ptr @fn_arg_code(ptr %t76, i32 0) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str518) + call void @fn_emit(ptr @.str553) %t79 = load ptr, ptr %t78 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str519) - %t80 = call ptr @fn_val(ptr @.str520, ptr @.str521) + call void @fn_emit(ptr @.str554) + %t80 = call ptr @fn_val(ptr @.str555, ptr @.str556) store ptr %t80, ptr %retval br label %ret ifend17: %t81 = load ptr, ptr %t0 - %t82 = call i32 @fn_streq(ptr %t81, ptr @.str522) + %t82 = call i32 @fn_str_eq(ptr %t81, ptr @.str557) %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %then18, label %ifend20 then18: @@ -12625,35 +12654,35 @@ then18: %t85 = call ptr @fn_arg_code(ptr %t84, i32 0) store ptr %t85, ptr %t86 %t87 = load ptr, ptr %t86 - %t88 = call ptr @fn_sconcat(ptr %t87, ptr @.str524) - %t89 = call ptr @fn_sconcat(ptr @.str523, ptr %t88) + %t88 = call ptr @fn_str_concat(ptr %t87, ptr @.str559) + %t89 = call ptr @fn_str_concat(ptr @.str558, ptr %t88) %t90 = call ptr @fn_emit_bind(ptr %t89) store ptr %t90, ptr %t91 %t92 = load ptr, ptr %t91 - %t93 = call ptr @fn_sconcat(ptr %t92, ptr @.str526) - %t94 = call ptr @fn_sconcat(ptr @.str525, ptr %t93) + %t93 = call ptr @fn_str_concat(ptr %t92, ptr @.str561) + %t94 = call ptr @fn_str_concat(ptr @.str560, ptr %t93) %t95 = call ptr @fn_emit_bind(ptr %t94) - %t96 = call ptr @fn_val(ptr %t95, ptr @.str527) + %t96 = call ptr @fn_val(ptr %t95, ptr @.str562) store ptr %t96, ptr %retval br label %ret ifend20: %t97 = load ptr, ptr %t0 - %t98 = call i32 @fn_streq(ptr %t97, ptr @.str528) + %t98 = call i32 @fn_str_eq(ptr %t97, ptr @.str563) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then21, label %ifend23 then21: - %t100 = call ptr @fn_emit_bind(ptr @.str529) + %t100 = call ptr @fn_emit_bind(ptr @.str564) store ptr %t100, ptr %t101 %t102 = load ptr, ptr %t101 - %t103 = call ptr @fn_sconcat(ptr %t102, ptr @.str531) - %t104 = call ptr @fn_sconcat(ptr @.str530, ptr %t103) + %t103 = call ptr @fn_str_concat(ptr %t102, ptr @.str566) + %t104 = call ptr @fn_str_concat(ptr @.str565, ptr %t103) %t105 = call ptr @fn_emit_bind(ptr %t104) - %t106 = call ptr @fn_val(ptr %t105, ptr @.str532) + %t106 = call ptr @fn_val(ptr %t105, ptr @.str567) store ptr %t106, ptr %retval br label %ret ifend23: %t107 = load ptr, ptr %t0 - %t108 = call i32 @fn_streq(ptr %t107, ptr @.str533) + %t108 = call i32 @fn_str_eq(ptr %t107, ptr @.str568) %t109 = icmp ne i32 %t108, 0 br i1 %t109, label %then24, label %ifend26 then24: @@ -12665,25 +12694,25 @@ then24: store ptr %t114, ptr %t115 %t116 = call ptr @fn_nreg() store ptr %t116, ptr %t117 - call void @fn_emit(ptr @.str534) + call void @fn_emit(ptr @.str569) %t118 = load ptr, ptr %t117 call void @fn_emit(ptr %t118) - call void @fn_emit(ptr @.str535) + call void @fn_emit(ptr @.str570) %t119 = load ptr, ptr %t112 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str536) + call void @fn_emit(ptr @.str571) %t120 = load ptr, ptr %t115 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str537) + call void @fn_emit(ptr @.str572) %t121 = load ptr, ptr %t117 - %t122 = call ptr @fn_sconcat(ptr @.str538, ptr %t121) + %t122 = call ptr @fn_str_concat(ptr @.str573, ptr %t121) %t123 = call ptr @fn_emit_bind(ptr %t122) - %t124 = call ptr @fn_val(ptr %t123, ptr @.str539) + %t124 = call ptr @fn_val(ptr %t123, ptr @.str574) store ptr %t124, ptr %retval br label %ret ifend26: %t125 = load ptr, ptr %t0 - %t126 = call i32 @fn_streq(ptr %t125, ptr @.str540) + %t126 = call i32 @fn_str_eq(ptr %t125, ptr @.str575) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then27, label %ifend29 then27: @@ -12698,29 +12727,29 @@ then27: store ptr %t135, ptr %t136 %t137 = call ptr @fn_nreg() store ptr %t137, ptr %t138 - call void @fn_emit(ptr @.str541) + call void @fn_emit(ptr @.str576) %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str542) + call void @fn_emit(ptr @.str577) %t140 = load ptr, ptr %t130 call void @fn_emit(ptr %t140) - call void @fn_emit(ptr @.str543) + call void @fn_emit(ptr @.str578) %t141 = load ptr, ptr %t133 call void @fn_emit(ptr %t141) - call void @fn_emit(ptr @.str544) - call void @fn_emit(ptr @.str545) + call void @fn_emit(ptr @.str579) + call void @fn_emit(ptr @.str580) %t142 = load ptr, ptr %t136 call void @fn_emit(ptr %t142) - call void @fn_emit(ptr @.str546) + call void @fn_emit(ptr @.str581) %t143 = load ptr, ptr %t138 call void @fn_emit(ptr %t143) - call void @fn_emit(ptr @.str547) - %t144 = call ptr @fn_val(ptr @.str548, ptr @.str549) + call void @fn_emit(ptr @.str582) + %t144 = call ptr @fn_val(ptr @.str583, ptr @.str584) store ptr %t144, ptr %retval br label %ret ifend29: %t145 = load ptr, ptr %t0 - %t146 = call i32 @fn_streq(ptr %t145, ptr @.str550) + %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str585) %t147 = icmp ne i32 %t146, 0 br i1 %t147, label %then30, label %ifend32 then30: @@ -12732,25 +12761,25 @@ then30: store ptr %t152, ptr %t153 %t154 = call ptr @fn_nreg() store ptr %t154, ptr %t155 - call void @fn_emit(ptr @.str551) + call void @fn_emit(ptr @.str586) %t156 = load ptr, ptr %t155 call void @fn_emit(ptr %t156) - call void @fn_emit(ptr @.str552) + call void @fn_emit(ptr @.str587) %t157 = load ptr, ptr %t150 call void @fn_emit(ptr %t157) - call void @fn_emit(ptr @.str553) + call void @fn_emit(ptr @.str588) %t158 = load ptr, ptr %t153 call void @fn_emit(ptr %t158) - call void @fn_emit(ptr @.str554) + call void @fn_emit(ptr @.str589) %t159 = load ptr, ptr %t155 - %t160 = call ptr @fn_sconcat(ptr @.str555, ptr %t159) + %t160 = call ptr @fn_str_concat(ptr @.str590, ptr %t159) %t161 = call ptr @fn_emit_bind(ptr %t160) - %t162 = call ptr @fn_val(ptr %t161, ptr @.str556) + %t162 = call ptr @fn_val(ptr %t161, ptr @.str591) store ptr %t162, ptr %retval br label %ret ifend32: %t163 = load ptr, ptr %t0 - %t164 = call i32 @fn_streq(ptr %t163, ptr @.str557) + %t164 = call i32 @fn_str_eq(ptr %t163, ptr @.str592) %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then33, label %ifend35 then33: @@ -12765,29 +12794,29 @@ then33: store ptr %t173, ptr %t174 %t175 = call ptr @fn_nreg() store ptr %t175, ptr %t176 - call void @fn_emit(ptr @.str558) + call void @fn_emit(ptr @.str593) %t177 = load ptr, ptr %t176 call void @fn_emit(ptr %t177) - call void @fn_emit(ptr @.str559) + call void @fn_emit(ptr @.str594) %t178 = load ptr, ptr %t168 call void @fn_emit(ptr %t178) - call void @fn_emit(ptr @.str560) + call void @fn_emit(ptr @.str595) %t179 = load ptr, ptr %t171 call void @fn_emit(ptr %t179) - call void @fn_emit(ptr @.str561) - call void @fn_emit(ptr @.str562) + call void @fn_emit(ptr @.str596) + call void @fn_emit(ptr @.str597) %t180 = load ptr, ptr %t174 call void @fn_emit(ptr %t180) - call void @fn_emit(ptr @.str563) + call void @fn_emit(ptr @.str598) %t181 = load ptr, ptr %t176 call void @fn_emit(ptr %t181) - call void @fn_emit(ptr @.str564) - %t182 = call ptr @fn_val(ptr @.str565, ptr @.str566) + call void @fn_emit(ptr @.str599) + %t182 = call ptr @fn_val(ptr @.str600, ptr @.str601) store ptr %t182, ptr %retval br label %ret ifend35: %t183 = load ptr, ptr %t0 - %t184 = call i32 @fn_streq(ptr %t183, ptr @.str567) + %t184 = call i32 @fn_str_eq(ptr %t183, ptr @.str602) %t185 = icmp ne i32 %t184, 0 br i1 %t185, label %then36, label %ifend38 then36: @@ -12803,12 +12832,12 @@ then36: %t195 = load ptr, ptr %t194 %t196 = getelementptr inbounds %Cmp_Val, ptr %t195, i32 0, i32 0 %t197 = load ptr, ptr %t196 - %t198 = call ptr @fn_val(ptr %t197, ptr @.str568) + %t198 = call ptr @fn_val(ptr %t197, ptr @.str603) store ptr %t198, ptr %retval br label %ret ifend38: %t199 = load ptr, ptr %t0 - %t200 = call i32 @fn_streq(ptr %t199, ptr @.str569) + %t200 = call i32 @fn_str_eq(ptr %t199, ptr @.str604) %t201 = icmp ne i32 %t200, 0 br i1 %t201, label %then39, label %ifend41 then39: @@ -12824,12 +12853,12 @@ then39: %t211 = load ptr, ptr %t210 %t212 = getelementptr inbounds %Cmp_Val, ptr %t211, i32 0, i32 0 %t213 = load ptr, ptr %t212 - %t214 = call ptr @fn_val(ptr %t213, ptr @.str570) + %t214 = call ptr @fn_val(ptr %t213, ptr @.str605) store ptr %t214, ptr %retval br label %ret ifend41: %t215 = load ptr, ptr %t0 - %t216 = call i32 @fn_streq(ptr %t215, ptr @.str571) + %t216 = call i32 @fn_str_eq(ptr %t215, ptr @.str606) %t217 = icmp ne i32 %t216, 0 br i1 %t217, label %then42, label %ifend44 then42: @@ -12837,45 +12866,45 @@ then42: %t219 = icmp ne i32 %t218, 0 br i1 %t219, label %then45, label %ifend47 then45: - %t220 = call ptr @fn_val(ptr @.str572, ptr @.str573) + %t220 = call ptr @fn_val(ptr @.str607, ptr @.str608) store ptr %t220, ptr %retval br label %ret ifend47: - %t221 = call ptr @fn_val(ptr @.str574, ptr @.str575) + %t221 = call ptr @fn_val(ptr @.str609, ptr @.str610) store ptr %t221, ptr %retval br label %ret ifend44: %t222 = load ptr, ptr %t0 - %t223 = call i32 @fn_streq(ptr %t222, ptr @.str576) + %t223 = call i32 @fn_str_eq(ptr %t222, ptr @.str611) %t224 = icmp ne i32 %t223, 0 br i1 %t224, label %then48, label %ifend50 then48: - %t225 = call ptr @fn_val(ptr @.str577, ptr @.str578) + %t225 = call ptr @fn_val(ptr @.str612, ptr @.str613) store ptr %t225, ptr %retval br label %ret ifend50: %t226 = load ptr, ptr %t0 - %t227 = call i32 @fn_streq(ptr %t226, ptr @.str579) + %t227 = call i32 @fn_str_eq(ptr %t226, ptr @.str614) %t228 = icmp ne i32 %t227, 0 br i1 %t228, label %then51, label %ifend53 then51: - %t229 = call ptr @fn_emit_bind(ptr @.str580) - %t230 = call ptr @fn_val(ptr %t229, ptr @.str581) + %t229 = call ptr @fn_emit_bind(ptr @.str615) + %t230 = call ptr @fn_val(ptr %t229, ptr @.str616) store ptr %t230, ptr %retval br label %ret ifend53: %t231 = load ptr, ptr %t0 - %t232 = call i32 @fn_streq(ptr %t231, ptr @.str582) + %t232 = call i32 @fn_str_eq(ptr %t231, ptr @.str617) %t233 = icmp ne i32 %t232, 0 br i1 %t233, label %then54, label %ifend56 then54: - %t234 = call ptr @fn_emit_bind(ptr @.str583) - %t235 = call ptr @fn_val(ptr %t234, ptr @.str584) + %t234 = call ptr @fn_emit_bind(ptr @.str618) + %t235 = call ptr @fn_val(ptr %t234, ptr @.str619) store ptr %t235, ptr %retval br label %ret ifend56: %t236 = load ptr, ptr %t0 - %t237 = call i32 @fn_streq(ptr %t236, ptr @.str585) + %t237 = call i32 @fn_str_eq(ptr %t236, ptr @.str620) %t238 = icmp ne i32 %t237, 0 br i1 %t238, label %then57, label %ifend59 then57: @@ -12891,25 +12920,25 @@ then57: %t248 = load ptr, ptr %t1 %t249 = call ptr @fn_arg_code(ptr %t248, i32 3) store ptr %t249, ptr %t250 - call void @fn_emit(ptr @.str586) + call void @fn_emit(ptr @.str621) %t251 = load ptr, ptr %t241 call void @fn_emit(ptr %t251) - call void @fn_emit(ptr @.str587) + call void @fn_emit(ptr @.str622) %t252 = load ptr, ptr %t244 call void @fn_emit(ptr %t252) - call void @fn_emit(ptr @.str588) + call void @fn_emit(ptr @.str623) %t253 = load ptr, ptr %t247 call void @fn_emit(ptr %t253) - call void @fn_emit(ptr @.str589) + call void @fn_emit(ptr @.str624) %t254 = load ptr, ptr %t250 call void @fn_emit(ptr %t254) - call void @fn_emit(ptr @.str590) - %t255 = call ptr @fn_val(ptr @.str591, ptr @.str592) + call void @fn_emit(ptr @.str625) + %t255 = call ptr @fn_val(ptr @.str626, ptr @.str627) store ptr %t255, ptr %retval br label %ret ifend59: %t256 = load ptr, ptr %t0 - %t257 = call i32 @fn_streq(ptr %t256, ptr @.str593) + %t257 = call i32 @fn_str_eq(ptr %t256, ptr @.str628) %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %then60, label %ifend62 then60: @@ -12922,31 +12951,31 @@ then60: %t265 = load ptr, ptr %t1 %t266 = call ptr @fn_arg_code(ptr %t265, i32 2) store ptr %t266, ptr %t267 - call void @fn_emit(ptr @.str594) + call void @fn_emit(ptr @.str629) %t268 = load ptr, ptr %t261 call void @fn_emit(ptr %t268) - call void @fn_emit(ptr @.str595) + call void @fn_emit(ptr @.str630) %t269 = load ptr, ptr %t264 call void @fn_emit(ptr %t269) - call void @fn_emit(ptr @.str596) + call void @fn_emit(ptr @.str631) %t270 = load ptr, ptr %t267 call void @fn_emit(ptr %t270) - call void @fn_emit(ptr @.str597) - %t271 = call ptr @fn_val(ptr @.str598, ptr @.str599) + call void @fn_emit(ptr @.str632) + %t271 = call ptr @fn_val(ptr @.str633, ptr @.str634) store ptr %t271, ptr %retval br label %ret ifend62: %t272 = load ptr, ptr %t0 - %t273 = call i32 @fn_streq(ptr %t272, ptr @.str600) + %t273 = call i32 @fn_str_eq(ptr %t272, ptr @.str635) %t274 = icmp ne i32 %t273, 0 br i1 %t274, label %then63, label %ifend65 then63: - call void @fn_emit(ptr @.str601) - %t275 = call ptr @fn_val(ptr @.str602, ptr @.str603) + call void @fn_emit(ptr @.str636) + %t275 = call ptr @fn_val(ptr @.str637, ptr @.str638) store ptr %t275, ptr %retval br label %ret ifend65: - %t276 = call ptr @fn_val(ptr @.str604, ptr @.str605) + %t276 = call ptr @fn_val(ptr @.str639, ptr @.str640) store ptr %t276, ptr %retval br label %ret ret: @@ -12963,14 +12992,14 @@ entry: %t3 = alloca i32 store ptr %arg_name, ptr %t0 %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str606) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str641) %t6 = icmp ne i32 %t5, 0 %t7 = zext i1 %t6 to i32 store i32 %t7, ptr %t3 br i1 %t6, label %scend1, label %sc0 sc0: %t8 = load ptr, ptr %t0 - %t9 = call i32 @fn_streq(ptr %t8, ptr @.str607) + %t9 = call i32 @fn_str_eq(ptr %t8, ptr @.str642) %t10 = icmp ne i32 %t9, 0 %t11 = zext i1 %t10 to i32 store i32 %t11, ptr %t3 @@ -12983,7 +13012,7 @@ scend1: br i1 %t13, label %scend3, label %sc2 sc2: %t15 = load ptr, ptr %t0 - %t16 = call i32 @fn_streq(ptr %t15, ptr @.str608) + %t16 = call i32 @fn_str_eq(ptr %t15, ptr @.str643) %t17 = icmp ne i32 %t16, 0 %t18 = zext i1 %t17 to i32 store i32 %t18, ptr %t2 @@ -12996,7 +13025,7 @@ scend3: br i1 %t20, label %scend5, label %sc4 sc4: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str609) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str644) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t1 @@ -13032,7 +13061,7 @@ entry: store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str610) + %t3 = call i32 @fn_str_eq(ptr %t2, ptr @.str645) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -13048,14 +13077,14 @@ then0: %t14 = load ptr, ptr %t13 %t15 = getelementptr inbounds %Cmp_Val, ptr %t14, i32 0, i32 0 %t16 = load ptr, ptr %t15 - %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str612) - %t18 = call ptr @fn_sconcat(ptr @.str611, ptr %t17) + %t17 = call ptr @fn_str_concat(ptr %t16, ptr @.str647) + %t18 = call ptr @fn_str_concat(ptr @.str646, ptr %t17) %t19 = call ptr @fn_emit_bind(ptr %t18) store ptr %t19, ptr %t20 %t21 = load ptr, ptr %t13 %t22 = getelementptr inbounds %Cmp_Val, ptr %t21, i32 0, i32 0 %t23 = load ptr, ptr %t22 - %t24 = call ptr @fn_sconcat(ptr @.str613, ptr %t23) + %t24 = call ptr @fn_str_concat(ptr @.str648, ptr %t23) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 %t27 = load ptr, ptr %t20 @@ -13063,25 +13092,25 @@ then0: %t29 = load ptr, ptr %t13 %t30 = getelementptr inbounds %Cmp_Val, ptr %t29, i32 0, i32 0 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_sconcat(ptr @.str616, ptr %t31) - %t33 = call ptr @fn_sconcat(ptr %t28, ptr %t32) - %t34 = call ptr @fn_sconcat(ptr @.str615, ptr %t33) - %t35 = call ptr @fn_sconcat(ptr %t27, ptr %t34) - %t36 = call ptr @fn_sconcat(ptr @.str614, ptr %t35) + %t32 = call ptr @fn_str_concat(ptr @.str651, ptr %t31) + %t33 = call ptr @fn_str_concat(ptr %t28, ptr %t32) + %t34 = call ptr @fn_str_concat(ptr @.str650, ptr %t33) + %t35 = call ptr @fn_str_concat(ptr %t27, ptr %t34) + %t36 = call ptr @fn_str_concat(ptr @.str649, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) - %t38 = call ptr @fn_val(ptr %t37, ptr @.str617) + %t38 = call ptr @fn_val(ptr %t37, ptr @.str652) store ptr %t38, ptr %retval br label %ret ifend2: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str618) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str653) %t42 = icmp ne i32 %t41, 0 %t43 = zext i1 %t42 to i32 store i32 %t43, ptr %t39 br i1 %t42, label %scend4, label %sc3 sc3: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str619) + %t45 = call i32 @fn_str_eq(ptr %t44, ptr @.str654) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t39 @@ -13109,13 +13138,13 @@ then5: %t65 = load ptr, ptr %t64 %t66 = call ptr @fn_emit_expr(ptr %t65) store ptr %t66, ptr %t67 - store ptr @.str620, ptr %t68 + store ptr @.str655, ptr %t68 %t69 = load ptr, ptr %t0 - %t70 = call i32 @fn_streq(ptr %t69, ptr @.str621) + %t70 = call i32 @fn_str_eq(ptr %t69, ptr @.str656) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then8, label %ifend10 then8: - store ptr @.str622, ptr %t68 + store ptr @.str657, ptr %t68 br label %ifend10 ifend10: %t72 = load ptr, ptr %t68 @@ -13125,11 +13154,11 @@ ifend10: %t76 = load ptr, ptr %t67 %t77 = getelementptr inbounds %Cmp_Val, ptr %t76, i32 0, i32 0 %t78 = load ptr, ptr %t77 - %t79 = call ptr @fn_sconcat(ptr @.str625, ptr %t78) - %t80 = call ptr @fn_sconcat(ptr %t75, ptr %t79) - %t81 = call ptr @fn_sconcat(ptr @.str624, ptr %t80) - %t82 = call ptr @fn_sconcat(ptr %t72, ptr %t81) - %t83 = call ptr @fn_sconcat(ptr @.str623, ptr %t82) + %t79 = call ptr @fn_str_concat(ptr @.str660, ptr %t78) + %t80 = call ptr @fn_str_concat(ptr %t75, ptr %t79) + %t81 = call ptr @fn_str_concat(ptr @.str659, ptr %t80) + %t82 = call ptr @fn_str_concat(ptr %t72, ptr %t81) + %t83 = call ptr @fn_str_concat(ptr @.str658, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 %t86 = load ptr, ptr %t85 @@ -13139,13 +13168,13 @@ ifend10: %t90 = load ptr, ptr %t67 %t91 = getelementptr inbounds %Cmp_Val, ptr %t90, i32 0, i32 0 %t92 = load ptr, ptr %t91 - %t93 = call ptr @fn_sconcat(ptr @.str628, ptr %t92) - %t94 = call ptr @fn_sconcat(ptr %t89, ptr %t93) - %t95 = call ptr @fn_sconcat(ptr @.str627, ptr %t94) - %t96 = call ptr @fn_sconcat(ptr %t86, ptr %t95) - %t97 = call ptr @fn_sconcat(ptr @.str626, ptr %t96) + %t93 = call ptr @fn_str_concat(ptr @.str663, ptr %t92) + %t94 = call ptr @fn_str_concat(ptr %t89, ptr %t93) + %t95 = call ptr @fn_str_concat(ptr @.str662, ptr %t94) + %t96 = call ptr @fn_str_concat(ptr %t86, ptr %t95) + %t97 = call ptr @fn_str_concat(ptr @.str661, ptr %t96) %t98 = call ptr @fn_emit_bind(ptr %t97) - %t99 = call ptr @fn_val(ptr %t98, ptr @.str629) + %t99 = call ptr @fn_val(ptr %t98, ptr @.str664) store ptr %t99, ptr %retval br label %ret ifend7: @@ -13182,9 +13211,9 @@ ifend7: %t130 = load ptr, ptr %t126 %t131 = getelementptr inbounds %Cmp_Val, ptr %t130, i32 0, i32 0 %t132 = load ptr, ptr %t131 - %t133 = call ptr @fn_sconcat(ptr @.str631, ptr %t132) - %t134 = call ptr @fn_sconcat(ptr %t129, ptr %t133) - %t135 = call ptr @fn_sconcat(ptr @.str630, ptr %t134) + %t133 = call ptr @fn_str_concat(ptr @.str666, ptr %t132) + %t134 = call ptr @fn_str_concat(ptr %t129, ptr %t133) + %t135 = call ptr @fn_str_concat(ptr @.str665, ptr %t134) %t136 = call ptr @fn_emit_bind(ptr %t135) store ptr %t136, ptr %t137 %t138 = load ptr, ptr %t137 @@ -13194,20 +13223,20 @@ ifend7: %t142 = load ptr, ptr %t126 %t143 = getelementptr inbounds %Cmp_Val, ptr %t142, i32 0, i32 0 %t144 = load ptr, ptr %t143 - %t145 = call ptr @fn_sconcat(ptr @.str634, ptr %t144) - %t146 = call ptr @fn_sconcat(ptr %t141, ptr %t145) - %t147 = call ptr @fn_sconcat(ptr @.str633, ptr %t146) - %t148 = call ptr @fn_sconcat(ptr %t138, ptr %t147) - %t149 = call ptr @fn_sconcat(ptr @.str632, ptr %t148) + %t145 = call ptr @fn_str_concat(ptr @.str669, ptr %t144) + %t146 = call ptr @fn_str_concat(ptr %t141, ptr %t145) + %t147 = call ptr @fn_str_concat(ptr @.str668, ptr %t146) + %t148 = call ptr @fn_str_concat(ptr %t138, ptr %t147) + %t149 = call ptr @fn_str_concat(ptr @.str667, ptr %t148) %t150 = call ptr @fn_emit_bind(ptr %t149) store ptr %t150, ptr %t151 %t152 = load ptr, ptr %t117 %t153 = getelementptr inbounds %Cmp_Val, ptr %t152, i32 0, i32 0 %t154 = load ptr, ptr %t153 %t155 = load ptr, ptr %t151 - %t156 = call ptr @fn_sconcat(ptr @.str636, ptr %t155) - %t157 = call ptr @fn_sconcat(ptr %t154, ptr %t156) - %t158 = call ptr @fn_sconcat(ptr @.str635, ptr %t157) + %t156 = call ptr @fn_str_concat(ptr @.str671, ptr %t155) + %t157 = call ptr @fn_str_concat(ptr %t154, ptr %t156) + %t158 = call ptr @fn_str_concat(ptr @.str670, ptr %t157) %t159 = call ptr @fn_emit_bind(ptr %t158) store ptr %t159, ptr %t160 %t161 = load ptr, ptr %t160 @@ -13215,13 +13244,13 @@ ifend7: %t163 = getelementptr inbounds %Cmp_Val, ptr %t162, i32 0, i32 0 %t164 = load ptr, ptr %t163 %t165 = load ptr, ptr %t151 - %t166 = call ptr @fn_sconcat(ptr @.str639, ptr %t165) - %t167 = call ptr @fn_sconcat(ptr %t164, ptr %t166) - %t168 = call ptr @fn_sconcat(ptr @.str638, ptr %t167) - %t169 = call ptr @fn_sconcat(ptr %t161, ptr %t168) - %t170 = call ptr @fn_sconcat(ptr @.str637, ptr %t169) + %t166 = call ptr @fn_str_concat(ptr @.str674, ptr %t165) + %t167 = call ptr @fn_str_concat(ptr %t164, ptr %t166) + %t168 = call ptr @fn_str_concat(ptr @.str673, ptr %t167) + %t169 = call ptr @fn_str_concat(ptr %t161, ptr %t168) + %t170 = call ptr @fn_str_concat(ptr @.str672, ptr %t169) %t171 = call ptr @fn_emit_bind(ptr %t170) - %t172 = call ptr @fn_val(ptr %t171, ptr @.str640) + %t172 = call ptr @fn_val(ptr %t171, ptr @.str675) store ptr %t172, ptr %retval br label %ret ret: @@ -13236,13 +13265,13 @@ entry: %t5 = alloca ptr store ptr %arg_llt, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call ptr @fn_sconcat(ptr %t1, ptr @.str642) - %t3 = call ptr @fn_sconcat(ptr @.str641, ptr %t2) + %t2 = call ptr @fn_str_concat(ptr %t1, ptr @.str677) + %t3 = call ptr @fn_str_concat(ptr @.str676, ptr %t2) %t4 = call ptr @fn_emit_bind(ptr %t3) store ptr %t4, ptr %t5 %t6 = load ptr, ptr %t5 - %t7 = call ptr @fn_sconcat(ptr %t6, ptr @.str644) - %t8 = call ptr @fn_sconcat(ptr @.str643, ptr %t7) + %t7 = call ptr @fn_str_concat(ptr %t6, ptr @.str679) + %t8 = call ptr @fn_str_concat(ptr @.str678, ptr %t7) %t9 = call ptr @fn_emit_bind(ptr %t8) store ptr %t9, ptr %retval br label %ret @@ -13275,7 +13304,7 @@ entry: %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str645) + call void @fn_perr(ptr @.str680) br label %ifend2 ifend2: %t8 = load ptr, ptr %t0 @@ -13285,8 +13314,8 @@ ifend2: %t12 = call ptr @fn_emit_sizeof(ptr %t11) store ptr %t12, ptr %t13 %t14 = load ptr, ptr %t13 - %t15 = call ptr @fn_sconcat(ptr %t14, ptr @.str647) - %t16 = call ptr @fn_sconcat(ptr @.str646, ptr %t15) + %t15 = call ptr @fn_str_concat(ptr %t14, ptr @.str682) + %t16 = call ptr @fn_str_concat(ptr @.str681, ptr %t15) %t17 = call ptr @fn_emit_bind(ptr %t16) store ptr %t17, ptr %t18 store i32 0, ptr %t19 @@ -13314,32 +13343,32 @@ wbody4: store ptr %t36, ptr %t37 %t38 = call ptr @fn_nreg() store ptr %t38, ptr %t39 - call void @fn_emit(ptr @.str648) + call void @fn_emit(ptr @.str683) %t40 = load ptr, ptr %t39 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str649) + call void @fn_emit(ptr @.str684) %t41 = load ptr, ptr %t10 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str650) + call void @fn_emit(ptr @.str685) %t42 = load ptr, ptr %t18 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str651) + call void @fn_emit(ptr @.str686) %t43 = load i32, ptr %t19 %t44 = call ptr @fn_itoa(i32 %t43) call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str652) + call void @fn_emit(ptr @.str687) %t45 = load ptr, ptr %t37 %t46 = getelementptr inbounds %Cmp_Node, ptr %t45, i32 0, i32 3 %t47 = load ptr, ptr %t46 %t48 = call ptr @fn_llty(ptr %t47) store ptr %t48, ptr %t49 - store ptr @.str653, ptr %t50 + store ptr @.str688, ptr %t50 %t51 = load ptr, ptr %t49 - %t52 = call i32 @fn_streq(ptr %t51, ptr @.str654) + %t52 = call i32 @fn_str_eq(ptr %t51, ptr @.str689) %t53 = icmp ne i32 %t52, 0 br i1 %t53, label %then6, label %ifend8 then6: - store ptr @.str655, ptr %t50 + store ptr @.str690, ptr %t50 br label %ifend8 ifend8: %t54 = load ptr, ptr %t37 @@ -13361,16 +13390,16 @@ then9: store ptr %t67, ptr %t50 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str656) + call void @fn_emit(ptr @.str691) %t68 = load ptr, ptr %t49 call void @fn_emit(ptr %t68) - call void @fn_emit(ptr @.str657) + call void @fn_emit(ptr @.str692) %t69 = load ptr, ptr %t50 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str658) + call void @fn_emit(ptr @.str693) %t70 = load ptr, ptr %t39 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str659) + call void @fn_emit(ptr @.str694) %t71 = load i32, ptr %t19 %t72 = add i32 %t71, 1 store i32 %t72, ptr %t19 @@ -13396,52 +13425,52 @@ entry: %t14 = alloca ptr %t19 = alloca ptr store ptr %arg_ty, ptr %t0 - %t1 = call ptr @fn_emit_sizeof(ptr @.str660) + %t1 = call ptr @fn_emit_sizeof(ptr @.str695) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t2 - %t4 = call ptr @fn_sconcat(ptr %t3, ptr @.str662) - %t5 = call ptr @fn_sconcat(ptr @.str661, ptr %t4) + %t4 = call ptr @fn_str_concat(ptr %t3, ptr @.str697) + %t5 = call ptr @fn_str_concat(ptr @.str696, ptr %t4) %t6 = call ptr @fn_emit_bind(ptr %t5) store ptr %t6, ptr %t7 %t8 = call ptr @fn_nreg() store ptr %t8, ptr %t9 - call void @fn_emit(ptr @.str663) + call void @fn_emit(ptr @.str698) %t10 = load ptr, ptr %t9 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str664) + call void @fn_emit(ptr @.str699) %t11 = load ptr, ptr %t7 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str665) - call void @fn_emit(ptr @.str666) + call void @fn_emit(ptr @.str700) + call void @fn_emit(ptr @.str701) %t12 = load ptr, ptr %t9 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str667) + call void @fn_emit(ptr @.str702) %t13 = call ptr @fn_nreg() store ptr %t13, ptr %t14 - call void @fn_emit(ptr @.str668) + call void @fn_emit(ptr @.str703) %t15 = load ptr, ptr %t14 call void @fn_emit(ptr %t15) - call void @fn_emit(ptr @.str669) + call void @fn_emit(ptr @.str704) %t16 = load ptr, ptr %t7 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str670) - call void @fn_emit(ptr @.str671) + call void @fn_emit(ptr @.str705) + call void @fn_emit(ptr @.str706) %t17 = load ptr, ptr %t14 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str672) + call void @fn_emit(ptr @.str707) %t18 = call ptr @fn_nreg() store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str673) + call void @fn_emit(ptr @.str708) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str674) + call void @fn_emit(ptr @.str709) %t21 = load ptr, ptr %t7 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str675) - call void @fn_emit(ptr @.str676) + call void @fn_emit(ptr @.str710) + call void @fn_emit(ptr @.str711) %t22 = load ptr, ptr %t19 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str677) + call void @fn_emit(ptr @.str712) %t23 = load ptr, ptr %t7 %t24 = load ptr, ptr %t0 %t25 = call ptr @fn_val(ptr %t23, ptr %t24) @@ -13462,17 +13491,17 @@ entry: store i32 %arg_i, ptr %t1 %t2 = call ptr @fn_nreg() store ptr %t2, ptr %t3 - call void @fn_emit(ptr @.str678) + call void @fn_emit(ptr @.str713) %t4 = load ptr, ptr %t3 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str679) + call void @fn_emit(ptr @.str714) %t5 = load ptr, ptr %t0 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str680) + call void @fn_emit(ptr @.str715) %t6 = load i32, ptr %t1 %t7 = call ptr @fn_itoa(i32 %t6) call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str681) + call void @fn_emit(ptr @.str716) %t8 = load ptr, ptr %t3 store ptr %t8, ptr %retval br label %ret @@ -13503,9 +13532,9 @@ entry: %t13 = call ptr @fn_slice_field(ptr %t12, i32 1) store ptr %t13, ptr %t14 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_sconcat(ptr @.str682, ptr %t15) + %t16 = call ptr @fn_str_concat(ptr @.str717, ptr %t15) %t17 = call ptr @fn_emit_bind(ptr %t16) - %t18 = call ptr @fn_val(ptr %t17, ptr @.str683) + %t18 = call ptr @fn_val(ptr %t17, ptr @.str718) store ptr %t18, ptr %retval br label %ret ret: @@ -13573,102 +13602,102 @@ entry: %t29 = call ptr @fn_slice_field(ptr %t28, i32 0) store ptr %t29, ptr %t30 %t31 = load ptr, ptr %t24 - %t32 = call ptr @fn_sconcat(ptr @.str684, ptr %t31) + %t32 = call ptr @fn_str_concat(ptr @.str719, ptr %t31) %t33 = call ptr @fn_emit_bind(ptr %t32) store ptr %t33, ptr %t34 %t35 = load ptr, ptr %t27 - %t36 = call ptr @fn_sconcat(ptr @.str685, ptr %t35) + %t36 = call ptr @fn_str_concat(ptr @.str720, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) store ptr %t37, ptr %t38 %t39 = load ptr, ptr %t34 %t40 = load ptr, ptr %t38 - %t41 = call ptr @fn_sconcat(ptr @.str687, ptr %t40) - %t42 = call ptr @fn_sconcat(ptr %t39, ptr %t41) - %t43 = call ptr @fn_sconcat(ptr @.str686, ptr %t42) + %t41 = call ptr @fn_str_concat(ptr @.str722, ptr %t40) + %t42 = call ptr @fn_str_concat(ptr %t39, ptr %t41) + %t43 = call ptr @fn_str_concat(ptr @.str721, ptr %t42) %t44 = call ptr @fn_emit_bind(ptr %t43) store ptr %t44, ptr %t45 - %t46 = call ptr @fn_lbl(ptr @.str688) + %t46 = call ptr @fn_lbl(ptr @.str723) store ptr %t46, ptr %t47 - %t48 = call ptr @fn_lbl(ptr @.str689) + %t48 = call ptr @fn_lbl(ptr @.str724) store ptr %t48, ptr %t49 - call void @fn_emit(ptr @.str690) + call void @fn_emit(ptr @.str725) %t50 = load ptr, ptr %t45 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str691) + call void @fn_emit(ptr @.str726) %t51 = load ptr, ptr %t47 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str692) + call void @fn_emit(ptr @.str727) %t52 = load ptr, ptr %t49 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str693) + call void @fn_emit(ptr @.str728) %t53 = load ptr, ptr %t47 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str694) + call void @fn_emit(ptr @.str729) %t54 = load ptr, ptr %t38 - %t55 = call ptr @fn_sconcat(ptr %t54, ptr @.str696) - %t56 = call ptr @fn_sconcat(ptr @.str695, ptr %t55) + %t55 = call ptr @fn_str_concat(ptr %t54, ptr @.str731) + %t56 = call ptr @fn_str_concat(ptr @.str730, ptr %t55) %t57 = call ptr @fn_emit_bind(ptr %t56) store ptr %t57, ptr %t58 %t59 = load ptr, ptr %t38 - %t60 = call ptr @fn_sconcat(ptr %t59, ptr @.str698) - %t61 = call ptr @fn_sconcat(ptr @.str697, ptr %t60) + %t60 = call ptr @fn_str_concat(ptr %t59, ptr @.str733) + %t61 = call ptr @fn_str_concat(ptr @.str732, ptr %t60) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 %t64 = load ptr, ptr %t63 %t65 = load ptr, ptr %t58 - %t66 = call ptr @fn_sconcat(ptr @.str700, ptr %t65) - %t67 = call ptr @fn_sconcat(ptr %t64, ptr %t66) - %t68 = call ptr @fn_sconcat(ptr @.str699, ptr %t67) + %t66 = call ptr @fn_str_concat(ptr @.str735, ptr %t65) + %t67 = call ptr @fn_str_concat(ptr %t64, ptr %t66) + %t68 = call ptr @fn_str_concat(ptr @.str734, ptr %t67) %t69 = call ptr @fn_emit_bind(ptr %t68) store ptr %t69, ptr %t70 %t71 = load ptr, ptr %t17 %t72 = call ptr @fn_emit_sizeof(ptr %t71) store ptr %t72, ptr %t73 %t74 = load ptr, ptr %t70 - %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str702) - %t76 = call ptr @fn_sconcat(ptr @.str701, ptr %t75) + %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str737) + %t76 = call ptr @fn_str_concat(ptr @.str736, ptr %t75) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 %t79 = load ptr, ptr %t78 %t80 = load ptr, ptr %t73 - %t81 = call ptr @fn_sconcat(ptr @.str704, ptr %t80) - %t82 = call ptr @fn_sconcat(ptr %t79, ptr %t81) - %t83 = call ptr @fn_sconcat(ptr @.str703, ptr %t82) + %t81 = call ptr @fn_str_concat(ptr @.str739, ptr %t80) + %t82 = call ptr @fn_str_concat(ptr %t79, ptr %t81) + %t83 = call ptr @fn_str_concat(ptr @.str738, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 %t86 = load ptr, ptr %t30 - %t87 = call ptr @fn_sconcat(ptr @.str705, ptr %t86) + %t87 = call ptr @fn_str_concat(ptr @.str740, ptr %t86) %t88 = call ptr @fn_emit_bind(ptr %t87) store ptr %t88, ptr %t89 %t90 = load ptr, ptr %t89 %t91 = load ptr, ptr %t85 - %t92 = call ptr @fn_sconcat(ptr %t91, ptr @.str708) - %t93 = call ptr @fn_sconcat(ptr @.str707, ptr %t92) - %t94 = call ptr @fn_sconcat(ptr %t90, ptr %t93) - %t95 = call ptr @fn_sconcat(ptr @.str706, ptr %t94) + %t92 = call ptr @fn_str_concat(ptr %t91, ptr @.str743) + %t93 = call ptr @fn_str_concat(ptr @.str742, ptr %t92) + %t94 = call ptr @fn_str_concat(ptr %t90, ptr %t93) + %t95 = call ptr @fn_str_concat(ptr @.str741, ptr %t94) %t96 = call ptr @fn_emit_bind(ptr %t95) store ptr %t96, ptr %t97 - call void @fn_emit(ptr @.str709) + call void @fn_emit(ptr @.str744) %t98 = load ptr, ptr %t97 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str710) + call void @fn_emit(ptr @.str745) %t99 = load ptr, ptr %t30 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str711) - call void @fn_emit(ptr @.str712) + call void @fn_emit(ptr @.str746) + call void @fn_emit(ptr @.str747) %t100 = load ptr, ptr %t70 call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str713) + call void @fn_emit(ptr @.str748) %t101 = load ptr, ptr %t27 call void @fn_emit(ptr %t101) - call void @fn_emit(ptr @.str714) - call void @fn_emit(ptr @.str715) + call void @fn_emit(ptr @.str749) + call void @fn_emit(ptr @.str750) %t102 = load ptr, ptr %t49 call void @fn_emit(ptr %t102) - call void @fn_emit(ptr @.str716) + call void @fn_emit(ptr @.str751) %t103 = load ptr, ptr %t49 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str717) + call void @fn_emit(ptr @.str752) %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Cmp_Node, ptr %t104, i32 0, i32 7 %t106 = load ptr, ptr %t105 @@ -13679,49 +13708,49 @@ entry: %t111 = call ptr @fn_emit_expr(ptr %t110) store ptr %t111, ptr %t112 %t113 = load ptr, ptr %t30 - %t114 = call ptr @fn_sconcat(ptr @.str718, ptr %t113) + %t114 = call ptr @fn_str_concat(ptr @.str753, ptr %t113) %t115 = call ptr @fn_emit_bind(ptr %t114) store ptr %t115, ptr %t116 %t117 = call ptr @fn_nreg() store ptr %t117, ptr %t118 - call void @fn_emit(ptr @.str719) + call void @fn_emit(ptr @.str754) %t119 = load ptr, ptr %t118 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str720) + call void @fn_emit(ptr @.str755) %t120 = load ptr, ptr %t17 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str721) + call void @fn_emit(ptr @.str756) %t121 = load ptr, ptr %t116 call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str722) + call void @fn_emit(ptr @.str757) %t122 = load ptr, ptr %t34 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str723) - call void @fn_emit(ptr @.str724) + call void @fn_emit(ptr @.str758) + call void @fn_emit(ptr @.str759) %t123 = load ptr, ptr %t17 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str725) + call void @fn_emit(ptr @.str760) %t124 = load ptr, ptr %t112 %t125 = getelementptr inbounds %Cmp_Val, ptr %t124, i32 0, i32 0 %t126 = load ptr, ptr %t125 call void @fn_emit(ptr %t126) - call void @fn_emit(ptr @.str726) + call void @fn_emit(ptr @.str761) %t127 = load ptr, ptr %t118 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str727) + call void @fn_emit(ptr @.str762) %t128 = load ptr, ptr %t34 - %t129 = call ptr @fn_sconcat(ptr %t128, ptr @.str729) - %t130 = call ptr @fn_sconcat(ptr @.str728, ptr %t129) + %t129 = call ptr @fn_str_concat(ptr %t128, ptr @.str764) + %t130 = call ptr @fn_str_concat(ptr @.str763, ptr %t129) %t131 = call ptr @fn_emit_bind(ptr %t130) store ptr %t131, ptr %t132 - call void @fn_emit(ptr @.str730) + call void @fn_emit(ptr @.str765) %t133 = load ptr, ptr %t132 call void @fn_emit(ptr %t133) - call void @fn_emit(ptr @.str731) + call void @fn_emit(ptr @.str766) %t134 = load ptr, ptr %t24 call void @fn_emit(ptr %t134) - call void @fn_emit(ptr @.str732) - %t135 = call ptr @fn_val(ptr @.str733, ptr @.str734) + call void @fn_emit(ptr @.str767) + %t135 = call ptr @fn_val(ptr @.str768, ptr @.str769) store ptr %t135, ptr %retval br label %ret ret: @@ -13740,9 +13769,9 @@ entry: %t2 = load ptr, ptr %t1 %t3 = call ptr @fn_llty(ptr %t2) %t4 = load ptr, ptr %t0 - %t5 = call ptr @fn_sconcat(ptr @.str736, ptr %t4) - %t6 = call ptr @fn_sconcat(ptr %t3, ptr %t5) - %t7 = call ptr @fn_sconcat(ptr @.str735, ptr %t6) + %t5 = call ptr @fn_str_concat(ptr @.str771, ptr %t4) + %t6 = call ptr @fn_str_concat(ptr %t3, ptr %t5) + %t7 = call ptr @fn_str_concat(ptr @.str770, ptr %t6) %t8 = call ptr @fn_emit_bind(ptr %t7) store ptr %t8, ptr %t9 %t10 = load ptr, ptr %t9 @@ -13769,7 +13798,7 @@ entry: %t49 = alloca ptr %t54 = alloca ptr store ptr %arg_e, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str737) + %t1 = call ptr @fn_emit_alloca(ptr @.str772) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 4 @@ -13779,60 +13808,60 @@ entry: %t8 = load ptr, ptr %t7 %t9 = getelementptr inbounds %Cmp_Val, ptr %t8, i32 0, i32 0 %t10 = load ptr, ptr %t9 - %t11 = call ptr @fn_sconcat(ptr %t10, ptr @.str739) - %t12 = call ptr @fn_sconcat(ptr @.str738, ptr %t11) + %t11 = call ptr @fn_str_concat(ptr %t10, ptr @.str774) + %t12 = call ptr @fn_str_concat(ptr @.str773, ptr %t11) %t13 = call ptr @fn_emit_bind(ptr %t12) store ptr %t13, ptr %t14 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_sconcat(ptr %t15, ptr @.str741) - %t17 = call ptr @fn_sconcat(ptr @.str740, ptr %t16) + %t16 = call ptr @fn_str_concat(ptr %t15, ptr @.str776) + %t17 = call ptr @fn_str_concat(ptr @.str775, ptr %t16) %t18 = call ptr @fn_emit_bind(ptr %t17) store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str742) + call void @fn_emit(ptr @.str777) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str743) + call void @fn_emit(ptr @.str778) %t21 = load ptr, ptr %t2 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str744) - %t22 = call ptr @fn_lbl(ptr @.str745) + call void @fn_emit(ptr @.str779) + %t22 = call ptr @fn_lbl(ptr @.str780) store ptr %t22, ptr %t23 - %t24 = call ptr @fn_lbl(ptr @.str746) + %t24 = call ptr @fn_lbl(ptr @.str781) store ptr %t24, ptr %t25 %t26 = load ptr, ptr %t0 %t27 = getelementptr inbounds %Cmp_Node, ptr %t26, i32 0, i32 1 %t28 = load ptr, ptr %t27 - %t29 = call i32 @fn_streq(ptr %t28, ptr @.str747) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str782) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then0, label %else1 then0: - call void @fn_emit(ptr @.str748) + call void @fn_emit(ptr @.str783) %t31 = load ptr, ptr %t14 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str749) + call void @fn_emit(ptr @.str784) %t32 = load ptr, ptr %t23 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str750) + call void @fn_emit(ptr @.str785) %t33 = load ptr, ptr %t25 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str751) + call void @fn_emit(ptr @.str786) br label %ifend2 else1: - call void @fn_emit(ptr @.str752) + call void @fn_emit(ptr @.str787) %t34 = load ptr, ptr %t14 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str753) + call void @fn_emit(ptr @.str788) %t35 = load ptr, ptr %t25 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str754) + call void @fn_emit(ptr @.str789) %t36 = load ptr, ptr %t23 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str755) + call void @fn_emit(ptr @.str790) br label %ifend2 ifend2: %t37 = load ptr, ptr %t23 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str756) + call void @fn_emit(ptr @.str791) %t38 = load ptr, ptr %t0 %t39 = getelementptr inbounds %Cmp_Node, ptr %t38, i32 0, i32 5 %t40 = load ptr, ptr %t39 @@ -13841,33 +13870,33 @@ ifend2: %t43 = load ptr, ptr %t42 %t44 = getelementptr inbounds %Cmp_Val, ptr %t43, i32 0, i32 0 %t45 = load ptr, ptr %t44 - %t46 = call ptr @fn_sconcat(ptr %t45, ptr @.str758) - %t47 = call ptr @fn_sconcat(ptr @.str757, ptr %t46) + %t46 = call ptr @fn_str_concat(ptr %t45, ptr @.str793) + %t47 = call ptr @fn_str_concat(ptr @.str792, ptr %t46) %t48 = call ptr @fn_emit_bind(ptr %t47) store ptr %t48, ptr %t49 %t50 = load ptr, ptr %t49 - %t51 = call ptr @fn_sconcat(ptr %t50, ptr @.str760) - %t52 = call ptr @fn_sconcat(ptr @.str759, ptr %t51) + %t51 = call ptr @fn_str_concat(ptr %t50, ptr @.str795) + %t52 = call ptr @fn_str_concat(ptr @.str794, ptr %t51) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - call void @fn_emit(ptr @.str761) + call void @fn_emit(ptr @.str796) %t55 = load ptr, ptr %t54 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str762) + call void @fn_emit(ptr @.str797) %t56 = load ptr, ptr %t2 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str763) - call void @fn_emit(ptr @.str764) + call void @fn_emit(ptr @.str798) + call void @fn_emit(ptr @.str799) %t57 = load ptr, ptr %t25 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str765) + call void @fn_emit(ptr @.str800) %t58 = load ptr, ptr %t25 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str766) + call void @fn_emit(ptr @.str801) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_sconcat(ptr @.str767, ptr %t59) + %t60 = call ptr @fn_str_concat(ptr @.str802, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) - %t62 = call ptr @fn_val(ptr %t61, ptr @.str768) + %t62 = call ptr @fn_val(ptr %t61, ptr @.str803) store ptr %t62, ptr %retval br label %ret ret: @@ -13881,46 +13910,46 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str769) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str804) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str770, ptr %retval + store ptr @.str805, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str771) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str806) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str772, ptr %retval + store ptr @.str807, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str773) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str808) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str774, ptr %retval + store ptr @.str809, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str775) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str810) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str776, ptr %retval + store ptr @.str811, ptr %retval br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str777) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str812) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: - store ptr @.str778, ptr %retval + store ptr @.str813, ptr %retval br label %ret ifend14: - store ptr @.str779, ptr %retval + store ptr @.str814, ptr %retval br label %ret ret: %t16 = load ptr, ptr %retval @@ -13938,14 +13967,14 @@ entry: %t5 = alloca i32 store ptr %arg_op, ptr %t0 %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_streq(ptr %t6, ptr @.str780) + %t7 = call i32 @fn_str_eq(ptr %t6, ptr @.str815) %t8 = icmp ne i32 %t7, 0 %t9 = zext i1 %t8 to i32 store i32 %t9, ptr %t5 br i1 %t8, label %scend1, label %sc0 sc0: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str781) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str816) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t5 @@ -13958,7 +13987,7 @@ scend1: br i1 %t15, label %scend3, label %sc2 sc2: %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str782) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str817) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t4 @@ -13971,7 +14000,7 @@ scend3: br i1 %t22, label %scend5, label %sc4 sc4: %t24 = load ptr, ptr %t0 - %t25 = call i32 @fn_streq(ptr %t24, ptr @.str783) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str818) %t26 = icmp ne i32 %t25, 0 %t27 = zext i1 %t26 to i32 store i32 %t27, ptr %t3 @@ -13984,7 +14013,7 @@ scend5: br i1 %t29, label %scend7, label %sc6 sc6: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str784) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str819) %t33 = icmp ne i32 %t32, 0 %t34 = zext i1 %t33 to i32 store i32 %t34, ptr %t2 @@ -13997,7 +14026,7 @@ scend7: br i1 %t36, label %scend9, label %sc8 sc8: %t38 = load ptr, ptr %t0 - %t39 = call i32 @fn_streq(ptr %t38, ptr @.str785) + %t39 = call i32 @fn_str_eq(ptr %t38, ptr @.str820) %t40 = icmp ne i32 %t39, 0 %t41 = zext i1 %t40 to i32 store i32 %t41, ptr %t1 @@ -14017,78 +14046,78 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str786) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str821) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str787, ptr %retval + store ptr @.str822, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str788) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str823) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str789, ptr %retval + store ptr @.str824, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str790) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str825) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str791, ptr %retval + store ptr @.str826, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str792) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str827) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str793, ptr %retval + store ptr @.str828, ptr %retval br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str794) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str829) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: - store ptr @.str795, ptr %retval + store ptr @.str830, ptr %retval br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_streq(ptr %t16, ptr @.str796) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str831) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: - store ptr @.str797, ptr %retval + store ptr @.str832, ptr %retval br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_streq(ptr %t19, ptr @.str798) + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str833) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: - store ptr @.str799, ptr %retval + store ptr @.str834, ptr %retval br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str800) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str835) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: - store ptr @.str801, ptr %retval + store ptr @.str836, ptr %retval br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str802) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str837) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: - store ptr @.str803, ptr %retval + store ptr @.str838, ptr %retval br label %ret ifend26: - store ptr @.str804, ptr %retval + store ptr @.str839, ptr %retval br label %ret ret: %t28 = load ptr, ptr %retval @@ -14103,7 +14132,7 @@ entry: %t1 = load ptr, ptr %t0 %t2 = getelementptr inbounds %Cmp_Val, ptr %t1, i32 0, i32 1 %t3 = load ptr, ptr %t2 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str805) + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str840) %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then0, label %ifend2 then0: @@ -14116,8 +14145,8 @@ ifend2: %t9 = load ptr, ptr %t0 %t10 = getelementptr inbounds %Cmp_Val, ptr %t9, i32 0, i32 0 %t11 = load ptr, ptr %t10 - %t12 = call ptr @fn_sconcat(ptr %t11, ptr @.str807) - %t13 = call ptr @fn_sconcat(ptr @.str806, ptr %t12) + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str842) + %t13 = call ptr @fn_str_concat(ptr @.str841, ptr %t12) %t14 = call ptr @fn_emit_bind(ptr %t13) store ptr %t14, ptr %retval br label %ret @@ -14126,6 +14155,77 @@ ret: ret ptr %t15 } +define ptr @fn_emit_str_op(ptr %arg_op, ptr %arg_a, ptr %arg_b) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t2 = alloca ptr + %t29 = alloca ptr + %t37 = alloca ptr + store ptr %arg_op, ptr %t0 + store ptr %arg_a, ptr %t1 + store ptr %arg_b, ptr %t2 + store i32 1, ptr @g_g_uses_str + %t3 = load ptr, ptr %t0 + %t4 = call i32 @fn_str_eq(ptr %t3, ptr @.str843) + %t5 = icmp ne i32 %t4, 0 + br i1 %t5, label %then0, label %ifend2 +then0: + %t6 = load ptr, ptr %t1 + %t7 = getelementptr inbounds %Cmp_Val, ptr %t6, i32 0, i32 0 + %t8 = load ptr, ptr %t7 + %t9 = load ptr, ptr %t2 + %t10 = getelementptr inbounds %Cmp_Val, ptr %t9, i32 0, i32 0 + %t11 = load ptr, ptr %t10 + %t12 = call ptr @fn_str_concat(ptr %t11, ptr @.str846) + %t13 = call ptr @fn_str_concat(ptr @.str845, ptr %t12) + %t14 = call ptr @fn_str_concat(ptr %t8, ptr %t13) + %t15 = call ptr @fn_str_concat(ptr @.str844, ptr %t14) + %t16 = call ptr @fn_emit_bind(ptr %t15) + %t17 = call ptr @fn_val(ptr %t16, ptr @.str847) + store ptr %t17, ptr %retval + br label %ret +ifend2: + %t18 = load ptr, ptr %t1 + %t19 = getelementptr inbounds %Cmp_Val, ptr %t18, i32 0, i32 0 + %t20 = load ptr, ptr %t19 + %t21 = load ptr, ptr %t2 + %t22 = getelementptr inbounds %Cmp_Val, ptr %t21, i32 0, i32 0 + %t23 = load ptr, ptr %t22 + %t24 = call ptr @fn_str_concat(ptr %t23, ptr @.str850) + %t25 = call ptr @fn_str_concat(ptr @.str849, ptr %t24) + %t26 = call ptr @fn_str_concat(ptr %t20, ptr %t25) + %t27 = call ptr @fn_str_concat(ptr @.str848, ptr %t26) + %t28 = call ptr @fn_emit_bind(ptr %t27) + store ptr %t28, ptr %t29 + %t30 = load ptr, ptr %t0 + %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str851) + %t32 = icmp ne i32 %t31, 0 + br i1 %t32, label %then3, label %ifend5 +then3: + %t33 = load ptr, ptr %t29 + %t34 = call ptr @fn_str_concat(ptr %t33, ptr @.str853) + %t35 = call ptr @fn_str_concat(ptr @.str852, ptr %t34) + %t36 = call ptr @fn_emit_bind(ptr %t35) + store ptr %t36, ptr %t37 + %t38 = load ptr, ptr %t37 + %t39 = call ptr @fn_str_concat(ptr %t38, ptr @.str855) + %t40 = call ptr @fn_str_concat(ptr @.str854, ptr %t39) + %t41 = call ptr @fn_emit_bind(ptr %t40) + %t42 = call ptr @fn_val(ptr %t41, ptr @.str856) + store ptr %t42, ptr %retval + br label %ret +ifend5: + %t43 = load ptr, ptr %t29 + %t44 = call ptr @fn_val(ptr %t43, ptr @.str857) + store ptr %t44, ptr %retval + br label %ret +ret: + %t45 = load ptr, ptr %retval + ret ptr %t45 +} + define ptr @fn_emit_bin(ptr %arg_e) { entry: %retval = alloca ptr @@ -14134,29 +14234,35 @@ entry: %t22 = alloca ptr %t27 = alloca ptr %t28 = alloca i32 - %t42 = alloca i32 - %t51 = alloca ptr - %t55 = alloca ptr - %t56 = alloca ptr - %t63 = alloca i32 - %t95 = alloca ptr - %t105 = alloca ptr - %t108 = alloca ptr - %t118 = alloca ptr - %t123 = alloca ptr - %t130 = alloca ptr - %t135 = alloca ptr - %t150 = alloca ptr - %t155 = alloca ptr - %t160 = alloca ptr - %t167 = alloca ptr - %t184 = alloca ptr - %t202 = alloca ptr + %t44 = alloca i32 + %t45 = alloca i32 + %t65 = alloca i32 + %t76 = alloca i32 + %t77 = alloca i32 + %t106 = alloca i32 + %t120 = alloca i32 + %t129 = alloca ptr + %t133 = alloca ptr + %t134 = alloca ptr + %t141 = alloca i32 + %t173 = alloca ptr + %t183 = alloca ptr + %t186 = alloca ptr + %t196 = alloca ptr + %t201 = alloca ptr + %t208 = alloca ptr + %t213 = alloca ptr + %t228 = alloca ptr + %t233 = alloca ptr + %t238 = alloca ptr + %t245 = alloca ptr + %t262 = alloca ptr + %t280 = alloca ptr store ptr %arg_e, ptr %t0 %t2 = load ptr, ptr %t0 %t3 = getelementptr inbounds %Cmp_Node, ptr %t2, i32 0, i32 1 %t4 = load ptr, ptr %t3 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str808) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str858) %t6 = icmp ne i32 %t5, 0 %t7 = zext i1 %t6 to i32 store i32 %t7, ptr %t1 @@ -14165,7 +14271,7 @@ sc0: %t8 = load ptr, ptr %t0 %t9 = getelementptr inbounds %Cmp_Node, ptr %t8, i32 0, i32 1 %t10 = load ptr, ptr %t9 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str809) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str859) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t1 @@ -14193,228 +14299,340 @@ ifend4: %t29 = load ptr, ptr %t22 %t30 = getelementptr inbounds %Cmp_Val, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str810) - %t33 = icmp ne i32 %t32, 0 - %t34 = zext i1 %t33 to i32 - store i32 %t34, ptr %t28 - br i1 %t33, label %scend6, label %sc5 + %t32 = call ptr @fn_llty(ptr %t31) + %t33 = call i32 @fn_str_eq(ptr %t32, ptr @.str860) + %t34 = icmp ne i32 %t33, 0 + %t35 = zext i1 %t34 to i32 + store i32 %t35, ptr %t28 + br i1 %t34, label %scend6, label %sc5 sc5: - %t35 = load ptr, ptr %t27 - %t36 = getelementptr inbounds %Cmp_Val, ptr %t35, i32 0, i32 1 - %t37 = load ptr, ptr %t36 - %t38 = call i32 @fn_streq(ptr %t37, ptr @.str811) - %t39 = icmp ne i32 %t38, 0 - %t40 = zext i1 %t39 to i32 - store i32 %t40, ptr %t28 + %t36 = load ptr, ptr %t27 + %t37 = getelementptr inbounds %Cmp_Val, ptr %t36, i32 0, i32 1 + %t38 = load ptr, ptr %t37 + %t39 = call ptr @fn_llty(ptr %t38) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str861) + %t41 = icmp ne i32 %t40, 0 + %t42 = zext i1 %t41 to i32 + store i32 %t42, ptr %t28 br label %scend6 scend6: - %t41 = load i32, ptr %t28 - store i32 %t41, ptr %t42 - %t43 = load ptr, ptr %t0 - %t44 = getelementptr inbounds %Cmp_Node, ptr %t43, i32 0, i32 1 - %t45 = load ptr, ptr %t44 - %t46 = call i32 @fn_is_cmp(ptr %t45) - %t47 = icmp ne i32 %t46, 0 - br i1 %t47, label %then7, label %ifend9 -then7: - %t48 = load ptr, ptr %t22 - %t49 = getelementptr inbounds %Cmp_Val, ptr %t48, i32 0, i32 0 - %t50 = load ptr, ptr %t49 - store ptr %t50, ptr %t51 - %t52 = load ptr, ptr %t27 - %t53 = getelementptr inbounds %Cmp_Val, ptr %t52, i32 0, i32 0 - %t54 = load ptr, ptr %t53 - store ptr %t54, ptr %t55 - store ptr @.str812, ptr %t56 - %t57 = load i32, ptr %t42 - %t58 = icmp ne i32 %t57, 0 - br i1 %t58, label %then10, label %else11 -then10: - %t59 = load ptr, ptr %t22 - %t60 = call ptr @fn_to_fixed(ptr %t59) - store ptr %t60, ptr %t51 - %t61 = load ptr, ptr %t27 - %t62 = call ptr @fn_to_fixed(ptr %t61) - store ptr %t62, ptr %t55 - br label %ifend12 -else11: - %t64 = load ptr, ptr %t22 - %t65 = getelementptr inbounds %Cmp_Val, ptr %t64, i32 0, i32 1 - %t66 = load ptr, ptr %t65 - %t67 = call ptr @fn_llty(ptr %t66) - %t68 = call i32 @fn_streq(ptr %t67, ptr @.str813) - %t69 = icmp ne i32 %t68, 0 - %t70 = zext i1 %t69 to i32 - store i32 %t70, ptr %t63 - br i1 %t69, label %scend14, label %sc13 -sc13: - %t71 = load ptr, ptr %t27 - %t72 = getelementptr inbounds %Cmp_Val, ptr %t71, i32 0, i32 1 - %t73 = load ptr, ptr %t72 - %t74 = call ptr @fn_llty(ptr %t73) - %t75 = call i32 @fn_streq(ptr %t74, ptr @.str814) - %t76 = icmp ne i32 %t75, 0 - %t77 = zext i1 %t76 to i32 - store i32 %t77, ptr %t63 - br label %scend14 -scend14: - %t78 = load i32, ptr %t63 - %t79 = icmp ne i32 %t78, 0 - br i1 %t79, label %then15, label %ifend17 -then15: - store ptr @.str815, ptr %t56 - br label %ifend17 -ifend17: - br label %ifend12 -ifend12: - %t80 = load ptr, ptr %t0 - %t81 = getelementptr inbounds %Cmp_Node, ptr %t80, i32 0, i32 1 - %t82 = load ptr, ptr %t81 - %t83 = call ptr @fn_cmp_code(ptr %t82) - %t84 = load ptr, ptr %t56 - %t85 = call ptr @fn_sconcat(ptr %t84, ptr @.str818) - %t86 = call ptr @fn_sconcat(ptr @.str817, ptr %t85) - %t87 = load ptr, ptr %t51 - %t88 = load ptr, ptr %t55 - %t89 = call ptr @fn_sconcat(ptr @.str819, ptr %t88) - %t90 = call ptr @fn_sconcat(ptr %t87, ptr %t89) - %t91 = call ptr @fn_sconcat(ptr %t86, ptr %t90) - %t92 = call ptr @fn_sconcat(ptr %t83, ptr %t91) - %t93 = call ptr @fn_sconcat(ptr @.str816, ptr %t92) - %t94 = call ptr @fn_emit_bind(ptr %t93) - store ptr %t94, ptr %t95 - %t96 = load ptr, ptr %t95 - %t97 = call ptr @fn_sconcat(ptr %t96, ptr @.str821) - %t98 = call ptr @fn_sconcat(ptr @.str820, ptr %t97) - %t99 = call ptr @fn_emit_bind(ptr %t98) - %t100 = call ptr @fn_val(ptr %t99, ptr @.str822) - store ptr %t100, ptr %retval + %t43 = load i32, ptr %t28 + store i32 %t43, ptr %t44 + %t46 = load ptr, ptr %t0 + %t47 = getelementptr inbounds %Cmp_Node, ptr %t46, i32 0, i32 4 + %t48 = load ptr, ptr %t47 + %t49 = getelementptr inbounds %Cmp_Node, ptr %t48, i32 0, i32 0 + %t50 = load i32, ptr %t49 + %t51 = icmp eq i32 %t50, 43 + %t52 = zext i1 %t51 to i32 + %t53 = icmp ne i32 %t52, 0 + %t54 = zext i1 %t53 to i32 + store i32 %t54, ptr %t45 + br i1 %t53, label %scend8, label %sc7 +sc7: + %t55 = load ptr, ptr %t0 + %t56 = getelementptr inbounds %Cmp_Node, ptr %t55, i32 0, i32 5 + %t57 = load ptr, ptr %t56 + %t58 = getelementptr inbounds %Cmp_Node, ptr %t57, i32 0, i32 0 + %t59 = load i32, ptr %t58 + %t60 = icmp eq i32 %t59, 43 + %t61 = zext i1 %t60 to i32 + %t62 = icmp ne i32 %t61, 0 + %t63 = zext i1 %t62 to i32 + store i32 %t63, ptr %t45 + br label %scend8 +scend8: + %t64 = load i32, ptr %t45 + store i32 %t64, ptr %t65 + %t66 = load i32, ptr %t44 + %t67 = icmp ne i32 %t66, 0 + br i1 %t67, label %then9, label %ifend11 +then9: + %t68 = load ptr, ptr %t0 + %t69 = getelementptr inbounds %Cmp_Node, ptr %t68, i32 0, i32 1 + %t70 = load ptr, ptr %t69 + %t71 = call i32 @fn_str_eq(ptr %t70, ptr @.str862) + %t72 = icmp ne i32 %t71, 0 + br i1 %t72, label %then12, label %ifend14 +then12: + %t73 = load ptr, ptr %t22 + %t74 = load ptr, ptr %t27 + %t75 = call ptr @fn_emit_str_op(ptr @.str863, ptr %t73, ptr %t74) + store ptr %t75, ptr %retval br label %ret -ifend9: - %t101 = load i32, ptr %t42 - %t102 = icmp ne i32 %t101, 0 - br i1 %t102, label %then18, label %ifend20 -then18: +ifend14: + %t78 = load ptr, ptr %t0 + %t79 = getelementptr inbounds %Cmp_Node, ptr %t78, i32 0, i32 1 + %t80 = load ptr, ptr %t79 + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str864) + %t82 = icmp ne i32 %t81, 0 + %t83 = zext i1 %t82 to i32 + store i32 %t83, ptr %t77 + br i1 %t82, label %scend16, label %sc15 +sc15: + %t84 = load ptr, ptr %t0 + %t85 = getelementptr inbounds %Cmp_Node, ptr %t84, i32 0, i32 1 + %t86 = load ptr, ptr %t85 + %t87 = call i32 @fn_str_eq(ptr %t86, ptr @.str865) + %t88 = icmp ne i32 %t87, 0 + %t89 = zext i1 %t88 to i32 + store i32 %t89, ptr %t77 + br label %scend16 +scend16: + %t90 = load i32, ptr %t77 + %t91 = icmp ne i32 %t90, 0 + %t92 = zext i1 %t91 to i32 + store i32 %t92, ptr %t76 + br i1 %t91, label %sc17, label %scend18 +sc17: + %t93 = load i32, ptr %t65 + %t94 = icmp eq i32 %t93, 0 + %t95 = zext i1 %t94 to i32 + %t96 = icmp ne i32 %t95, 0 + %t97 = zext i1 %t96 to i32 + store i32 %t97, ptr %t76 + br label %scend18 +scend18: + %t98 = load i32, ptr %t76 + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then19, label %ifend21 +then19: + %t100 = load ptr, ptr %t0 + %t101 = getelementptr inbounds %Cmp_Node, ptr %t100, i32 0, i32 1 + %t102 = load ptr, ptr %t101 %t103 = load ptr, ptr %t22 - %t104 = call ptr @fn_to_fixed(ptr %t103) - store ptr %t104, ptr %t105 - %t106 = load ptr, ptr %t27 - %t107 = call ptr @fn_to_fixed(ptr %t106) - store ptr %t107, ptr %t108 - %t109 = load ptr, ptr %t0 - %t110 = getelementptr inbounds %Cmp_Node, ptr %t109, i32 0, i32 1 - %t111 = load ptr, ptr %t110 - %t112 = call i32 @fn_streq(ptr %t111, ptr @.str823) - %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %then21, label %ifend23 -then21: - %t114 = load ptr, ptr %t105 - %t115 = call ptr @fn_sconcat(ptr %t114, ptr @.str825) - %t116 = call ptr @fn_sconcat(ptr @.str824, ptr %t115) - %t117 = call ptr @fn_emit_bind(ptr %t116) - store ptr %t117, ptr %t118 - %t119 = load ptr, ptr %t108 - %t120 = call ptr @fn_sconcat(ptr %t119, ptr @.str827) - %t121 = call ptr @fn_sconcat(ptr @.str826, ptr %t120) - %t122 = call ptr @fn_emit_bind(ptr %t121) - store ptr %t122, ptr %t123 - %t124 = load ptr, ptr %t118 - %t125 = load ptr, ptr %t123 - %t126 = call ptr @fn_sconcat(ptr @.str829, ptr %t125) - %t127 = call ptr @fn_sconcat(ptr %t124, ptr %t126) - %t128 = call ptr @fn_sconcat(ptr @.str828, ptr %t127) - %t129 = call ptr @fn_emit_bind(ptr %t128) - store ptr %t129, ptr %t130 - %t131 = load ptr, ptr %t130 - %t132 = call ptr @fn_sconcat(ptr %t131, ptr @.str831) - %t133 = call ptr @fn_sconcat(ptr @.str830, ptr %t132) - %t134 = call ptr @fn_emit_bind(ptr %t133) - store ptr %t134, ptr %t135 - %t136 = load ptr, ptr %t135 - %t137 = call ptr @fn_sconcat(ptr %t136, ptr @.str833) - %t138 = call ptr @fn_sconcat(ptr @.str832, ptr %t137) - %t139 = call ptr @fn_emit_bind(ptr %t138) - %t140 = call ptr @fn_val(ptr %t139, ptr @.str834) - store ptr %t140, ptr %retval + %t104 = load ptr, ptr %t27 + %t105 = call ptr @fn_emit_str_op(ptr %t102, ptr %t103, ptr %t104) + store ptr %t105, ptr %retval br label %ret -ifend23: - %t141 = load ptr, ptr %t0 - %t142 = getelementptr inbounds %Cmp_Node, ptr %t141, i32 0, i32 1 - %t143 = load ptr, ptr %t142 - %t144 = call i32 @fn_streq(ptr %t143, ptr @.str835) - %t145 = icmp ne i32 %t144, 0 - br i1 %t145, label %then24, label %ifend26 +ifend21: + br label %ifend11 +ifend11: + %t107 = load ptr, ptr %t22 + %t108 = getelementptr inbounds %Cmp_Val, ptr %t107, i32 0, i32 1 + %t109 = load ptr, ptr %t108 + %t110 = call i32 @fn_str_eq(ptr %t109, ptr @.str866) + %t111 = icmp ne i32 %t110, 0 + %t112 = zext i1 %t111 to i32 + store i32 %t112, ptr %t106 + br i1 %t111, label %scend23, label %sc22 +sc22: + %t113 = load ptr, ptr %t27 + %t114 = getelementptr inbounds %Cmp_Val, ptr %t113, i32 0, i32 1 + %t115 = load ptr, ptr %t114 + %t116 = call i32 @fn_str_eq(ptr %t115, ptr @.str867) + %t117 = icmp ne i32 %t116, 0 + %t118 = zext i1 %t117 to i32 + store i32 %t118, ptr %t106 + br label %scend23 +scend23: + %t119 = load i32, ptr %t106 + store i32 %t119, ptr %t120 + %t121 = load ptr, ptr %t0 + %t122 = getelementptr inbounds %Cmp_Node, ptr %t121, i32 0, i32 1 + %t123 = load ptr, ptr %t122 + %t124 = call i32 @fn_is_cmp(ptr %t123) + %t125 = icmp ne i32 %t124, 0 + br i1 %t125, label %then24, label %ifend26 then24: - %t146 = load ptr, ptr %t105 - %t147 = call ptr @fn_sconcat(ptr %t146, ptr @.str837) - %t148 = call ptr @fn_sconcat(ptr @.str836, ptr %t147) - %t149 = call ptr @fn_emit_bind(ptr %t148) - store ptr %t149, ptr %t150 + %t126 = load ptr, ptr %t22 + %t127 = getelementptr inbounds %Cmp_Val, ptr %t126, i32 0, i32 0 + %t128 = load ptr, ptr %t127 + store ptr %t128, ptr %t129 + %t130 = load ptr, ptr %t27 + %t131 = getelementptr inbounds %Cmp_Val, ptr %t130, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + store ptr %t132, ptr %t133 + store ptr @.str868, ptr %t134 + %t135 = load i32, ptr %t120 + %t136 = icmp ne i32 %t135, 0 + br i1 %t136, label %then27, label %else28 +then27: + %t137 = load ptr, ptr %t22 + %t138 = call ptr @fn_to_fixed(ptr %t137) + store ptr %t138, ptr %t129 + %t139 = load ptr, ptr %t27 + %t140 = call ptr @fn_to_fixed(ptr %t139) + store ptr %t140, ptr %t133 + br label %ifend29 +else28: + %t142 = load ptr, ptr %t22 + %t143 = getelementptr inbounds %Cmp_Val, ptr %t142, i32 0, i32 1 + %t144 = load ptr, ptr %t143 + %t145 = call ptr @fn_llty(ptr %t144) + %t146 = call i32 @fn_str_eq(ptr %t145, ptr @.str869) + %t147 = icmp ne i32 %t146, 0 + %t148 = zext i1 %t147 to i32 + store i32 %t148, ptr %t141 + br i1 %t147, label %scend31, label %sc30 +sc30: + %t149 = load ptr, ptr %t27 + %t150 = getelementptr inbounds %Cmp_Val, ptr %t149, i32 0, i32 1 %t151 = load ptr, ptr %t150 - %t152 = call ptr @fn_sconcat(ptr %t151, ptr @.str839) - %t153 = call ptr @fn_sconcat(ptr @.str838, ptr %t152) - %t154 = call ptr @fn_emit_bind(ptr %t153) - store ptr %t154, ptr %t155 - %t156 = load ptr, ptr %t108 - %t157 = call ptr @fn_sconcat(ptr %t156, ptr @.str841) - %t158 = call ptr @fn_sconcat(ptr @.str840, ptr %t157) - %t159 = call ptr @fn_emit_bind(ptr %t158) - store ptr %t159, ptr %t160 - %t161 = load ptr, ptr %t155 - %t162 = load ptr, ptr %t160 - %t163 = call ptr @fn_sconcat(ptr @.str843, ptr %t162) - %t164 = call ptr @fn_sconcat(ptr %t161, ptr %t163) - %t165 = call ptr @fn_sconcat(ptr @.str842, ptr %t164) - %t166 = call ptr @fn_emit_bind(ptr %t165) - store ptr %t166, ptr %t167 - %t168 = load ptr, ptr %t167 - %t169 = call ptr @fn_sconcat(ptr %t168, ptr @.str845) - %t170 = call ptr @fn_sconcat(ptr @.str844, ptr %t169) - %t171 = call ptr @fn_emit_bind(ptr %t170) - %t172 = call ptr @fn_val(ptr %t171, ptr @.str846) - store ptr %t172, ptr %retval + %t152 = call ptr @fn_llty(ptr %t151) + %t153 = call i32 @fn_str_eq(ptr %t152, ptr @.str870) + %t154 = icmp ne i32 %t153, 0 + %t155 = zext i1 %t154 to i32 + store i32 %t155, ptr %t141 + br label %scend31 +scend31: + %t156 = load i32, ptr %t141 + %t157 = icmp ne i32 %t156, 0 + br i1 %t157, label %then32, label %ifend34 +then32: + store ptr @.str871, ptr %t134 + br label %ifend34 +ifend34: + br label %ifend29 +ifend29: + %t158 = load ptr, ptr %t0 + %t159 = getelementptr inbounds %Cmp_Node, ptr %t158, i32 0, i32 1 + %t160 = load ptr, ptr %t159 + %t161 = call ptr @fn_cmp_code(ptr %t160) + %t162 = load ptr, ptr %t134 + %t163 = call ptr @fn_str_concat(ptr %t162, ptr @.str874) + %t164 = call ptr @fn_str_concat(ptr @.str873, ptr %t163) + %t165 = load ptr, ptr %t129 + %t166 = load ptr, ptr %t133 + %t167 = call ptr @fn_str_concat(ptr @.str875, ptr %t166) + %t168 = call ptr @fn_str_concat(ptr %t165, ptr %t167) + %t169 = call ptr @fn_str_concat(ptr %t164, ptr %t168) + %t170 = call ptr @fn_str_concat(ptr %t161, ptr %t169) + %t171 = call ptr @fn_str_concat(ptr @.str872, ptr %t170) + %t172 = call ptr @fn_emit_bind(ptr %t171) + store ptr %t172, ptr %t173 + %t174 = load ptr, ptr %t173 + %t175 = call ptr @fn_str_concat(ptr %t174, ptr @.str877) + %t176 = call ptr @fn_str_concat(ptr @.str876, ptr %t175) + %t177 = call ptr @fn_emit_bind(ptr %t176) + %t178 = call ptr @fn_val(ptr %t177, ptr @.str878) + store ptr %t178, ptr %retval br label %ret ifend26: - %t173 = load ptr, ptr %t0 - %t174 = getelementptr inbounds %Cmp_Node, ptr %t173, i32 0, i32 1 - %t175 = load ptr, ptr %t174 - %t176 = call ptr @fn_arith_code(ptr %t175) - %t177 = load ptr, ptr %t105 - %t178 = load ptr, ptr %t108 - %t179 = call ptr @fn_sconcat(ptr @.str848, ptr %t178) - %t180 = call ptr @fn_sconcat(ptr %t177, ptr %t179) - %t181 = call ptr @fn_sconcat(ptr @.str847, ptr %t180) - %t182 = call ptr @fn_sconcat(ptr %t176, ptr %t181) - %t183 = call ptr @fn_emit_bind(ptr %t182) - store ptr %t183, ptr %t184 - %t185 = load ptr, ptr %t184 - %t186 = call ptr @fn_val(ptr %t185, ptr @.str849) - store ptr %t186, ptr %retval - br label %ret -ifend20: + %t179 = load i32, ptr %t120 + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then35, label %ifend37 +then35: + %t181 = load ptr, ptr %t22 + %t182 = call ptr @fn_to_fixed(ptr %t181) + store ptr %t182, ptr %t183 + %t184 = load ptr, ptr %t27 + %t185 = call ptr @fn_to_fixed(ptr %t184) + store ptr %t185, ptr %t186 %t187 = load ptr, ptr %t0 %t188 = getelementptr inbounds %Cmp_Node, ptr %t187, i32 0, i32 1 %t189 = load ptr, ptr %t188 - %t190 = call ptr @fn_arith_code(ptr %t189) - %t191 = load ptr, ptr %t22 - %t192 = getelementptr inbounds %Cmp_Val, ptr %t191, i32 0, i32 0 - %t193 = load ptr, ptr %t192 - %t194 = load ptr, ptr %t27 - %t195 = getelementptr inbounds %Cmp_Val, ptr %t194, i32 0, i32 0 - %t196 = load ptr, ptr %t195 - %t197 = call ptr @fn_sconcat(ptr @.str851, ptr %t196) - %t198 = call ptr @fn_sconcat(ptr %t193, ptr %t197) - %t199 = call ptr @fn_sconcat(ptr @.str850, ptr %t198) - %t200 = call ptr @fn_sconcat(ptr %t190, ptr %t199) - %t201 = call ptr @fn_emit_bind(ptr %t200) - store ptr %t201, ptr %t202 - %t203 = load ptr, ptr %t202 - %t204 = call ptr @fn_val(ptr %t203, ptr @.str852) - store ptr %t204, ptr %retval + %t190 = call i32 @fn_str_eq(ptr %t189, ptr @.str879) + %t191 = icmp ne i32 %t190, 0 + br i1 %t191, label %then38, label %ifend40 +then38: + %t192 = load ptr, ptr %t183 + %t193 = call ptr @fn_str_concat(ptr %t192, ptr @.str881) + %t194 = call ptr @fn_str_concat(ptr @.str880, ptr %t193) + %t195 = call ptr @fn_emit_bind(ptr %t194) + store ptr %t195, ptr %t196 + %t197 = load ptr, ptr %t186 + %t198 = call ptr @fn_str_concat(ptr %t197, ptr @.str883) + %t199 = call ptr @fn_str_concat(ptr @.str882, ptr %t198) + %t200 = call ptr @fn_emit_bind(ptr %t199) + store ptr %t200, ptr %t201 + %t202 = load ptr, ptr %t196 + %t203 = load ptr, ptr %t201 + %t204 = call ptr @fn_str_concat(ptr @.str885, ptr %t203) + %t205 = call ptr @fn_str_concat(ptr %t202, ptr %t204) + %t206 = call ptr @fn_str_concat(ptr @.str884, ptr %t205) + %t207 = call ptr @fn_emit_bind(ptr %t206) + store ptr %t207, ptr %t208 + %t209 = load ptr, ptr %t208 + %t210 = call ptr @fn_str_concat(ptr %t209, ptr @.str887) + %t211 = call ptr @fn_str_concat(ptr @.str886, ptr %t210) + %t212 = call ptr @fn_emit_bind(ptr %t211) + store ptr %t212, ptr %t213 + %t214 = load ptr, ptr %t213 + %t215 = call ptr @fn_str_concat(ptr %t214, ptr @.str889) + %t216 = call ptr @fn_str_concat(ptr @.str888, ptr %t215) + %t217 = call ptr @fn_emit_bind(ptr %t216) + %t218 = call ptr @fn_val(ptr %t217, ptr @.str890) + store ptr %t218, ptr %retval + br label %ret +ifend40: + %t219 = load ptr, ptr %t0 + %t220 = getelementptr inbounds %Cmp_Node, ptr %t219, i32 0, i32 1 + %t221 = load ptr, ptr %t220 + %t222 = call i32 @fn_str_eq(ptr %t221, ptr @.str891) + %t223 = icmp ne i32 %t222, 0 + br i1 %t223, label %then41, label %ifend43 +then41: + %t224 = load ptr, ptr %t183 + %t225 = call ptr @fn_str_concat(ptr %t224, ptr @.str893) + %t226 = call ptr @fn_str_concat(ptr @.str892, ptr %t225) + %t227 = call ptr @fn_emit_bind(ptr %t226) + store ptr %t227, ptr %t228 + %t229 = load ptr, ptr %t228 + %t230 = call ptr @fn_str_concat(ptr %t229, ptr @.str895) + %t231 = call ptr @fn_str_concat(ptr @.str894, ptr %t230) + %t232 = call ptr @fn_emit_bind(ptr %t231) + store ptr %t232, ptr %t233 + %t234 = load ptr, ptr %t186 + %t235 = call ptr @fn_str_concat(ptr %t234, ptr @.str897) + %t236 = call ptr @fn_str_concat(ptr @.str896, ptr %t235) + %t237 = call ptr @fn_emit_bind(ptr %t236) + store ptr %t237, ptr %t238 + %t239 = load ptr, ptr %t233 + %t240 = load ptr, ptr %t238 + %t241 = call ptr @fn_str_concat(ptr @.str899, ptr %t240) + %t242 = call ptr @fn_str_concat(ptr %t239, ptr %t241) + %t243 = call ptr @fn_str_concat(ptr @.str898, ptr %t242) + %t244 = call ptr @fn_emit_bind(ptr %t243) + store ptr %t244, ptr %t245 + %t246 = load ptr, ptr %t245 + %t247 = call ptr @fn_str_concat(ptr %t246, ptr @.str901) + %t248 = call ptr @fn_str_concat(ptr @.str900, ptr %t247) + %t249 = call ptr @fn_emit_bind(ptr %t248) + %t250 = call ptr @fn_val(ptr %t249, ptr @.str902) + store ptr %t250, ptr %retval + br label %ret +ifend43: + %t251 = load ptr, ptr %t0 + %t252 = getelementptr inbounds %Cmp_Node, ptr %t251, i32 0, i32 1 + %t253 = load ptr, ptr %t252 + %t254 = call ptr @fn_arith_code(ptr %t253) + %t255 = load ptr, ptr %t183 + %t256 = load ptr, ptr %t186 + %t257 = call ptr @fn_str_concat(ptr @.str904, ptr %t256) + %t258 = call ptr @fn_str_concat(ptr %t255, ptr %t257) + %t259 = call ptr @fn_str_concat(ptr @.str903, ptr %t258) + %t260 = call ptr @fn_str_concat(ptr %t254, ptr %t259) + %t261 = call ptr @fn_emit_bind(ptr %t260) + store ptr %t261, ptr %t262 + %t263 = load ptr, ptr %t262 + %t264 = call ptr @fn_val(ptr %t263, ptr @.str905) + store ptr %t264, ptr %retval + br label %ret +ifend37: + %t265 = load ptr, ptr %t0 + %t266 = getelementptr inbounds %Cmp_Node, ptr %t265, i32 0, i32 1 + %t267 = load ptr, ptr %t266 + %t268 = call ptr @fn_arith_code(ptr %t267) + %t269 = load ptr, ptr %t22 + %t270 = getelementptr inbounds %Cmp_Val, ptr %t269, i32 0, i32 0 + %t271 = load ptr, ptr %t270 + %t272 = load ptr, ptr %t27 + %t273 = getelementptr inbounds %Cmp_Val, ptr %t272, i32 0, i32 0 + %t274 = load ptr, ptr %t273 + %t275 = call ptr @fn_str_concat(ptr @.str907, ptr %t274) + %t276 = call ptr @fn_str_concat(ptr %t271, ptr %t275) + %t277 = call ptr @fn_str_concat(ptr @.str906, ptr %t276) + %t278 = call ptr @fn_str_concat(ptr %t268, ptr %t277) + %t279 = call ptr @fn_emit_bind(ptr %t278) + store ptr %t279, ptr %t280 + %t281 = load ptr, ptr %t280 + %t282 = call ptr @fn_val(ptr %t281, ptr @.str908) + store ptr %t282, ptr %retval br label %ret ret: - %t205 = load ptr, ptr %retval - ret ptr %t205 + %t283 = load ptr, ptr %retval + ret ptr %t283 } define ptr @fn_emit_call(ptr %arg_e) { @@ -14441,7 +14659,7 @@ entry: %t5 = load ptr, ptr %t4 store ptr %t5, ptr %t6 %t7 = load ptr, ptr %t6 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str853) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str909) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then0, label %ifend2 then0: @@ -14451,7 +14669,7 @@ then0: %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then3, label %ifend5 then3: - %t14 = call ptr @fn_val(ptr @.str854, ptr @.str855) + %t14 = call ptr @fn_val(ptr @.str910, ptr @.str911) store ptr %t14, ptr %retval br label %ret ifend5: @@ -14462,64 +14680,64 @@ ifend5: %t19 = sub i32 %t18, 1 %t20 = getelementptr inbounds ptr, ptr %t17, i32 %t19 %t21 = load ptr, ptr %t20 - %t22 = call ptr @fn_sconcat(ptr @.str856, ptr %t21) + %t22 = call ptr @fn_str_concat(ptr @.str912, ptr %t21) %t23 = call ptr @fn_emit_bind(ptr %t22) - %t24 = call ptr @fn_val(ptr %t23, ptr @.str857) + %t24 = call ptr @fn_val(ptr %t23, ptr @.str913) store ptr %t24, ptr %retval br label %ret ifend2: %t25 = load ptr, ptr %t6 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str858) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str914) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then6, label %ifend8 then6: - %t28 = call ptr @fn_emit_bind(ptr @.str859) - %t29 = call ptr @fn_val(ptr %t28, ptr @.str860) + %t28 = call ptr @fn_emit_bind(ptr @.str915) + %t29 = call ptr @fn_val(ptr %t28, ptr @.str916) store ptr %t29, ptr %retval br label %ret ifend8: %t30 = load ptr, ptr %t6 - %t31 = call i32 @fn_streq(ptr %t30, ptr @.str861) + %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str917) %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then9, label %ifend11 then9: - call void @fn_emit(ptr @.str862) - %t33 = call ptr @fn_val(ptr @.str863, ptr @.str864) + call void @fn_emit(ptr @.str918) + %t33 = call ptr @fn_val(ptr @.str919, ptr @.str920) store ptr %t33, ptr %retval br label %ret ifend11: %t34 = load ptr, ptr %t6 - %t35 = call i32 @fn_streq(ptr %t34, ptr @.str865) + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str921) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str866) - %t37 = call ptr @fn_val(ptr @.str867, ptr @.str868) + call void @fn_emit(ptr @.str922) + %t37 = call ptr @fn_val(ptr @.str923, ptr @.str924) store ptr %t37, ptr %retval br label %ret ifend14: %t38 = load ptr, ptr %t6 - %t39 = call i32 @fn_streq(ptr %t38, ptr @.str869) + %t39 = call i32 @fn_str_eq(ptr %t38, ptr @.str925) %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then15, label %ifend17 then15: - %t41 = call ptr @fn_emit_bind(ptr @.str870) - %t42 = call ptr @fn_val(ptr %t41, ptr @.str871) + %t41 = call ptr @fn_emit_bind(ptr @.str926) + %t42 = call ptr @fn_val(ptr %t41, ptr @.str927) store ptr %t42, ptr %retval br label %ret ifend17: %t43 = load ptr, ptr %t6 - %t44 = call i32 @fn_streq(ptr %t43, ptr @.str872) + %t44 = call i32 @fn_str_eq(ptr %t43, ptr @.str928) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str873) - %t46 = call ptr @fn_val(ptr @.str874, ptr @.str875) + call void @fn_emit(ptr @.str929) + %t46 = call ptr @fn_val(ptr @.str930, ptr @.str931) store ptr %t46, ptr %retval br label %ret ifend20: %t47 = load ptr, ptr %t6 - %t48 = call i32 @fn_streq(ptr %t47, ptr @.str876) + %t48 = call i32 @fn_str_eq(ptr %t47, ptr @.str932) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then21, label %ifend23 then21: @@ -14529,7 +14747,7 @@ then21: br label %ret ifend23: %t52 = load ptr, ptr %t6 - %t53 = call i32 @fn_streq(ptr %t52, ptr @.str877) + %t53 = call i32 @fn_str_eq(ptr %t52, ptr @.str933) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then24, label %ifend26 then24: @@ -14539,7 +14757,7 @@ then24: br label %ret ifend26: %t57 = load ptr, ptr %t6 - %t58 = call i32 @fn_streq(ptr %t57, ptr @.str878) + %t58 = call i32 @fn_str_eq(ptr %t57, ptr @.str934) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %then27, label %ifend29 then27: @@ -14555,15 +14773,15 @@ then27: %t69 = load ptr, ptr %t68 %t70 = getelementptr inbounds %Cmp_Val, ptr %t69, i32 0, i32 0 %t71 = load ptr, ptr %t70 - %t72 = call ptr @fn_sconcat(ptr %t71, ptr @.str880) - %t73 = call ptr @fn_sconcat(ptr @.str879, ptr %t72) + %t72 = call ptr @fn_str_concat(ptr %t71, ptr @.str936) + %t73 = call ptr @fn_str_concat(ptr @.str935, ptr %t72) %t74 = call ptr @fn_emit_bind(ptr %t73) - %t75 = call ptr @fn_val(ptr %t74, ptr @.str881) + %t75 = call ptr @fn_val(ptr %t74, ptr @.str937) store ptr %t75, ptr %retval br label %ret ifend29: %t76 = load ptr, ptr %t6 - %t77 = call i32 @fn_streq(ptr %t76, ptr @.str882) + %t77 = call i32 @fn_str_eq(ptr %t76, ptr @.str938) %t78 = icmp ne i32 %t77, 0 br i1 %t78, label %then30, label %ifend32 then30: @@ -14579,10 +14797,10 @@ then30: %t88 = load ptr, ptr %t87 %t89 = getelementptr inbounds %Cmp_Val, ptr %t88, i32 0, i32 0 %t90 = load ptr, ptr %t89 - %t91 = call ptr @fn_sconcat(ptr %t90, ptr @.str884) - %t92 = call ptr @fn_sconcat(ptr @.str883, ptr %t91) + %t91 = call ptr @fn_str_concat(ptr %t90, ptr @.str940) + %t92 = call ptr @fn_str_concat(ptr @.str939, ptr %t91) %t93 = call ptr @fn_emit_bind(ptr %t92) - %t94 = call ptr @fn_val(ptr %t93, ptr @.str885) + %t94 = call ptr @fn_val(ptr %t93, ptr @.str941) store ptr %t94, ptr %retval br label %ret ifend32: @@ -14631,7 +14849,7 @@ ifend41: br i1 %t121, label %then42, label %ifend44 then42: %t122 = load ptr, ptr %t6 - %t123 = call ptr @fn_sconcat(ptr @.str886, ptr %t122) + %t123 = call ptr @fn_str_concat(ptr @.str942, ptr %t122) store ptr %t123, ptr %t124 %t125 = load ptr, ptr %t124 %t126 = call ptr @fn_find_fn(ptr %t125) @@ -14643,7 +14861,7 @@ then42: br i1 %t130, label %then45, label %ifend47 then45: %t131 = load ptr, ptr %t6 - %t132 = call ptr @fn_sconcat(ptr @.str887, ptr %t131) + %t132 = call ptr @fn_str_concat(ptr @.str943, ptr %t131) call void @fn_perr(ptr %t132) br label %ifend47 ifend47: @@ -14765,10 +14983,10 @@ wend50: %t216 = load ptr, ptr %t215 %t217 = call ptr @fn_llty(ptr %t216) store ptr %t217, ptr %t218 - call void @fn_emit(ptr @.str888) - store ptr @.str889, ptr %t219 + call void @fn_emit(ptr @.str944) + store ptr @.str945, ptr %t219 %t220 = load ptr, ptr %t218 - %t221 = call i32 @fn_streq(ptr %t220, ptr @.str890) + %t221 = call i32 @fn_str_eq(ptr %t220, ptr @.str946) %t222 = icmp eq i32 %t221, 0 %t223 = zext i1 %t222 to i32 %t224 = icmp ne i32 %t223, 0 @@ -14778,16 +14996,16 @@ then55: store ptr %t225, ptr %t219 %t226 = load ptr, ptr %t219 call void @fn_emit(ptr %t226) - call void @fn_emit(ptr @.str891) + call void @fn_emit(ptr @.str947) br label %ifend57 ifend57: - call void @fn_emit(ptr @.str892) + call void @fn_emit(ptr @.str948) %t227 = load ptr, ptr %t218 call void @fn_emit(ptr %t227) - call void @fn_emit(ptr @.str893) + call void @fn_emit(ptr @.str949) %t228 = load ptr, ptr %t117 call void @fn_emit(ptr %t228) - call void @fn_emit(ptr @.str894) + call void @fn_emit(ptr @.str950) store i32 0, ptr %t148 br label %wcond58 wcond58: @@ -14806,7 +15024,7 @@ wbody59: %t239 = icmp ne i32 %t238, 0 br i1 %t239, label %then61, label %ifend63 then61: - call void @fn_emit(ptr @.str895) + call void @fn_emit(ptr @.str951) br label %ifend63 ifend63: %t240 = load ptr, ptr %t147 @@ -14817,7 +15035,7 @@ ifend63: %t245 = load ptr, ptr %t244 %t246 = call ptr @fn_llty(ptr %t245) call void @fn_emit(ptr %t246) - call void @fn_emit(ptr @.str896) + call void @fn_emit(ptr @.str952) %t247 = load ptr, ptr %t140 %t248 = getelementptr inbounds %LSlice, ptr %t247, i32 0, i32 0 %t249 = load ptr, ptr %t248 @@ -14830,7 +15048,7 @@ ifend63: store i32 %t254, ptr %t148 br label %wcond58 wend60: - call void @fn_emit(ptr @.str897) + call void @fn_emit(ptr @.str953) %t255 = load ptr, ptr %t219 %t256 = load ptr, ptr %t115 %t257 = getelementptr inbounds %Cmp_Node, ptr %t256, i32 0, i32 3 @@ -14864,7 +15082,7 @@ entry: %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - %t5 = call ptr @fn_val(ptr @.str898, ptr @.str899) + %t5 = call ptr @fn_val(ptr @.str954, ptr @.str955) store ptr %t5, ptr %retval br label %ret ifend2: @@ -14880,7 +15098,7 @@ then3: %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 2 %t14 = load i32, ptr %t13 %t15 = call ptr @fn_itoa(i32 %t14) - %t16 = call ptr @fn_val(ptr %t15, ptr @.str900) + %t16 = call ptr @fn_val(ptr %t15, ptr @.str956) store ptr %t16, ptr %retval br label %ret ifend5: @@ -14896,7 +15114,7 @@ then6: %t24 = getelementptr inbounds %Cmp_Node, ptr %t23, i32 0, i32 2 %t25 = load i32, ptr %t24 %t26 = call ptr @fn_itoa(i32 %t25) - %t27 = call ptr @fn_val(ptr %t26, ptr @.str901) + %t27 = call ptr @fn_val(ptr %t26, ptr @.str957) store ptr %t27, ptr %retval br label %ret ifend8: @@ -14912,7 +15130,7 @@ then9: %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 2 %t36 = load i32, ptr %t35 %t37 = call ptr @fn_itoa(i32 %t36) - %t38 = call ptr @fn_val(ptr %t37, ptr @.str902) + %t38 = call ptr @fn_val(ptr %t37, ptr @.str958) store ptr %t38, ptr %retval br label %ret ifend11: @@ -14924,7 +15142,7 @@ ifend11: %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then12, label %ifend14 then12: - %t45 = call ptr @fn_val(ptr @.str903, ptr @.str904) + %t45 = call ptr @fn_val(ptr @.str959, ptr @.str960) store ptr %t45, ptr %retval br label %ret ifend14: @@ -14940,7 +15158,7 @@ then15: %t53 = getelementptr inbounds %Cmp_Node, ptr %t52, i32 0, i32 1 %t54 = load ptr, ptr %t53 %t55 = call ptr @fn_emit_str_const(ptr %t54) - %t56 = call ptr @fn_val(ptr %t55, ptr @.str905) + %t56 = call ptr @fn_val(ptr %t55, ptr @.str961) store ptr %t56, ptr %retval br label %ret ifend17: @@ -15033,7 +15251,7 @@ then33: %t122 = getelementptr inbounds %Cmp_Node, ptr %t121, i32 0, i32 2 %t123 = load i32, ptr %t122 %t124 = call ptr @fn_itoa(i32 %t123) - %t125 = call ptr @fn_val(ptr %t124, ptr @.str906) + %t125 = call ptr @fn_val(ptr %t124, ptr @.str962) store ptr %t125, ptr %retval br label %ret ifend35: @@ -15044,9 +15262,9 @@ ifend35: %t130 = load ptr, ptr %t0 %t131 = getelementptr inbounds %Cmp_Node, ptr %t130, i32 0, i32 1 %t132 = load ptr, ptr %t131 - %t133 = call ptr @fn_sconcat(ptr @.str908, ptr %t132) - %t134 = call ptr @fn_sconcat(ptr %t129, ptr %t133) - %t135 = call ptr @fn_sconcat(ptr @.str907, ptr %t134) + %t133 = call ptr @fn_str_concat(ptr @.str964, ptr %t132) + %t134 = call ptr @fn_str_concat(ptr %t129, ptr %t133) + %t135 = call ptr @fn_str_concat(ptr @.str963, ptr %t134) %t136 = call ptr @fn_emit_bind(ptr %t135) store ptr %t136, ptr %t137 %t138 = load ptr, ptr %t137 @@ -15069,14 +15287,14 @@ then36: %t150 = load ptr, ptr %t149 %t151 = call i32 @fn_ui_index_of(ptr %t150) %t152 = call ptr @fn_itoa(i32 %t151) - %t153 = call ptr @fn_val(ptr %t152, ptr @.str909) + %t153 = call ptr @fn_val(ptr %t152, ptr @.str965) store ptr %t153, ptr %retval br label %ret ifend38: %t154 = load ptr, ptr %t0 %t155 = getelementptr inbounds %Cmp_Node, ptr %t154, i32 0, i32 1 %t156 = load ptr, ptr %t155 - %t157 = call ptr @fn_sconcat(ptr @.str910, ptr %t156) + %t157 = call ptr @fn_str_concat(ptr @.str966, ptr %t156) call void @fn_perr(ptr %t157) br label %ifend26 ifend26: @@ -15116,7 +15334,7 @@ then42: then45: %t186 = load i32, ptr %t181 %t187 = call ptr @fn_itoa(i32 %t186) - %t188 = call ptr @fn_val(ptr %t187, ptr @.str911) + %t188 = call ptr @fn_val(ptr %t187, ptr @.str967) store ptr %t188, ptr %retval br label %ret ifend47: @@ -15224,53 +15442,53 @@ then63: %t259 = load ptr, ptr %t0 %t260 = getelementptr inbounds %Cmp_Node, ptr %t259, i32 0, i32 1 %t261 = load ptr, ptr %t260 - %t262 = call i32 @fn_streq(ptr %t261, ptr @.str912) + %t262 = call i32 @fn_str_eq(ptr %t261, ptr @.str968) %t263 = icmp ne i32 %t262, 0 br i1 %t263, label %then66, label %ifend68 then66: %t264 = load ptr, ptr %t258 %t265 = getelementptr inbounds %Cmp_Val, ptr %t264, i32 0, i32 0 %t266 = load ptr, ptr %t265 - %t267 = call ptr @fn_sconcat(ptr @.str913, ptr %t266) + %t267 = call ptr @fn_str_concat(ptr @.str969, ptr %t266) %t268 = call ptr @fn_emit_bind(ptr %t267) - %t269 = call ptr @fn_val(ptr %t268, ptr @.str914) + %t269 = call ptr @fn_val(ptr %t268, ptr @.str970) store ptr %t269, ptr %retval br label %ret ifend68: %t270 = load ptr, ptr %t0 %t271 = getelementptr inbounds %Cmp_Node, ptr %t270, i32 0, i32 1 %t272 = load ptr, ptr %t271 - %t273 = call i32 @fn_streq(ptr %t272, ptr @.str915) + %t273 = call i32 @fn_str_eq(ptr %t272, ptr @.str971) %t274 = icmp ne i32 %t273, 0 br i1 %t274, label %then69, label %ifend71 then69: %t275 = load ptr, ptr %t258 %t276 = getelementptr inbounds %Cmp_Val, ptr %t275, i32 0, i32 0 %t277 = load ptr, ptr %t276 - %t278 = call ptr @fn_sconcat(ptr %t277, ptr @.str917) - %t279 = call ptr @fn_sconcat(ptr @.str916, ptr %t278) + %t278 = call ptr @fn_str_concat(ptr %t277, ptr @.str973) + %t279 = call ptr @fn_str_concat(ptr @.str972, ptr %t278) %t280 = call ptr @fn_emit_bind(ptr %t279) - %t281 = call ptr @fn_val(ptr %t280, ptr @.str918) + %t281 = call ptr @fn_val(ptr %t280, ptr @.str974) store ptr %t281, ptr %retval br label %ret ifend71: %t282 = load ptr, ptr %t258 %t283 = getelementptr inbounds %Cmp_Val, ptr %t282, i32 0, i32 0 %t284 = load ptr, ptr %t283 - %t285 = call ptr @fn_sconcat(ptr %t284, ptr @.str920) - %t286 = call ptr @fn_sconcat(ptr @.str919, ptr %t285) + %t285 = call ptr @fn_str_concat(ptr %t284, ptr @.str976) + %t286 = call ptr @fn_str_concat(ptr @.str975, ptr %t285) %t287 = call ptr @fn_emit_bind(ptr %t286) store ptr %t287, ptr %t288 %t289 = load ptr, ptr %t288 - %t290 = call ptr @fn_sconcat(ptr %t289, ptr @.str922) - %t291 = call ptr @fn_sconcat(ptr @.str921, ptr %t290) + %t290 = call ptr @fn_str_concat(ptr %t289, ptr @.str978) + %t291 = call ptr @fn_str_concat(ptr @.str977, ptr %t290) %t292 = call ptr @fn_emit_bind(ptr %t291) - %t293 = call ptr @fn_val(ptr %t292, ptr @.str923) + %t293 = call ptr @fn_val(ptr %t292, ptr @.str979) store ptr %t293, ptr %retval br label %ret ifend65: - call void @fn_perr(ptr @.str924) - %t294 = call ptr @fn_val(ptr @.str925, ptr @.str926) + call void @fn_perr(ptr @.str980) + %t294 = call ptr @fn_val(ptr @.str981, ptr @.str982) store ptr %t294, ptr %retval br label %ret ret: @@ -15330,16 +15548,16 @@ entry: store ptr %arg_lt, ptr %t0 store ptr %arg_v, ptr %t1 store ptr %arg_addr, ptr %t2 - call void @fn_emit(ptr @.str927) + call void @fn_emit(ptr @.str983) %t3 = load ptr, ptr %t0 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str928) + call void @fn_emit(ptr @.str984) %t4 = load ptr, ptr %t1 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str929) + call void @fn_emit(ptr @.str985) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str930) + call void @fn_emit(ptr @.str986) br label %ret ret: ret void @@ -15363,8 +15581,8 @@ entry: %t2 = getelementptr inbounds %Cmp_Node, ptr %t1, i32 0, i32 4 %t3 = load ptr, ptr %t2 store ptr %t3, ptr %t4 - store ptr @.str931, ptr %t5 - store ptr @.str932, ptr %t6 + store ptr @.str987, ptr %t5 + store ptr @.str988, ptr %t6 %t7 = load ptr, ptr %t4 %t8 = getelementptr inbounds %Cmp_Node, ptr %t7, i32 0, i32 0 %t9 = load i32, ptr %t8 @@ -15402,9 +15620,9 @@ then6: %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 8 %t36 = load i32, ptr %t35 %t37 = call ptr @fn_itoa(i32 %t36) - %t38 = call ptr @fn_sconcat(ptr @.str934, ptr %t37) - %t39 = call ptr @fn_sconcat(ptr %t33, ptr %t38) - %t40 = call ptr @fn_sconcat(ptr @.str933, ptr %t39) + %t38 = call ptr @fn_str_concat(ptr @.str990, ptr %t37) + %t39 = call ptr @fn_str_concat(ptr %t33, ptr %t38) + %t40 = call ptr @fn_str_concat(ptr @.str989, ptr %t39) call void @fn_perr(ptr %t40) br label %ifend8 ifend8: @@ -15438,14 +15656,14 @@ then9: %t62 = load ptr, ptr %t4 %t63 = getelementptr inbounds %Cmp_Node, ptr %t62, i32 0, i32 1 %t64 = load ptr, ptr %t63 - %t65 = call ptr @fn_sconcat(ptr @.str935, ptr %t64) + %t65 = call ptr @fn_str_concat(ptr @.str991, ptr %t64) call void @fn_perr(ptr %t65) br label %ifend11 ifend11: %t66 = load ptr, ptr %t4 %t67 = getelementptr inbounds %Cmp_Node, ptr %t66, i32 0, i32 1 %t68 = load ptr, ptr %t67 - %t69 = call ptr @fn_sconcat(ptr @.str936, ptr %t68) + %t69 = call ptr @fn_str_concat(ptr @.str992, ptr %t68) store ptr %t69, ptr %t5 %t70 = load ptr, ptr %t57 %t71 = getelementptr inbounds %Cmp_Node, ptr %t70, i32 0, i32 3 @@ -15485,7 +15703,7 @@ then15: store ptr %t90, ptr %t6 br label %ifend17 else16: - call void @fn_perr(ptr @.str937) + call void @fn_perr(ptr @.str993) br label %ifend17 ifend17: br label %ifend14 @@ -15507,7 +15725,7 @@ ifend2: %t103 = load ptr, ptr %t0 %t104 = getelementptr inbounds %Cmp_Node, ptr %t103, i32 0, i32 1 %t105 = load ptr, ptr %t104 - %t106 = call i32 @fn_streq(ptr %t105, ptr @.str938) + %t106 = call i32 @fn_str_eq(ptr %t105, ptr @.str994) %t107 = icmp eq i32 %t106, 0 %t108 = zext i1 %t107 to i32 %t109 = icmp ne i32 %t108, 0 @@ -15515,49 +15733,49 @@ ifend2: then18: %t110 = load ptr, ptr %t93 %t111 = load ptr, ptr %t5 - %t112 = call ptr @fn_sconcat(ptr @.str940, ptr %t111) - %t113 = call ptr @fn_sconcat(ptr %t110, ptr %t112) - %t114 = call ptr @fn_sconcat(ptr @.str939, ptr %t113) + %t112 = call ptr @fn_str_concat(ptr @.str996, ptr %t111) + %t113 = call ptr @fn_str_concat(ptr %t110, ptr %t112) + %t114 = call ptr @fn_str_concat(ptr @.str995, ptr %t113) %t115 = call ptr @fn_emit_bind(ptr %t114) store ptr %t115, ptr %t116 - store ptr @.str941, ptr %t117 + store ptr @.str997, ptr %t117 %t118 = load ptr, ptr %t0 %t119 = getelementptr inbounds %Cmp_Node, ptr %t118, i32 0, i32 1 %t120 = load ptr, ptr %t119 - %t121 = call i32 @fn_streq(ptr %t120, ptr @.str942) + %t121 = call i32 @fn_str_eq(ptr %t120, ptr @.str998) %t122 = icmp ne i32 %t121, 0 br i1 %t122, label %then21, label %ifend23 then21: - store ptr @.str943, ptr %t117 + store ptr @.str999, ptr %t117 br label %ifend23 ifend23: %t123 = load ptr, ptr %t0 %t124 = getelementptr inbounds %Cmp_Node, ptr %t123, i32 0, i32 1 %t125 = load ptr, ptr %t124 - %t126 = call i32 @fn_streq(ptr %t125, ptr @.str944) + %t126 = call i32 @fn_str_eq(ptr %t125, ptr @.str1000) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then24, label %ifend26 then24: - store ptr @.str945, ptr %t117 + store ptr @.str1001, ptr %t117 br label %ifend26 ifend26: %t128 = load ptr, ptr %t0 %t129 = getelementptr inbounds %Cmp_Node, ptr %t128, i32 0, i32 1 %t130 = load ptr, ptr %t129 - %t131 = call i32 @fn_streq(ptr %t130, ptr @.str946) + %t131 = call i32 @fn_str_eq(ptr %t130, ptr @.str1002) %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then27, label %ifend29 then27: - store ptr @.str947, ptr %t117 + store ptr @.str1003, ptr %t117 br label %ifend29 ifend29: %t133 = load ptr, ptr %t117 %t134 = load ptr, ptr %t116 %t135 = load ptr, ptr %t102 - %t136 = call ptr @fn_sconcat(ptr @.str949, ptr %t135) - %t137 = call ptr @fn_sconcat(ptr %t134, ptr %t136) - %t138 = call ptr @fn_sconcat(ptr @.str948, ptr %t137) - %t139 = call ptr @fn_sconcat(ptr %t133, ptr %t138) + %t136 = call ptr @fn_str_concat(ptr @.str1005, ptr %t135) + %t137 = call ptr @fn_str_concat(ptr %t134, ptr %t136) + %t138 = call ptr @fn_str_concat(ptr @.str1004, ptr %t137) + %t139 = call ptr @fn_str_concat(ptr %t133, ptr %t138) %t140 = call ptr @fn_emit_bind(ptr %t139) store ptr %t140, ptr %t102 br label %ifend20 @@ -15589,8 +15807,8 @@ entry: %t6 = load ptr, ptr %t5 %t7 = getelementptr inbounds %Cmp_Val, ptr %t6, i32 0, i32 0 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str951) - %t10 = call ptr @fn_sconcat(ptr @.str950, ptr %t9) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str1007) + %t10 = call ptr @fn_str_concat(ptr @.str1006, ptr %t9) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t0 @@ -15599,43 +15817,43 @@ entry: %t16 = icmp ne ptr %t15, null %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t18 - %t19 = call ptr @fn_lbl(ptr @.str952) + %t19 = call ptr @fn_lbl(ptr @.str1008) store ptr %t19, ptr %t20 - %t21 = call ptr @fn_lbl(ptr @.str953) + %t21 = call ptr @fn_lbl(ptr @.str1009) store ptr %t21, ptr %t22 - %t23 = call ptr @fn_lbl(ptr @.str954) + %t23 = call ptr @fn_lbl(ptr @.str1010) store ptr %t23, ptr %t24 %t25 = load i32, ptr %t18 %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then0, label %else1 then0: - call void @fn_emit(ptr @.str955) + call void @fn_emit(ptr @.str1011) %t27 = load ptr, ptr %t12 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str956) + call void @fn_emit(ptr @.str1012) %t28 = load ptr, ptr %t20 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str957) + call void @fn_emit(ptr @.str1013) %t29 = load ptr, ptr %t22 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str958) + call void @fn_emit(ptr @.str1014) br label %ifend2 else1: - call void @fn_emit(ptr @.str959) + call void @fn_emit(ptr @.str1015) %t30 = load ptr, ptr %t12 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str960) + call void @fn_emit(ptr @.str1016) %t31 = load ptr, ptr %t20 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str961) + call void @fn_emit(ptr @.str1017) %t32 = load ptr, ptr %t24 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str962) + call void @fn_emit(ptr @.str1018) br label %ifend2 ifend2: %t33 = load ptr, ptr %t20 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str963) + call void @fn_emit(ptr @.str1019) store i32 0, ptr @g_g_term %t34 = load ptr, ptr %t0 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 5 @@ -15647,10 +15865,10 @@ ifend2: %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str964) + call void @fn_emit(ptr @.str1020) %t41 = load ptr, ptr %t24 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str965) + call void @fn_emit(ptr @.str1021) br label %ifend5 ifend5: %t42 = load i32, ptr %t18 @@ -15659,7 +15877,7 @@ ifend5: then6: %t44 = load ptr, ptr %t22 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str966) + call void @fn_emit(ptr @.str1022) store i32 0, ptr @g_g_term %t45 = load ptr, ptr %t0 %t46 = getelementptr inbounds %Cmp_Node, ptr %t45, i32 0, i32 6 @@ -15689,17 +15907,17 @@ ifend11: %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str967) + call void @fn_emit(ptr @.str1023) %t63 = load ptr, ptr %t24 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str968) + call void @fn_emit(ptr @.str1024) br label %ifend14 ifend14: br label %ifend8 ifend8: %t64 = load ptr, ptr %t24 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str969) + call void @fn_emit(ptr @.str1025) store i32 0, ptr @g_g_term br label %ret ret: @@ -15715,19 +15933,19 @@ entry: %t13 = alloca ptr %t20 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_lbl(ptr @.str970) + %t1 = call ptr @fn_lbl(ptr @.str1026) store ptr %t1, ptr %t2 - %t3 = call ptr @fn_lbl(ptr @.str971) + %t3 = call ptr @fn_lbl(ptr @.str1027) store ptr %t3, ptr %t4 - %t5 = call ptr @fn_lbl(ptr @.str972) + %t5 = call ptr @fn_lbl(ptr @.str1028) store ptr %t5, ptr %t6 - call void @fn_emit(ptr @.str973) + call void @fn_emit(ptr @.str1029) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str974) + call void @fn_emit(ptr @.str1030) %t8 = load ptr, ptr %t2 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str975) + call void @fn_emit(ptr @.str1031) %t9 = load ptr, ptr %t0 %t10 = getelementptr inbounds %Cmp_Node, ptr %t9, i32 0, i32 4 %t11 = load ptr, ptr %t10 @@ -15736,23 +15954,23 @@ entry: %t14 = load ptr, ptr %t13 %t15 = getelementptr inbounds %Cmp_Val, ptr %t14, i32 0, i32 0 %t16 = load ptr, ptr %t15 - %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str977) - %t18 = call ptr @fn_sconcat(ptr @.str976, ptr %t17) + %t17 = call ptr @fn_str_concat(ptr %t16, ptr @.str1033) + %t18 = call ptr @fn_str_concat(ptr @.str1032, ptr %t17) %t19 = call ptr @fn_emit_bind(ptr %t18) store ptr %t19, ptr %t20 - call void @fn_emit(ptr @.str978) + call void @fn_emit(ptr @.str1034) %t21 = load ptr, ptr %t20 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str979) + call void @fn_emit(ptr @.str1035) %t22 = load ptr, ptr %t4 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str980) + call void @fn_emit(ptr @.str1036) %t23 = load ptr, ptr %t6 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str981) + call void @fn_emit(ptr @.str1037) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str982) + call void @fn_emit(ptr @.str1038) store i32 0, ptr @g_g_term %t25 = load ptr, ptr %t2 %t26 = load ptr, ptr %t6 @@ -15768,15 +15986,15 @@ entry: %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str983) + call void @fn_emit(ptr @.str1039) %t34 = load ptr, ptr %t2 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str984) + call void @fn_emit(ptr @.str1040) br label %ifend2 ifend2: %t35 = load ptr, ptr %t6 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str985) + call void @fn_emit(ptr @.str1041) store i32 0, ptr @g_g_term br label %ret ret: @@ -15798,7 +16016,7 @@ entry: %t62 = alloca ptr %t67 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str986) + %t1 = call ptr @fn_emit_alloca(ptr @.str1042) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 4 @@ -15809,29 +16027,29 @@ entry: %t9 = getelementptr inbounds %Cmp_Val, ptr %t8, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = load ptr, ptr %t2 - call void @fn_store_at(ptr @.str987, ptr %t10, ptr %t11) + call void @fn_store_at(ptr @.str1043, ptr %t10, ptr %t11) %t12 = load ptr, ptr %t0 %t13 = getelementptr inbounds %Cmp_Node, ptr %t12, i32 0, i32 1 %t14 = load ptr, ptr %t13 %t15 = load ptr, ptr %t2 - call void @fn_loc_push(ptr %t14, ptr %t15, ptr @.str988) - %t16 = call ptr @fn_lbl(ptr @.str989) + call void @fn_loc_push(ptr %t14, ptr %t15, ptr @.str1044) + %t16 = call ptr @fn_lbl(ptr @.str1045) store ptr %t16, ptr %t17 - %t18 = call ptr @fn_lbl(ptr @.str990) + %t18 = call ptr @fn_lbl(ptr @.str1046) store ptr %t18, ptr %t19 - %t20 = call ptr @fn_lbl(ptr @.str991) + %t20 = call ptr @fn_lbl(ptr @.str1047) store ptr %t20, ptr %t21 - %t22 = call ptr @fn_lbl(ptr @.str992) + %t22 = call ptr @fn_lbl(ptr @.str1048) store ptr %t22, ptr %t23 - call void @fn_emit(ptr @.str993) + call void @fn_emit(ptr @.str1049) %t24 = load ptr, ptr %t17 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str994) + call void @fn_emit(ptr @.str1050) %t25 = load ptr, ptr %t17 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str995) + call void @fn_emit(ptr @.str1051) %t26 = load ptr, ptr %t2 - %t27 = call ptr @fn_sconcat(ptr @.str996, ptr %t26) + %t27 = call ptr @fn_str_concat(ptr @.str1052, ptr %t26) %t28 = call ptr @fn_emit_bind(ptr %t27) store ptr %t28, ptr %t29 %t30 = load ptr, ptr %t0 @@ -15843,24 +16061,24 @@ entry: %t36 = load ptr, ptr %t34 %t37 = getelementptr inbounds %Cmp_Val, ptr %t36, i32 0, i32 0 %t38 = load ptr, ptr %t37 - %t39 = call ptr @fn_sconcat(ptr @.str998, ptr %t38) - %t40 = call ptr @fn_sconcat(ptr %t35, ptr %t39) - %t41 = call ptr @fn_sconcat(ptr @.str997, ptr %t40) + %t39 = call ptr @fn_str_concat(ptr @.str1054, ptr %t38) + %t40 = call ptr @fn_str_concat(ptr %t35, ptr %t39) + %t41 = call ptr @fn_str_concat(ptr @.str1053, ptr %t40) %t42 = call ptr @fn_emit_bind(ptr %t41) store ptr %t42, ptr %t43 - call void @fn_emit(ptr @.str999) + call void @fn_emit(ptr @.str1055) %t44 = load ptr, ptr %t43 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str1000) + call void @fn_emit(ptr @.str1056) %t45 = load ptr, ptr %t19 call void @fn_emit(ptr %t45) - call void @fn_emit(ptr @.str1001) + call void @fn_emit(ptr @.str1057) %t46 = load ptr, ptr %t23 call void @fn_emit(ptr %t46) - call void @fn_emit(ptr @.str1002) + call void @fn_emit(ptr @.str1058) %t47 = load ptr, ptr %t19 call void @fn_emit(ptr %t47) - call void @fn_emit(ptr @.str1003) + call void @fn_emit(ptr @.str1059) store i32 0, ptr @g_g_term %t48 = load ptr, ptr %t21 %t49 = load ptr, ptr %t23 @@ -15876,34 +16094,34 @@ entry: %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1004) + call void @fn_emit(ptr @.str1060) %t57 = load ptr, ptr %t21 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1005) + call void @fn_emit(ptr @.str1061) br label %ifend2 ifend2: %t58 = load ptr, ptr %t21 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str1006) + call void @fn_emit(ptr @.str1062) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_sconcat(ptr @.str1007, ptr %t59) + %t60 = call ptr @fn_str_concat(ptr @.str1063, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) store ptr %t61, ptr %t62 %t63 = load ptr, ptr %t62 - %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str1009) - %t65 = call ptr @fn_sconcat(ptr @.str1008, ptr %t64) + %t64 = call ptr @fn_str_concat(ptr %t63, ptr @.str1065) + %t65 = call ptr @fn_str_concat(ptr @.str1064, ptr %t64) %t66 = call ptr @fn_emit_bind(ptr %t65) store ptr %t66, ptr %t67 %t68 = load ptr, ptr %t67 %t69 = load ptr, ptr %t2 - call void @fn_store_at(ptr @.str1010, ptr %t68, ptr %t69) - call void @fn_emit(ptr @.str1011) + call void @fn_store_at(ptr @.str1066, ptr %t68, ptr %t69) + call void @fn_emit(ptr @.str1067) %t70 = load ptr, ptr %t17 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str1012) + call void @fn_emit(ptr @.str1068) %t71 = load ptr, ptr %t23 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str1013) + call void @fn_emit(ptr @.str1069) store i32 0, ptr @g_g_term br label %ret ret: @@ -15933,10 +16151,10 @@ then0: %t14 = load ptr, ptr %t11 %t15 = getelementptr inbounds %Cmp_Val, ptr %t14, i32 0, i32 0 %t16 = load ptr, ptr %t15 - call void @fn_store_at(ptr %t13, ptr %t16, ptr @.str1014) + call void @fn_store_at(ptr %t13, ptr %t16, ptr @.str1070) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1015) + call void @fn_emit(ptr @.str1071) store i32 1, ptr @g_g_term br label %ret ret: @@ -15991,7 +16209,7 @@ sc3: %t33 = load ptr, ptr %t32 %t34 = getelementptr inbounds %Cmp_Node, ptr %t33, i32 0, i32 1 %t35 = load ptr, ptr %t34 - %t36 = call i32 @fn_streq(ptr %t35, ptr @.str1016) + %t36 = call i32 @fn_str_eq(ptr %t35, ptr @.str1072) %t37 = icmp ne i32 %t36, 0 %t38 = zext i1 %t37 to i32 store i32 %t38, ptr %t11 @@ -16037,7 +16255,7 @@ entry: %t3 = load ptr, ptr %t2 %t4 = call ptr @fn_emit_expr(ptr %t3) store ptr %t4, ptr %t5 - %t6 = call ptr @fn_lbl(ptr @.str1017) + %t6 = call ptr @fn_lbl(ptr @.str1073) store ptr %t6, ptr %t7 store ptr null, ptr %t8 store i32 0, ptr %t9 @@ -16072,7 +16290,7 @@ then3: store ptr %t31, ptr %t8 br label %ifend5 else4: - store ptr @.str1018, ptr %t32 + store ptr @.str1074, ptr %t32 store i32 1, ptr %t33 store i32 0, ptr %t34 br label %wcond6 @@ -16104,9 +16322,9 @@ wbody7: %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds %Cmp_Val, ptr %t57, i32 0, i32 0 %t59 = load ptr, ptr %t58 - %t60 = call ptr @fn_sconcat(ptr @.str1020, ptr %t59) - %t61 = call ptr @fn_sconcat(ptr %t56, ptr %t60) - %t62 = call ptr @fn_sconcat(ptr @.str1019, ptr %t61) + %t60 = call ptr @fn_str_concat(ptr @.str1076, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr %t56, ptr %t60) + %t62 = call ptr @fn_str_concat(ptr @.str1075, ptr %t61) %t63 = call ptr @fn_emit_bind(ptr %t62) store ptr %t63, ptr %t64 %t65 = load i32, ptr %t33 @@ -16120,9 +16338,9 @@ then9: else10: %t68 = load ptr, ptr %t32 %t69 = load ptr, ptr %t64 - %t70 = call ptr @fn_sconcat(ptr @.str1022, ptr %t69) - %t71 = call ptr @fn_sconcat(ptr %t68, ptr %t70) - %t72 = call ptr @fn_sconcat(ptr @.str1021, ptr %t71) + %t70 = call ptr @fn_str_concat(ptr @.str1078, ptr %t69) + %t71 = call ptr @fn_str_concat(ptr %t68, ptr %t70) + %t72 = call ptr @fn_str_concat(ptr @.str1077, ptr %t71) %t73 = call ptr @fn_emit_bind(ptr %t72) store ptr %t73, ptr %t32 br label %ifend11 @@ -16132,23 +16350,23 @@ ifend11: store i32 %t75, ptr %t34 br label %wcond6 wend8: - %t76 = call ptr @fn_lbl(ptr @.str1023) + %t76 = call ptr @fn_lbl(ptr @.str1079) store ptr %t76, ptr %t77 - %t78 = call ptr @fn_lbl(ptr @.str1024) + %t78 = call ptr @fn_lbl(ptr @.str1080) store ptr %t78, ptr %t79 - call void @fn_emit(ptr @.str1025) + call void @fn_emit(ptr @.str1081) %t80 = load ptr, ptr %t32 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1026) + call void @fn_emit(ptr @.str1082) %t81 = load ptr, ptr %t77 call void @fn_emit(ptr %t81) - call void @fn_emit(ptr @.str1027) + call void @fn_emit(ptr @.str1083) %t82 = load ptr, ptr %t79 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str1028) + call void @fn_emit(ptr @.str1084) %t83 = load ptr, ptr %t77 call void @fn_emit(ptr %t83) - call void @fn_emit(ptr @.str1029) + call void @fn_emit(ptr @.str1085) store i32 0, ptr @g_g_term %t84 = load ptr, ptr %t27 %t85 = getelementptr inbounds %Cmp_Node, ptr %t84, i32 0, i32 4 @@ -16160,15 +16378,15 @@ wend8: %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str1030) + call void @fn_emit(ptr @.str1086) %t91 = load ptr, ptr %t7 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1031) + call void @fn_emit(ptr @.str1087) br label %ifend14 ifend14: %t92 = load ptr, ptr %t79 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str1032) + call void @fn_emit(ptr @.str1088) store i32 0, ptr @g_g_term br label %ifend5 ifend5: @@ -16195,15 +16413,15 @@ ifend17: %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str1033) + call void @fn_emit(ptr @.str1089) %t106 = load ptr, ptr %t7 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str1034) + call void @fn_emit(ptr @.str1090) br label %ifend20 ifend20: %t107 = load ptr, ptr %t7 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str1035) + call void @fn_emit(ptr @.str1091) store i32 0, ptr @g_g_term br label %ret ret: @@ -16283,14 +16501,14 @@ ifend5: %t50 = icmp ne i32 %t49, 0 br i1 %t50, label %then6, label %else7 then6: - store ptr @.str1036, ptr %t51 + store ptr @.str1092, ptr %t51 %t52 = load ptr, ptr %t10 %t53 = call ptr @fn_llty(ptr %t52) - %t54 = call i32 @fn_streq(ptr %t53, ptr @.str1037) + %t54 = call i32 @fn_str_eq(ptr %t53, ptr @.str1093) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %then9, label %ifend11 then9: - store ptr @.str1038, ptr %t51 + store ptr @.str1094, ptr %t51 br label %ifend11 ifend11: %t56 = load ptr, ptr %t10 @@ -16394,7 +16612,7 @@ ifend26: %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %then27, label %ifend29 then27: - call void @fn_emit(ptr @.str1039) + call void @fn_emit(ptr @.str1095) %t120 = load ptr, ptr @g_brk_lbl %t121 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 0 %t122 = load ptr, ptr %t121 @@ -16403,7 +16621,7 @@ then27: %t125 = getelementptr inbounds ptr, ptr %t122, i32 %t124 %t126 = load ptr, ptr %t125 call void @fn_emit(ptr %t126) - call void @fn_emit(ptr @.str1040) + call void @fn_emit(ptr @.str1096) store i32 1, ptr @g_g_term br label %ret ifend29: @@ -16415,7 +16633,7 @@ ifend29: %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then30, label %ifend32 then30: - call void @fn_emit(ptr @.str1041) + call void @fn_emit(ptr @.str1097) %t133 = load ptr, ptr @g_cnt_lbl %t134 = getelementptr inbounds %LSlice, ptr %t133, i32 0, i32 0 %t135 = load ptr, ptr %t134 @@ -16424,7 +16642,7 @@ then30: %t138 = getelementptr inbounds ptr, ptr %t135, i32 %t137 %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str1042) + call void @fn_emit(ptr @.str1098) store i32 1, ptr @g_g_term br label %ret ifend32: @@ -16527,7 +16745,7 @@ then54: store ptr %t198, ptr %t199 br label %ret ifend56: - call void @fn_perr(ptr @.str1043) + call void @fn_perr(ptr @.str1099) br label %ret ret: ret void @@ -16757,24 +16975,24 @@ entry: %t1 = alloca ptr %t11 = alloca i32 %t25 = alloca ptr - call void @fn_emith(ptr @.str1044) - call void @fn_emith(ptr @.str1045) - call void @fn_emith(ptr @.str1046) + call void @fn_emith(ptr @.str1100) + call void @fn_emith(ptr @.str1101) + call void @fn_emith(ptr @.str1102) %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 %t2 = load ptr, ptr %t1 - %t3 = call ptr @fn_sconcat(ptr %t2, ptr @.str1048) - %t4 = call ptr @fn_sconcat(ptr @.str1047, ptr %t3) + %t3 = call ptr @fn_str_concat(ptr %t2, ptr @.str1104) + %t4 = call ptr @fn_str_concat(ptr @.str1103, ptr %t3) call void @fn_emith(ptr %t4) %t5 = load ptr, ptr %t1 - %t6 = call ptr @fn_sconcat(ptr %t5, ptr @.str1050) - %t7 = call ptr @fn_sconcat(ptr @.str1049, ptr %t6) + %t6 = call ptr @fn_str_concat(ptr %t5, ptr @.str1106) + %t7 = call ptr @fn_str_concat(ptr @.str1105, ptr %t6) call void @fn_emith(ptr %t7) %t8 = load ptr, ptr %t1 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1052) - %t10 = call ptr @fn_sconcat(ptr @.str1051, ptr %t9) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str1108) + %t10 = call ptr @fn_str_concat(ptr @.str1107, ptr %t9) call void @fn_emith(ptr %t10) - call void @fn_emith(ptr @.str1053) + call void @fn_emith(ptr @.str1109) store i32 0, ptr %t11 br label %wcond0 wcond0: @@ -16809,21 +17027,21 @@ then3: %t36 = load ptr, ptr %t25 %t37 = getelementptr inbounds %Cmp_Node, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %t37 - %t39 = call ptr @fn_sconcat(ptr %t38, ptr @.str1057) - %t40 = call ptr @fn_sconcat(ptr @.str1056, ptr %t39) - %t41 = call ptr @fn_sconcat(ptr %t35, ptr %t40) - %t42 = call ptr @fn_sconcat(ptr @.str1055, ptr %t41) - %t43 = call ptr @fn_sconcat(ptr %t34, ptr %t42) - %t44 = call ptr @fn_sconcat(ptr @.str1054, ptr %t43) + %t39 = call ptr @fn_str_concat(ptr %t38, ptr @.str1113) + %t40 = call ptr @fn_str_concat(ptr @.str1112, ptr %t39) + %t41 = call ptr @fn_str_concat(ptr %t35, ptr %t40) + %t42 = call ptr @fn_str_concat(ptr @.str1111, ptr %t41) + %t43 = call ptr @fn_str_concat(ptr %t34, ptr %t42) + %t44 = call ptr @fn_str_concat(ptr @.str1110, ptr %t43) call void @fn_emith(ptr %t44) %t45 = load ptr, ptr %t25 %t46 = getelementptr inbounds %Cmp_Node, ptr %t45, i32 0, i32 1 %t47 = load ptr, ptr %t46 %t48 = load ptr, ptr %t1 - %t49 = call ptr @fn_sconcat(ptr %t48, ptr @.str1060) - %t50 = call ptr @fn_sconcat(ptr @.str1059, ptr %t49) - %t51 = call ptr @fn_sconcat(ptr %t47, ptr %t50) - %t52 = call ptr @fn_sconcat(ptr @.str1058, ptr %t51) + %t49 = call ptr @fn_str_concat(ptr %t48, ptr @.str1116) + %t50 = call ptr @fn_str_concat(ptr @.str1115, ptr %t49) + %t51 = call ptr @fn_str_concat(ptr %t47, ptr %t50) + %t52 = call ptr @fn_str_concat(ptr @.str1114, ptr %t51) call void @fn_emith(ptr %t52) br label %ifend5 ifend5: @@ -16838,8 +17056,8 @@ then6: %t59 = load ptr, ptr %t25 %t60 = getelementptr inbounds %Cmp_Node, ptr %t59, i32 0, i32 1 %t61 = load ptr, ptr %t60 - %t62 = call ptr @fn_sconcat(ptr %t61, ptr @.str1062) - %t63 = call ptr @fn_sconcat(ptr @.str1061, ptr %t62) + %t62 = call ptr @fn_str_concat(ptr %t61, ptr @.str1118) + %t63 = call ptr @fn_str_concat(ptr @.str1117, ptr %t62) call void @fn_emith(ptr %t63) br label %ifend8 ifend8: @@ -16854,8 +17072,8 @@ then9: %t70 = load ptr, ptr %t25 %t71 = getelementptr inbounds %Cmp_Node, ptr %t70, i32 0, i32 1 %t72 = load ptr, ptr %t71 - %t73 = call ptr @fn_sconcat(ptr %t72, ptr @.str1064) - %t74 = call ptr @fn_sconcat(ptr @.str1063, ptr %t73) + %t73 = call ptr @fn_str_concat(ptr %t72, ptr @.str1120) + %t74 = call ptr @fn_str_concat(ptr @.str1119, ptr %t73) call void @fn_emith(ptr %t74) br label %ifend11 ifend11: @@ -16876,7 +17094,7 @@ entry: %t24 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emit(ptr @.str1065) + call void @fn_emit(ptr @.str1121) store i32 0, ptr %t2 br label %wcond0 wcond0: @@ -16904,15 +17122,15 @@ wbody1: then3: %t21 = load i32, ptr %t2 %t22 = call ptr @fn_itoa(i32 %t21) - %t23 = call ptr @fn_sconcat(ptr @.str1066, ptr %t22) + %t23 = call ptr @fn_str_concat(ptr @.str1122, ptr %t22) store ptr %t23, ptr %t24 - call void @fn_emit(ptr @.str1067) + call void @fn_emit(ptr @.str1123) %t25 = load ptr, ptr %t24 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1068) + call void @fn_emit(ptr @.str1124) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1069) + call void @fn_emit(ptr @.str1125) %t27 = load ptr, ptr @g_prog %t28 = getelementptr inbounds %LSlice, ptr %t27, i32 0, i32 0 %t29 = load ptr, ptr %t28 @@ -16922,11 +17140,11 @@ then3: %t33 = getelementptr inbounds %Cmp_Node, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %t33 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1070) - call void @fn_emit(ptr @.str1071) + call void @fn_emit(ptr @.str1126) + call void @fn_emit(ptr @.str1127) %t35 = load ptr, ptr %t24 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1072) + call void @fn_emit(ptr @.str1128) br label %ifend5 ifend5: %t36 = load i32, ptr %t2 @@ -16934,54 +17152,54 @@ ifend5: store i32 %t37, ptr %t2 br label %wcond0 wend2: - call void @fn_emit(ptr @.str1073) + call void @fn_emit(ptr @.str1129) %t38 = load ptr, ptr %t1 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str1074) - call void @fn_emit(ptr @.str1075) - call void @fn_emit(ptr @.str1076) - call void @fn_emit(ptr @.str1077) - call void @fn_emit(ptr @.str1078) - call void @fn_emit(ptr @.str1079) - call void @fn_emit(ptr @.str1080) - call void @fn_emit(ptr @.str1081) - call void @fn_emit(ptr @.str1082) - call void @fn_emit(ptr @.str1083) + call void @fn_emit(ptr @.str1130) + call void @fn_emit(ptr @.str1131) + call void @fn_emit(ptr @.str1132) + call void @fn_emit(ptr @.str1133) + call void @fn_emit(ptr @.str1134) + call void @fn_emit(ptr @.str1135) + call void @fn_emit(ptr @.str1136) + call void @fn_emit(ptr @.str1137) + call void @fn_emit(ptr @.str1138) + call void @fn_emit(ptr @.str1139) %t39 = load ptr, ptr %t1 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str1084) - call void @fn_emit(ptr @.str1085) - call void @fn_emit(ptr @.str1086) - call void @fn_emit(ptr @.str1087) - call void @fn_emit(ptr @.str1088) - call void @fn_emit(ptr @.str1089) - call void @fn_emit(ptr @.str1090) - call void @fn_emit(ptr @.str1091) - call void @fn_emit(ptr @.str1092) - call void @fn_emit(ptr @.str1093) - call void @fn_emit(ptr @.str1094) - call void @fn_emit(ptr @.str1095) + call void @fn_emit(ptr @.str1140) + call void @fn_emit(ptr @.str1141) + call void @fn_emit(ptr @.str1142) + call void @fn_emit(ptr @.str1143) + call void @fn_emit(ptr @.str1144) + call void @fn_emit(ptr @.str1145) + call void @fn_emit(ptr @.str1146) + call void @fn_emit(ptr @.str1147) + call void @fn_emit(ptr @.str1148) + call void @fn_emit(ptr @.str1149) + call void @fn_emit(ptr @.str1150) + call void @fn_emit(ptr @.str1151) %t40 = load ptr, ptr %t1 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str1096) - call void @fn_emit(ptr @.str1097) - call void @fn_emit(ptr @.str1098) - call void @fn_emit(ptr @.str1099) - call void @fn_emit(ptr @.str1100) + call void @fn_emit(ptr @.str1152) + call void @fn_emit(ptr @.str1153) + call void @fn_emit(ptr @.str1154) + call void @fn_emit(ptr @.str1155) + call void @fn_emit(ptr @.str1156) %t41 = load ptr, ptr %t1 call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str1101) - call void @fn_emit(ptr @.str1102) - call void @fn_emit(ptr @.str1103) - call void @fn_emit(ptr @.str1104) - call void @fn_emit(ptr @.str1105) + call void @fn_emit(ptr @.str1157) + call void @fn_emit(ptr @.str1158) + call void @fn_emit(ptr @.str1159) + call void @fn_emit(ptr @.str1160) + call void @fn_emit(ptr @.str1161) %t42 = load ptr, ptr %t1 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str1106) - call void @fn_emit(ptr @.str1107) - call void @fn_emit(ptr @.str1108) - call void @fn_emit(ptr @.str1109) - call void @fn_emit(ptr @.str1110) + call void @fn_emit(ptr @.str1162) + call void @fn_emit(ptr @.str1163) + call void @fn_emit(ptr @.str1164) + call void @fn_emit(ptr @.str1165) + call void @fn_emit(ptr @.str1166) br label %ret ret: ret void @@ -17029,7 +17247,7 @@ then3: %t27 = getelementptr inbounds %Cmp_Node, ptr %t26, i32 0, i32 1 %t28 = load ptr, ptr %t27 %t29 = load ptr, ptr %t0 - %t30 = call i32 @fn_streq(ptr %t28, ptr %t29) + %t30 = call i32 @fn_str_eq(ptr %t28, ptr %t29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then6, label %ifend8 then6: @@ -17098,10 +17316,10 @@ entry: store ptr %arg_st, ptr %t0 %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 - %t3 = call ptr @fn_emit_alloca(ptr @.str1111) + %t3 = call ptr @fn_emit_alloca(ptr @.str1167) store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - call void @fn_store_at(ptr @.str1112, ptr @.str1113, ptr %t5) + call void @fn_store_at(ptr @.str1168, ptr @.str1169, ptr %t5) %t6 = load i32, ptr @g_nself %t7 = load ptr, ptr @g_self_stk %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 1 @@ -17153,88 +17371,88 @@ ifend2: %t39 = load i32, ptr @g_nself %t40 = add i32 %t39, 1 store i32 %t40, ptr @g_nself - %t41 = call ptr @fn_lbl(ptr @.str1114) + %t41 = call ptr @fn_lbl(ptr @.str1170) store ptr %t41, ptr %t42 - %t43 = call ptr @fn_lbl(ptr @.str1115) + %t43 = call ptr @fn_lbl(ptr @.str1171) store ptr %t43, ptr %t44 - %t45 = call ptr @fn_lbl(ptr @.str1116) + %t45 = call ptr @fn_lbl(ptr @.str1172) store ptr %t45, ptr %t46 - %t47 = call ptr @fn_lbl(ptr @.str1117) + %t47 = call ptr @fn_lbl(ptr @.str1173) store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1118) + call void @fn_emit(ptr @.str1174) %t49 = load ptr, ptr %t42 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1119) + call void @fn_emit(ptr @.str1175) %t50 = load ptr, ptr %t42 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1120) + call void @fn_emit(ptr @.str1176) %t51 = load ptr, ptr %t4 - %t52 = call ptr @fn_sconcat(ptr @.str1121, ptr %t51) + %t52 = call ptr @fn_str_concat(ptr @.str1177, ptr %t51) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - %t55 = call ptr @fn_emit_bind(ptr @.str1122) + %t55 = call ptr @fn_emit_bind(ptr @.str1178) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t54 %t58 = load ptr, ptr %t56 - %t59 = call ptr @fn_sconcat(ptr @.str1124, ptr %t58) - %t60 = call ptr @fn_sconcat(ptr %t57, ptr %t59) - %t61 = call ptr @fn_sconcat(ptr @.str1123, ptr %t60) + %t59 = call ptr @fn_str_concat(ptr @.str1180, ptr %t58) + %t60 = call ptr @fn_str_concat(ptr %t57, ptr %t59) + %t61 = call ptr @fn_str_concat(ptr @.str1179, ptr %t60) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 - call void @fn_emit(ptr @.str1125) + call void @fn_emit(ptr @.str1181) %t64 = load ptr, ptr %t63 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1126) + call void @fn_emit(ptr @.str1182) %t65 = load ptr, ptr %t44 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str1127) + call void @fn_emit(ptr @.str1183) %t66 = load ptr, ptr %t48 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str1128) + call void @fn_emit(ptr @.str1184) %t67 = load ptr, ptr %t44 call void @fn_emit(ptr %t67) - call void @fn_emit(ptr @.str1129) + call void @fn_emit(ptr @.str1185) store i32 0, ptr @g_g_term %t68 = load ptr, ptr %t4 - %t69 = call ptr @fn_sconcat(ptr @.str1130, ptr %t68) + %t69 = call ptr @fn_str_concat(ptr @.str1186, ptr %t68) %t70 = call ptr @fn_emit_bind(ptr %t69) store ptr %t70, ptr %t71 %t72 = call ptr @fn_nreg() store ptr %t72, ptr %t73 - call void @fn_emit(ptr @.str1131) + call void @fn_emit(ptr @.str1187) %t74 = load ptr, ptr %t73 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str1132) + call void @fn_emit(ptr @.str1188) %t75 = load ptr, ptr %t2 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str1133) + call void @fn_emit(ptr @.str1189) %t76 = load ptr, ptr %t71 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str1134) + call void @fn_emit(ptr @.str1190) %t77 = load ptr, ptr %t73 - %t78 = call ptr @fn_sconcat(ptr @.str1135, ptr %t77) + %t78 = call ptr @fn_str_concat(ptr @.str1191, ptr %t77) %t79 = call ptr @fn_emit_bind(ptr %t78) store ptr %t79, ptr %t80 %t81 = load ptr, ptr %t80 - %t82 = call ptr @fn_sconcat(ptr %t81, ptr @.str1137) - %t83 = call ptr @fn_sconcat(ptr @.str1136, ptr %t82) + %t82 = call ptr @fn_str_concat(ptr %t81, ptr @.str1193) + %t83 = call ptr @fn_str_concat(ptr @.str1192, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 - %t86 = call ptr @fn_lbl(ptr @.str1138) + %t86 = call ptr @fn_lbl(ptr @.str1194) store ptr %t86, ptr %t87 - call void @fn_emit(ptr @.str1139) + call void @fn_emit(ptr @.str1195) %t88 = load ptr, ptr %t85 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1140) + call void @fn_emit(ptr @.str1196) %t89 = load ptr, ptr %t87 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str1141) + call void @fn_emit(ptr @.str1197) %t90 = load ptr, ptr %t46 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1142) + call void @fn_emit(ptr @.str1198) %t91 = load ptr, ptr %t87 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1143) + call void @fn_emit(ptr @.str1199) %t92 = load ptr, ptr %t0 %t93 = getelementptr inbounds %Cmp_Node, ptr %t92, i32 0, i32 6 %t94 = load ptr, ptr %t93 @@ -17267,7 +17485,7 @@ wbody6: %t117 = load ptr, ptr %t116 %t118 = call i32 @fn_find_arch_id(ptr %t117) store i32 %t118, ptr %t119 - store ptr @.str1144, ptr %t120 + store ptr @.str1200, ptr %t120 %t121 = load i32, ptr %t119 %t122 = icmp sgt i32 %t121, 0 %t123 = zext i1 %t122 to i32 @@ -17276,91 +17494,91 @@ wbody6: then8: %t125 = call ptr @fn_nreg() store ptr %t125, ptr %t126 - call void @fn_emit(ptr @.str1145) + call void @fn_emit(ptr @.str1201) %t127 = load ptr, ptr %t126 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str1146) + call void @fn_emit(ptr @.str1202) %t128 = load ptr, ptr %t2 call void @fn_emit(ptr %t128) - call void @fn_emit(ptr @.str1147) + call void @fn_emit(ptr @.str1203) %t129 = load ptr, ptr %t71 call void @fn_emit(ptr %t129) - call void @fn_emit(ptr @.str1148) + call void @fn_emit(ptr @.str1204) %t130 = load ptr, ptr %t126 - %t131 = call ptr @fn_sconcat(ptr @.str1149, ptr %t130) + %t131 = call ptr @fn_str_concat(ptr @.str1205, ptr %t130) %t132 = call ptr @fn_emit_bind(ptr %t131) store ptr %t132, ptr %t133 %t134 = load ptr, ptr %t133 %t135 = load i32, ptr %t119 %t136 = call ptr @fn_itoa(i32 %t135) - %t137 = call ptr @fn_sconcat(ptr @.str1151, ptr %t136) - %t138 = call ptr @fn_sconcat(ptr %t134, ptr %t137) - %t139 = call ptr @fn_sconcat(ptr @.str1150, ptr %t138) + %t137 = call ptr @fn_str_concat(ptr @.str1207, ptr %t136) + %t138 = call ptr @fn_str_concat(ptr %t134, ptr %t137) + %t139 = call ptr @fn_str_concat(ptr @.str1206, ptr %t138) %t140 = call ptr @fn_emit_bind(ptr %t139) store ptr %t140, ptr %t141 %t142 = load ptr, ptr %t114 %t143 = getelementptr inbounds %Cmp_Node, ptr %t142, i32 0, i32 1 %t144 = load ptr, ptr %t143 - %t145 = call ptr @fn_sconcat(ptr @.str1152, ptr %t144) + %t145 = call ptr @fn_str_concat(ptr @.str1208, ptr %t144) %t146 = call ptr @fn_emit_bind(ptr %t145) store ptr %t146, ptr %t147 %t148 = load ptr, ptr %t147 - %t149 = call ptr @fn_sconcat(ptr %t148, ptr @.str1154) - %t150 = call ptr @fn_sconcat(ptr @.str1153, ptr %t149) + %t149 = call ptr @fn_str_concat(ptr %t148, ptr @.str1210) + %t150 = call ptr @fn_str_concat(ptr @.str1209, ptr %t149) %t151 = call ptr @fn_emit_bind(ptr %t150) store ptr %t151, ptr %t152 %t153 = load ptr, ptr %t141 %t154 = load ptr, ptr %t152 - %t155 = call ptr @fn_sconcat(ptr @.str1156, ptr %t154) - %t156 = call ptr @fn_sconcat(ptr %t153, ptr %t155) - %t157 = call ptr @fn_sconcat(ptr @.str1155, ptr %t156) + %t155 = call ptr @fn_str_concat(ptr @.str1212, ptr %t154) + %t156 = call ptr @fn_str_concat(ptr %t153, ptr %t155) + %t157 = call ptr @fn_str_concat(ptr @.str1211, ptr %t156) %t158 = call ptr @fn_emit_bind(ptr %t157) store ptr %t158, ptr %t120 br label %ifend10 else9: %t159 = call ptr @fn_nreg() store ptr %t159, ptr %t160 - call void @fn_emit(ptr @.str1157) + call void @fn_emit(ptr @.str1213) %t161 = load ptr, ptr %t160 call void @fn_emit(ptr %t161) - call void @fn_emit(ptr @.str1158) + call void @fn_emit(ptr @.str1214) %t162 = load ptr, ptr %t2 call void @fn_emit(ptr %t162) - call void @fn_emit(ptr @.str1159) + call void @fn_emit(ptr @.str1215) %t163 = load ptr, ptr %t114 %t164 = getelementptr inbounds %Cmp_Node, ptr %t163, i32 0, i32 1 %t165 = load ptr, ptr %t164 call void @fn_emit(ptr %t165) - call void @fn_emit(ptr @.str1160) + call void @fn_emit(ptr @.str1216) %t166 = load ptr, ptr %t71 call void @fn_emit(ptr %t166) - call void @fn_emit(ptr @.str1161) + call void @fn_emit(ptr @.str1217) %t167 = load ptr, ptr %t160 - %t168 = call ptr @fn_sconcat(ptr @.str1162, ptr %t167) + %t168 = call ptr @fn_str_concat(ptr @.str1218, ptr %t167) %t169 = call ptr @fn_emit_bind(ptr %t168) store ptr %t169, ptr %t170 %t171 = load ptr, ptr %t170 - %t172 = call ptr @fn_sconcat(ptr %t171, ptr @.str1164) - %t173 = call ptr @fn_sconcat(ptr @.str1163, ptr %t172) + %t172 = call ptr @fn_str_concat(ptr %t171, ptr @.str1220) + %t173 = call ptr @fn_str_concat(ptr @.str1219, ptr %t172) %t174 = call ptr @fn_emit_bind(ptr %t173) store ptr %t174, ptr %t120 br label %ifend10 ifend10: - %t175 = call ptr @fn_lbl(ptr @.str1165) + %t175 = call ptr @fn_lbl(ptr @.str1221) store ptr %t175, ptr %t176 - call void @fn_emit(ptr @.str1166) + call void @fn_emit(ptr @.str1222) %t177 = load ptr, ptr %t120 call void @fn_emit(ptr %t177) - call void @fn_emit(ptr @.str1167) + call void @fn_emit(ptr @.str1223) %t178 = load ptr, ptr %t176 call void @fn_emit(ptr %t178) - call void @fn_emit(ptr @.str1168) + call void @fn_emit(ptr @.str1224) %t179 = load ptr, ptr %t46 call void @fn_emit(ptr %t179) - call void @fn_emit(ptr @.str1169) + call void @fn_emit(ptr @.str1225) %t180 = load ptr, ptr %t176 call void @fn_emit(ptr %t180) - call void @fn_emit(ptr @.str1170) + call void @fn_emit(ptr @.str1226) %t181 = load i32, ptr %t96 %t182 = add i32 %t181, 1 store i32 %t182, ptr %t96 @@ -17430,35 +17648,35 @@ then16: then19: %t231 = call ptr @fn_nreg() store ptr %t231, ptr %t232 - call void @fn_emit(ptr @.str1171) + call void @fn_emit(ptr @.str1227) %t233 = load ptr, ptr %t232 call void @fn_emit(ptr %t233) - call void @fn_emit(ptr @.str1172) + call void @fn_emit(ptr @.str1228) %t234 = load ptr, ptr %t2 call void @fn_emit(ptr %t234) - call void @fn_emit(ptr @.str1173) + call void @fn_emit(ptr @.str1229) %t235 = load ptr, ptr %t203 %t236 = getelementptr inbounds %Cmp_Node, ptr %t235, i32 0, i32 1 %t237 = load ptr, ptr %t236 call void @fn_emit(ptr %t237) - call void @fn_emit(ptr @.str1174) + call void @fn_emit(ptr @.str1230) %t238 = load ptr, ptr %t203 %t239 = getelementptr inbounds %Cmp_Node, ptr %t238, i32 0, i32 1 %t240 = load ptr, ptr %t239 call void @fn_emit(ptr %t240) - call void @fn_emit(ptr @.str1175) + call void @fn_emit(ptr @.str1231) %t241 = load ptr, ptr %t71 call void @fn_emit(ptr %t241) - call void @fn_emit(ptr @.str1176) - %t242 = call ptr @fn_emit_alloca(ptr @.str1177) + call void @fn_emit(ptr @.str1232) + %t242 = call ptr @fn_emit_alloca(ptr @.str1233) store ptr %t242, ptr %t243 - call void @fn_emit(ptr @.str1178) + call void @fn_emit(ptr @.str1234) %t244 = load ptr, ptr %t232 call void @fn_emit(ptr %t244) - call void @fn_emit(ptr @.str1179) + call void @fn_emit(ptr @.str1235) %t245 = load ptr, ptr %t243 call void @fn_emit(ptr %t245) - call void @fn_emit(ptr @.str1180) + call void @fn_emit(ptr @.str1236) %t246 = load ptr, ptr %t0 %t247 = getelementptr inbounds %Cmp_Node, ptr %t246, i32 0, i32 7 %t248 = load ptr, ptr %t247 @@ -17502,25 +17720,25 @@ then22: %t275 = load ptr, ptr %t274 %t276 = getelementptr inbounds %Cmp_Val, ptr %t275, i32 0, i32 0 %t277 = load ptr, ptr %t276 - %t278 = call ptr @fn_sconcat(ptr %t277, ptr @.str1182) - %t279 = call ptr @fn_sconcat(ptr @.str1181, ptr %t278) + %t278 = call ptr @fn_str_concat(ptr %t277, ptr @.str1238) + %t279 = call ptr @fn_str_concat(ptr @.str1237, ptr %t278) %t280 = call ptr @fn_emit_bind(ptr %t279) store ptr %t280, ptr %t281 - %t282 = call ptr @fn_lbl(ptr @.str1183) + %t282 = call ptr @fn_lbl(ptr @.str1239) store ptr %t282, ptr %t283 - call void @fn_emit(ptr @.str1184) + call void @fn_emit(ptr @.str1240) %t284 = load ptr, ptr %t281 call void @fn_emit(ptr %t284) - call void @fn_emit(ptr @.str1185) + call void @fn_emit(ptr @.str1241) %t285 = load ptr, ptr %t283 call void @fn_emit(ptr %t285) - call void @fn_emit(ptr @.str1186) + call void @fn_emit(ptr @.str1242) %t286 = load ptr, ptr %t46 call void @fn_emit(ptr %t286) - call void @fn_emit(ptr @.str1187) + call void @fn_emit(ptr @.str1243) %t287 = load ptr, ptr %t283 call void @fn_emit(ptr %t287) - call void @fn_emit(ptr @.str1188) + call void @fn_emit(ptr @.str1244) br label %ifend24 ifend24: %t288 = load ptr, ptr %t46 @@ -17539,34 +17757,34 @@ ifend24: %t297 = icmp ne i32 %t296, 0 br i1 %t297, label %then25, label %ifend27 then25: - call void @fn_emit(ptr @.str1189) + call void @fn_emit(ptr @.str1245) %t298 = load ptr, ptr %t46 call void @fn_emit(ptr %t298) - call void @fn_emit(ptr @.str1190) + call void @fn_emit(ptr @.str1246) br label %ifend27 ifend27: %t299 = load ptr, ptr %t46 call void @fn_emit(ptr %t299) - call void @fn_emit(ptr @.str1191) + call void @fn_emit(ptr @.str1247) %t300 = load ptr, ptr %t4 - %t301 = call ptr @fn_sconcat(ptr @.str1192, ptr %t300) + %t301 = call ptr @fn_str_concat(ptr @.str1248, ptr %t300) %t302 = call ptr @fn_emit_bind(ptr %t301) store ptr %t302, ptr %t303 %t304 = load ptr, ptr %t303 - %t305 = call ptr @fn_sconcat(ptr %t304, ptr @.str1194) - %t306 = call ptr @fn_sconcat(ptr @.str1193, ptr %t305) + %t305 = call ptr @fn_str_concat(ptr %t304, ptr @.str1250) + %t306 = call ptr @fn_str_concat(ptr @.str1249, ptr %t305) %t307 = call ptr @fn_emit_bind(ptr %t306) store ptr %t307, ptr %t308 %t309 = load ptr, ptr %t308 %t310 = load ptr, ptr %t4 - call void @fn_store_at(ptr @.str1195, ptr %t309, ptr %t310) - call void @fn_emit(ptr @.str1196) + call void @fn_store_at(ptr @.str1251, ptr %t309, ptr %t310) + call void @fn_emit(ptr @.str1252) %t311 = load ptr, ptr %t42 call void @fn_emit(ptr %t311) - call void @fn_emit(ptr @.str1197) + call void @fn_emit(ptr @.str1253) %t312 = load ptr, ptr %t48 call void @fn_emit(ptr %t312) - call void @fn_emit(ptr @.str1198) + call void @fn_emit(ptr @.str1254) store i32 0, ptr @g_g_term %t313 = load i32, ptr @g_nself %t314 = sub i32 %t313, 1 @@ -17614,47 +17832,47 @@ entry: br i1 %t11, label %then0, label %ifend2 then0: %t12 = load ptr, ptr %t1 - %t13 = call ptr @fn_sconcat(ptr @.str1199, ptr %t12) + %t13 = call ptr @fn_str_concat(ptr @.str1255, ptr %t12) call void @fn_perr(ptr %t13) br label %ifend2 ifend2: %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1200) + call void @fn_emit(ptr @.str1256) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1201) + call void @fn_emit(ptr @.str1257) %t17 = load ptr, ptr %t4 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1202) + call void @fn_emit(ptr @.str1258) %t18 = load ptr, ptr %t1 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1203) + call void @fn_emit(ptr @.str1259) %t19 = load ptr, ptr %t0 call void @fn_emit(ptr %t19) - call void @fn_emit(ptr @.str1204) - call void @fn_emit(ptr @.str1205) + call void @fn_emit(ptr @.str1260) + call void @fn_emit(ptr @.str1261) %t20 = load ptr, ptr %t15 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1206) + call void @fn_emit(ptr @.str1262) %t21 = call ptr @fn_nreg() store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str1207) + call void @fn_emit(ptr @.str1263) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str1208) + call void @fn_emit(ptr @.str1264) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1209) + call void @fn_emit(ptr @.str1265) %t25 = load ptr, ptr %t1 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1210) + call void @fn_emit(ptr @.str1266) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1211) + call void @fn_emit(ptr @.str1267) %t27 = load ptr, ptr %t0 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1212) + call void @fn_emit(ptr @.str1268) store i32 0, ptr %t28 br label %wcond3 wcond3: @@ -17680,32 +17898,32 @@ wbody4: store ptr %t45, ptr %t46 %t47 = call ptr @fn_nreg() store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1213) + call void @fn_emit(ptr @.str1269) %t49 = load ptr, ptr %t48 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1214) + call void @fn_emit(ptr @.str1270) %t50 = load ptr, ptr %t1 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1215) + call void @fn_emit(ptr @.str1271) %t51 = load ptr, ptr %t22 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str1216) + call void @fn_emit(ptr @.str1272) %t52 = load i32, ptr %t28 %t53 = call ptr @fn_itoa(i32 %t52) call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str1217) + call void @fn_emit(ptr @.str1273) %t54 = load ptr, ptr %t46 %t55 = getelementptr inbounds %Cmp_Node, ptr %t54, i32 0, i32 3 %t56 = load ptr, ptr %t55 %t57 = call ptr @fn_llty(ptr %t56) store ptr %t57, ptr %t58 - store ptr @.str1218, ptr %t59 + store ptr @.str1274, ptr %t59 %t60 = load ptr, ptr %t58 - %t61 = call i32 @fn_streq(ptr %t60, ptr @.str1219) + %t61 = call i32 @fn_str_eq(ptr %t60, ptr @.str1275) %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then6, label %ifend8 then6: - store ptr @.str1220, ptr %t59 + store ptr @.str1276, ptr %t59 br label %ifend8 ifend8: %t63 = load ptr, ptr %t46 @@ -17727,16 +17945,16 @@ then9: store ptr %t76, ptr %t59 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1221) + call void @fn_emit(ptr @.str1277) %t77 = load ptr, ptr %t58 call void @fn_emit(ptr %t77) - call void @fn_emit(ptr @.str1222) + call void @fn_emit(ptr @.str1278) %t78 = load ptr, ptr %t59 call void @fn_emit(ptr %t78) - call void @fn_emit(ptr @.str1223) + call void @fn_emit(ptr @.str1279) %t79 = load ptr, ptr %t48 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str1224) + call void @fn_emit(ptr @.str1280) %t80 = load i32, ptr %t28 %t81 = add i32 %t80, 1 store i32 %t81, ptr %t28 @@ -17785,26 +18003,26 @@ wbody16: then18: %t115 = call ptr @fn_nreg() store ptr %t115, ptr %t116 - call void @fn_emit(ptr @.str1225) + call void @fn_emit(ptr @.str1281) %t117 = load ptr, ptr %t116 call void @fn_emit(ptr %t117) - call void @fn_emit(ptr @.str1226) + call void @fn_emit(ptr @.str1282) %t118 = load ptr, ptr %t1 call void @fn_emit(ptr %t118) - call void @fn_emit(ptr @.str1227) + call void @fn_emit(ptr @.str1283) %t119 = load ptr, ptr %t22 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str1228) + call void @fn_emit(ptr @.str1284) %t120 = load i32, ptr %t110 %t121 = call ptr @fn_itoa(i32 %t120) call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str1229) + call void @fn_emit(ptr @.str1285) %t122 = load ptr, ptr %t104 %t123 = getelementptr inbounds %Cmp_Node, ptr %t122, i32 0, i32 4 %t124 = load ptr, ptr %t123 %t125 = call ptr @fn_emit_expr(ptr %t124) store ptr %t125, ptr %t126 - call void @fn_emit(ptr @.str1230) + call void @fn_emit(ptr @.str1286) %t127 = load ptr, ptr %t7 %t128 = load ptr, ptr %t104 %t129 = getelementptr inbounds %Cmp_Node, ptr %t128, i32 0, i32 1 @@ -17812,15 +18030,15 @@ then18: %t131 = call ptr @fn_field_type(ptr %t127, ptr %t130) %t132 = call ptr @fn_llty(ptr %t131) call void @fn_emit(ptr %t132) - call void @fn_emit(ptr @.str1231) + call void @fn_emit(ptr @.str1287) %t133 = load ptr, ptr %t126 %t134 = getelementptr inbounds %Cmp_Val, ptr %t133, i32 0, i32 0 %t135 = load ptr, ptr %t134 call void @fn_emit(ptr %t135) - call void @fn_emit(ptr @.str1232) + call void @fn_emit(ptr @.str1288) %t136 = load ptr, ptr %t116 call void @fn_emit(ptr %t136) - call void @fn_emit(ptr @.str1233) + call void @fn_emit(ptr @.str1289) br label %ifend20 ifend20: %t137 = load i32, ptr %t86 @@ -17841,15 +18059,15 @@ ifend14: then21: %t146 = load i32, ptr @g_nloc store i32 %t146, ptr %t147 - %t148 = call ptr @fn_emit_alloca(ptr @.str1234) + %t148 = call ptr @fn_emit_alloca(ptr @.str1290) store ptr %t148, ptr %t149 - call void @fn_emit(ptr @.str1235) + call void @fn_emit(ptr @.str1291) %t150 = load ptr, ptr %t22 call void @fn_emit(ptr %t150) - call void @fn_emit(ptr @.str1236) + call void @fn_emit(ptr @.str1292) %t151 = load ptr, ptr %t149 call void @fn_emit(ptr %t151) - call void @fn_emit(ptr @.str1237) + call void @fn_emit(ptr @.str1293) %t152 = load ptr, ptr %t1 %t153 = load ptr, ptr %t149 %t154 = load ptr, ptr %t1 @@ -17905,31 +18123,31 @@ wbody1: store ptr %t23, ptr %t24 %t25 = call ptr @fn_nreg() store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str1238) + call void @fn_emit(ptr @.str1294) %t27 = load ptr, ptr %t26 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1239) + call void @fn_emit(ptr @.str1295) %t28 = load ptr, ptr %t3 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str1240) + call void @fn_emit(ptr @.str1296) %t29 = load ptr, ptr %t24 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str1241) + call void @fn_emit(ptr @.str1297) %t30 = load ptr, ptr %t24 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str1242) + call void @fn_emit(ptr @.str1298) %t31 = load ptr, ptr %t1 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1243) - %t32 = call ptr @fn_emit_alloca(ptr @.str1244) + call void @fn_emit(ptr @.str1299) + %t32 = call ptr @fn_emit_alloca(ptr @.str1300) store ptr %t32, ptr %t33 - call void @fn_emit(ptr @.str1245) + call void @fn_emit(ptr @.str1301) %t34 = load ptr, ptr %t26 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1246) + call void @fn_emit(ptr @.str1302) %t35 = load ptr, ptr %t33 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1247) + call void @fn_emit(ptr @.str1303) %t36 = load ptr, ptr %t24 %t37 = load ptr, ptr %t33 %t38 = load ptr, ptr %t24 @@ -17960,7 +18178,7 @@ entry: %t99 = alloca i32 %t104 = alloca i32 store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_bind(ptr @.str1248) + %t1 = call ptr @fn_emit_bind(ptr @.str1304) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Cmp_Node, ptr %t3, i32 0, i32 1 @@ -17977,24 +18195,24 @@ then0: store ptr %t12, ptr %t13 %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1249) + call void @fn_emit(ptr @.str1305) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1250) + call void @fn_emit(ptr @.str1306) %t17 = load ptr, ptr %t13 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1251) + call void @fn_emit(ptr @.str1307) %t18 = load ptr, ptr %t2 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1252) - call void @fn_emit(ptr @.str1253) + call void @fn_emit(ptr @.str1308) + call void @fn_emit(ptr @.str1309) %t19 = load i32, ptr %t7 %t20 = call ptr @fn_itoa(i32 %t19) call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1254) + call void @fn_emit(ptr @.str1310) %t21 = load ptr, ptr %t15 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1255) + call void @fn_emit(ptr @.str1311) %t22 = load ptr, ptr %t0 %t23 = getelementptr inbounds %Cmp_Node, ptr %t22, i32 0, i32 1 %t24 = load ptr, ptr %t23 @@ -18051,7 +18269,7 @@ wbody7: %t67 = getelementptr inbounds %Cmp_Node, ptr %t66, i32 0, i32 1 %t68 = load ptr, ptr %t67 %t69 = load ptr, ptr %t47 - %t70 = call i32 @fn_streq(ptr %t68, ptr %t69) + %t70 = call i32 @fn_str_eq(ptr %t68, ptr %t69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then9, label %ifend11 then9: @@ -18184,20 +18402,20 @@ then0: store ptr %t12, ptr %t13 %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1256) + call void @fn_emit(ptr @.str1312) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1257) + call void @fn_emit(ptr @.str1313) %t17 = load ptr, ptr %t13 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1258) + call void @fn_emit(ptr @.str1314) %t18 = load ptr, ptr %t5 %t19 = getelementptr inbounds %Cmp_Val, ptr %t18, i32 0, i32 0 %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1259) + call void @fn_emit(ptr @.str1315) %t21 = load ptr, ptr %t15 - %t22 = call ptr @fn_sconcat(ptr @.str1260, ptr %t21) + %t22 = call ptr @fn_str_concat(ptr @.str1316, ptr %t21) %t23 = call ptr @fn_emit_bind(ptr %t22) store ptr %t23, ptr %t24 store i32 0, ptr %t25 @@ -18225,43 +18443,43 @@ wbody4: %t43 = load ptr, ptr %t41 %t44 = call i32 @fn_find_arch_id(ptr %t43) %t45 = call ptr @fn_itoa(i32 %t44) - %t46 = call ptr @fn_sconcat(ptr @.str1262, ptr %t45) - %t47 = call ptr @fn_sconcat(ptr %t42, ptr %t46) - %t48 = call ptr @fn_sconcat(ptr @.str1261, ptr %t47) + %t46 = call ptr @fn_str_concat(ptr @.str1318, ptr %t45) + %t47 = call ptr @fn_str_concat(ptr %t42, ptr %t46) + %t48 = call ptr @fn_str_concat(ptr @.str1317, ptr %t47) %t49 = call ptr @fn_emit_bind(ptr %t48) store ptr %t49, ptr %t50 - %t51 = call ptr @fn_lbl(ptr @.str1263) + %t51 = call ptr @fn_lbl(ptr @.str1319) store ptr %t51, ptr %t52 - %t53 = call ptr @fn_lbl(ptr @.str1264) + %t53 = call ptr @fn_lbl(ptr @.str1320) store ptr %t53, ptr %t54 - call void @fn_emit(ptr @.str1265) + call void @fn_emit(ptr @.str1321) %t55 = load ptr, ptr %t50 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str1266) + call void @fn_emit(ptr @.str1322) %t56 = load ptr, ptr %t52 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1267) + call void @fn_emit(ptr @.str1323) %t57 = load ptr, ptr %t54 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1268) + call void @fn_emit(ptr @.str1324) %t58 = load ptr, ptr %t52 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str1269) + call void @fn_emit(ptr @.str1325) %t59 = load ptr, ptr %t41 call void @fn_emit(ptr %t59) - call void @fn_emit(ptr @.str1270) + call void @fn_emit(ptr @.str1326) %t60 = load ptr, ptr %t5 %t61 = getelementptr inbounds %Cmp_Val, ptr %t60, i32 0, i32 0 %t62 = load ptr, ptr %t61 call void @fn_emit(ptr %t62) - call void @fn_emit(ptr @.str1271) - call void @fn_emit(ptr @.str1272) + call void @fn_emit(ptr @.str1327) + call void @fn_emit(ptr @.str1328) %t63 = load ptr, ptr %t54 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str1273) + call void @fn_emit(ptr @.str1329) %t64 = load ptr, ptr %t54 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1274) + call void @fn_emit(ptr @.str1330) %t65 = load i32, ptr %t25 %t66 = add i32 %t65, 1 store i32 %t66, ptr %t25 @@ -18269,12 +18487,12 @@ wbody4: wend5: br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1275) + call void @fn_emit(ptr @.str1331) %t67 = load ptr, ptr %t5 %t68 = getelementptr inbounds %Cmp_Val, ptr %t67, i32 0, i32 0 %t69 = load ptr, ptr %t68 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str1276) + call void @fn_emit(ptr @.str1332) br label %ret ret: ret void @@ -18293,7 +18511,7 @@ entry: %t68 = alloca ptr %t80 = alloca ptr store ptr %arg_st, ptr %t0 - store ptr @.str1277, ptr %t1 + store ptr @.str1333, ptr %t1 %t2 = load ptr, ptr %t0 %t3 = getelementptr inbounds %Cmp_Node, ptr %t2, i32 0, i32 2 %t4 = load i32, ptr %t3 @@ -18302,7 +18520,7 @@ entry: %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: - store ptr @.str1278, ptr %t1 + store ptr @.str1334, ptr %t1 br label %ifend2 ifend2: %t8 = load ptr, ptr %t0 @@ -18322,30 +18540,30 @@ then3: store ptr %t19, ptr %t20 %t21 = call ptr @fn_nreg() store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str1279) + call void @fn_emit(ptr @.str1335) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str1280) + call void @fn_emit(ptr @.str1336) %t24 = load ptr, ptr %t20 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1281) + call void @fn_emit(ptr @.str1337) %t25 = load ptr, ptr %t0 %t26 = getelementptr inbounds %Cmp_Node, ptr %t25, i32 0, i32 1 %t27 = load ptr, ptr %t26 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1282) + call void @fn_emit(ptr @.str1338) %t28 = load ptr, ptr %t18 %t29 = getelementptr inbounds %Cmp_Val, ptr %t28, i32 0, i32 0 %t30 = load ptr, ptr %t29 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str1283) - call void @fn_emit(ptr @.str1284) + call void @fn_emit(ptr @.str1339) + call void @fn_emit(ptr @.str1340) %t31 = load ptr, ptr %t1 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str1285) + call void @fn_emit(ptr @.str1341) %t32 = load ptr, ptr %t22 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str1286) + call void @fn_emit(ptr @.str1342) store ptr null, ptr %t33 %t34 = load ptr, ptr %t0 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 2 @@ -18379,37 +18597,37 @@ then9: store i32 %t52, ptr %t53 %t54 = call ptr @fn_nreg() store ptr %t54, ptr %t55 - call void @fn_emit(ptr @.str1287) + call void @fn_emit(ptr @.str1343) %t56 = load ptr, ptr %t55 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1288) + call void @fn_emit(ptr @.str1344) %t57 = load ptr, ptr %t20 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1289) + call void @fn_emit(ptr @.str1345) %t58 = load ptr, ptr %t0 %t59 = getelementptr inbounds %Cmp_Node, ptr %t58, i32 0, i32 1 %t60 = load ptr, ptr %t59 call void @fn_emit(ptr %t60) - call void @fn_emit(ptr @.str1290) + call void @fn_emit(ptr @.str1346) %t61 = load ptr, ptr %t0 %t62 = getelementptr inbounds %Cmp_Node, ptr %t61, i32 0, i32 1 %t63 = load ptr, ptr %t62 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str1291) + call void @fn_emit(ptr @.str1347) %t64 = load ptr, ptr %t18 %t65 = getelementptr inbounds %Cmp_Val, ptr %t64, i32 0, i32 0 %t66 = load ptr, ptr %t65 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str1292) - %t67 = call ptr @fn_emit_alloca(ptr @.str1293) + call void @fn_emit(ptr @.str1348) + %t67 = call ptr @fn_emit_alloca(ptr @.str1349) store ptr %t67, ptr %t68 - call void @fn_emit(ptr @.str1294) + call void @fn_emit(ptr @.str1350) %t69 = load ptr, ptr %t55 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str1295) + call void @fn_emit(ptr @.str1351) %t70 = load ptr, ptr %t68 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str1296) + call void @fn_emit(ptr @.str1352) %t71 = load ptr, ptr %t0 %t72 = getelementptr inbounds %Cmp_Node, ptr %t71, i32 0, i32 1 %t73 = load ptr, ptr %t72 @@ -18426,7 +18644,7 @@ then9: ifend11: br label %ifend5 else4: - store ptr @.str1297, ptr %t80 + store ptr @.str1353, ptr %t80 %t81 = load ptr, ptr %t0 %t82 = getelementptr inbounds %Cmp_Node, ptr %t81, i32 0, i32 1 %t83 = load ptr, ptr %t82 @@ -18434,20 +18652,20 @@ else4: %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %then12, label %ifend14 then12: - store ptr @.str1298, ptr %t80 + store ptr @.str1354, ptr %t80 br label %ifend14 ifend14: - call void @fn_emit(ptr @.str1299) + call void @fn_emit(ptr @.str1355) %t86 = load ptr, ptr %t1 call void @fn_emit(ptr %t86) - call void @fn_emit(ptr @.str1300) + call void @fn_emit(ptr @.str1356) %t87 = load ptr, ptr %t80 call void @fn_emit(ptr %t87) %t88 = load ptr, ptr %t0 %t89 = getelementptr inbounds %Cmp_Node, ptr %t88, i32 0, i32 1 %t90 = load ptr, ptr %t89 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1301) + call void @fn_emit(ptr @.str1357) br label %ifend5 ifend5: br label %ret @@ -18467,7 +18685,7 @@ entry: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str1302, ptr @g_ret_ty + store ptr @.str1358, ptr @g_ret_ty %t1 = call ptr @fn_buf_new() store ptr %t1, ptr %t2 %t3 = call ptr @fn_buf_new() @@ -18486,25 +18704,25 @@ entry: %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1303) + call void @fn_emit(ptr @.str1359) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1304) + call void @fn_emit(ptr @.str1360) %t14 = load ptr, ptr %t5 store ptr %t14, ptr @g_code - call void @fn_emit(ptr @.str1305) + call void @fn_emit(ptr @.str1361) %t15 = load ptr, ptr %t0 %t16 = getelementptr inbounds %Cmp_Node, ptr %t15, i32 0, i32 1 %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1306) + call void @fn_emit(ptr @.str1362) %t18 = load ptr, ptr @g_falloc %t19 = call ptr @fn_buf_str(ptr %t18) call void @fn_emit(ptr %t19) %t20 = load ptr, ptr %t2 %t21 = call ptr @fn_buf_str(ptr %t20) call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1307) + call void @fn_emit(ptr @.str1363) br label %ret ret: ret void @@ -18554,7 +18772,7 @@ sc3: %t25 = getelementptr inbounds %Cmp_Node, ptr %t24, i32 0, i32 3 %t26 = load ptr, ptr %t25 %t27 = load ptr, ptr %t0 - %t28 = call i32 @fn_streq(ptr %t26, ptr %t27) + %t28 = call i32 @fn_str_eq(ptr %t26, ptr %t27) %t29 = icmp ne i32 %t28, 0 %t30 = zext i1 %t29 to i32 store i32 %t30, ptr %t16 @@ -18567,43 +18785,43 @@ then5: %t33 = load ptr, ptr %t15 %t34 = getelementptr inbounds %Cmp_Node, ptr %t33, i32 0, i32 1 %t35 = load ptr, ptr %t34 - %t36 = call ptr @fn_sconcat(ptr @.str1308, ptr %t35) + %t36 = call ptr @fn_str_concat(ptr @.str1364, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) store ptr %t37, ptr %t38 %t39 = load ptr, ptr %t38 - %t40 = call ptr @fn_sconcat(ptr %t39, ptr @.str1310) - %t41 = call ptr @fn_sconcat(ptr @.str1309, ptr %t40) + %t40 = call ptr @fn_str_concat(ptr %t39, ptr @.str1366) + %t41 = call ptr @fn_str_concat(ptr @.str1365, ptr %t40) %t42 = call ptr @fn_emit_bind(ptr %t41) store ptr %t42, ptr %t43 - %t44 = call ptr @fn_lbl(ptr @.str1311) + %t44 = call ptr @fn_lbl(ptr @.str1367) store ptr %t44, ptr %t45 - %t46 = call ptr @fn_lbl(ptr @.str1312) + %t46 = call ptr @fn_lbl(ptr @.str1368) store ptr %t46, ptr %t47 - call void @fn_emit(ptr @.str1313) + call void @fn_emit(ptr @.str1369) %t48 = load ptr, ptr %t43 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str1314) + call void @fn_emit(ptr @.str1370) %t49 = load ptr, ptr %t45 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1315) + call void @fn_emit(ptr @.str1371) %t50 = load ptr, ptr %t47 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1316) + call void @fn_emit(ptr @.str1372) %t51 = load ptr, ptr %t45 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str1317) + call void @fn_emit(ptr @.str1373) %t52 = load ptr, ptr %t15 %t53 = getelementptr inbounds %Cmp_Node, ptr %t52, i32 0, i32 1 %t54 = load ptr, ptr %t53 call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str1318) - call void @fn_emit(ptr @.str1319) + call void @fn_emit(ptr @.str1374) + call void @fn_emit(ptr @.str1375) %t55 = load ptr, ptr %t47 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str1320) + call void @fn_emit(ptr @.str1376) %t56 = load ptr, ptr %t47 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1321) + call void @fn_emit(ptr @.str1377) br label %ifend7 ifend7: %t57 = load i32, ptr %t1 @@ -18653,7 +18871,7 @@ wbody1: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str1322, ptr @g_ret_ty + store ptr @.str1378, ptr @g_ret_ty %t20 = call ptr @fn_buf_new() store ptr %t20, ptr %t21 %t22 = call ptr @fn_buf_new() @@ -18663,7 +18881,7 @@ wbody1: %t25 = load ptr, ptr %t21 store ptr %t25, ptr @g_code %t26 = load ptr, ptr %t19 - call void @fn_emit_bind_props(ptr %t26, ptr @.str1323) + call void @fn_emit_bind_props(ptr %t26, ptr @.str1379) %t27 = load ptr, ptr %t14 %t28 = getelementptr inbounds %Cmp_Node, ptr %t27, i32 0, i32 4 %t29 = load ptr, ptr %t28 @@ -18674,25 +18892,25 @@ wbody1: %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1324) + call void @fn_emit(ptr @.str1380) br label %ifend5 ifend5: - call void @fn_emit(ptr @.str1325) + call void @fn_emit(ptr @.str1381) %t34 = load ptr, ptr %t24 store ptr %t34, ptr @g_code - call void @fn_emit(ptr @.str1326) + call void @fn_emit(ptr @.str1382) %t35 = load ptr, ptr %t14 %t36 = getelementptr inbounds %Cmp_Node, ptr %t35, i32 0, i32 1 %t37 = load ptr, ptr %t36 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str1327) + call void @fn_emit(ptr @.str1383) %t38 = load ptr, ptr @g_falloc %t39 = call ptr @fn_buf_str(ptr %t38) call void @fn_emit(ptr %t39) %t40 = load ptr, ptr %t21 %t41 = call ptr @fn_buf_str(ptr %t40) call void @fn_emit(ptr %t41) - call void @fn_emit(ptr @.str1328) + call void @fn_emit(ptr @.str1384) %t42 = load i32, ptr %t0 %t43 = add i32 %t42, 1 store i32 %t43, ptr %t0 @@ -18752,93 +18970,93 @@ ifend5: br label %wcond0 wend2: call void @fn_emit_despawn_hooks() - call void @fn_emit(ptr @.str1329) - call void @fn_emit(ptr @.str1330) - call void @fn_emit(ptr @.str1331) - %t27 = call ptr @fn_find_fn(ptr @.str1332) + call void @fn_emit(ptr @.str1385) + call void @fn_emit(ptr @.str1386) + call void @fn_emit(ptr @.str1387) + %t27 = call ptr @fn_find_fn(ptr @.str1388) %t28 = icmp ne ptr %t27, null %t29 = zext i1 %t28 to i32 %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1333) + call void @fn_emit(ptr @.str1389) br label %ifend8 ifend8: - call void @fn_emit_calls_for_phase(ptr @.str1334) - call void @fn_emit(ptr @.str1335) - call void @fn_emit(ptr @.str1336) - %t31 = call ptr @fn_emit_bind(ptr @.str1337) + call void @fn_emit_calls_for_phase(ptr @.str1390) + call void @fn_emit(ptr @.str1391) + call void @fn_emit(ptr @.str1392) + %t31 = call ptr @fn_emit_bind(ptr @.str1393) store ptr %t31, ptr %t32 %t33 = load ptr, ptr %t32 - %t34 = call ptr @fn_sconcat(ptr %t33, ptr @.str1339) - %t35 = call ptr @fn_sconcat(ptr @.str1338, ptr %t34) + %t34 = call ptr @fn_str_concat(ptr %t33, ptr @.str1395) + %t35 = call ptr @fn_str_concat(ptr @.str1394, ptr %t34) %t36 = call ptr @fn_emit_bind(ptr %t35) store ptr %t36, ptr %t37 - %t38 = call ptr @fn_find_fn(ptr @.str1340) + %t38 = call ptr @fn_find_fn(ptr @.str1396) %t39 = icmp ne ptr %t38, null %t40 = zext i1 %t39 to i32 %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then9, label %else10 then9: - %t42 = call ptr @fn_emit_bind(ptr @.str1341) + %t42 = call ptr @fn_emit_bind(ptr @.str1397) store ptr %t42, ptr %t43 %t44 = load ptr, ptr %t43 - %t45 = call ptr @fn_sconcat(ptr %t44, ptr @.str1343) - %t46 = call ptr @fn_sconcat(ptr @.str1342, ptr %t45) + %t45 = call ptr @fn_str_concat(ptr %t44, ptr @.str1399) + %t46 = call ptr @fn_str_concat(ptr @.str1398, ptr %t45) %t47 = call ptr @fn_emit_bind(ptr %t46) store ptr %t47, ptr %t48 %t49 = load ptr, ptr %t37 %t50 = load ptr, ptr %t48 - %t51 = call ptr @fn_sconcat(ptr @.str1345, ptr %t50) - %t52 = call ptr @fn_sconcat(ptr %t49, ptr %t51) - %t53 = call ptr @fn_sconcat(ptr @.str1344, ptr %t52) + %t51 = call ptr @fn_str_concat(ptr @.str1401, ptr %t50) + %t52 = call ptr @fn_str_concat(ptr %t49, ptr %t51) + %t53 = call ptr @fn_str_concat(ptr @.str1400, ptr %t52) %t54 = call ptr @fn_emit_bind(ptr %t53) store ptr %t54, ptr %t55 - call void @fn_emit(ptr @.str1346) + call void @fn_emit(ptr @.str1402) %t56 = load ptr, ptr %t55 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str1347) + call void @fn_emit(ptr @.str1403) br label %ifend11 else10: - call void @fn_emit(ptr @.str1348) + call void @fn_emit(ptr @.str1404) %t57 = load ptr, ptr %t37 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str1349) + call void @fn_emit(ptr @.str1405) br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1350) - %t58 = call ptr @fn_find_fn(ptr @.str1351) + call void @fn_emit(ptr @.str1406) + %t58 = call ptr @fn_find_fn(ptr @.str1407) %t59 = icmp ne ptr %t58, null %t60 = zext i1 %t59 to i32 %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %then12, label %ifend14 then12: - %t62 = call ptr @fn_emit_bind(ptr @.str1352) + %t62 = call ptr @fn_emit_bind(ptr @.str1408) store ptr %t62, ptr %t63 - call void @fn_emit(ptr @.str1353) + call void @fn_emit(ptr @.str1409) %t64 = load ptr, ptr %t63 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1354) + call void @fn_emit(ptr @.str1410) br label %ifend14 ifend14: - call void @fn_emit_calls_for_phase(ptr @.str1355) - call void @fn_emit_calls_for_phase(ptr @.str1356) - call void @fn_emit_calls_for_phase(ptr @.str1357) - call void @fn_emit_calls_for_phase(ptr @.str1358) - call void @fn_emit_calls_for_phase(ptr @.str1359) - call void @fn_emit(ptr @.str1360) - call void @fn_emit(ptr @.str1361) - call void @fn_emit_calls_for_phase(ptr @.str1362) - %t65 = call ptr @fn_find_fn(ptr @.str1363) + call void @fn_emit_calls_for_phase(ptr @.str1411) + call void @fn_emit_calls_for_phase(ptr @.str1412) + call void @fn_emit_calls_for_phase(ptr @.str1413) + call void @fn_emit_calls_for_phase(ptr @.str1414) + call void @fn_emit_calls_for_phase(ptr @.str1415) + call void @fn_emit(ptr @.str1416) + call void @fn_emit(ptr @.str1417) + call void @fn_emit_calls_for_phase(ptr @.str1418) + %t65 = call ptr @fn_find_fn(ptr @.str1419) %t66 = icmp ne ptr %t65, null %t67 = zext i1 %t66 to i32 %t68 = icmp ne i32 %t67, 0 br i1 %t68, label %then15, label %ifend17 then15: - call void @fn_emit(ptr @.str1364) + call void @fn_emit(ptr @.str1420) br label %ifend17 ifend17: - call void @fn_emit(ptr @.str1365) + call void @fn_emit(ptr @.str1421) br label %ret ret: ret void @@ -18865,8 +19083,8 @@ entry: %t6 = load ptr, ptr %t5 %t7 = getelementptr inbounds %Cmp_Val, ptr %t6, i32 0, i32 0 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1367) - %t10 = call ptr @fn_sconcat(ptr @.str1366, ptr %t9) + %t9 = call ptr @fn_str_concat(ptr %t8, ptr @.str1423) + %t10 = call ptr @fn_str_concat(ptr @.str1422, ptr %t9) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load i32, ptr @g_nmach @@ -18920,7 +19138,7 @@ ifend2: %t46 = load i32, ptr @g_nmach %t47 = add i32 %t46, 1 store i32 %t47, ptr @g_nmach - %t48 = call ptr @fn_lbl(ptr @.str1368) + %t48 = call ptr @fn_lbl(ptr @.str1424) store ptr %t48, ptr %t49 store i32 0, ptr %t50 br label %wcond5 @@ -18954,28 +19172,28 @@ wbody6: %t75 = load ptr, ptr %t73 %t76 = getelementptr inbounds %Cmp_Val, ptr %t75, i32 0, i32 0 %t77 = load ptr, ptr %t76 - %t78 = call ptr @fn_sconcat(ptr @.str1370, ptr %t77) - %t79 = call ptr @fn_sconcat(ptr %t74, ptr %t78) - %t80 = call ptr @fn_sconcat(ptr @.str1369, ptr %t79) + %t78 = call ptr @fn_str_concat(ptr @.str1426, ptr %t77) + %t79 = call ptr @fn_str_concat(ptr %t74, ptr %t78) + %t80 = call ptr @fn_str_concat(ptr @.str1425, ptr %t79) %t81 = call ptr @fn_emit_bind(ptr %t80) store ptr %t81, ptr %t82 - %t83 = call ptr @fn_lbl(ptr @.str1371) + %t83 = call ptr @fn_lbl(ptr @.str1427) store ptr %t83, ptr %t84 - %t85 = call ptr @fn_lbl(ptr @.str1372) + %t85 = call ptr @fn_lbl(ptr @.str1428) store ptr %t85, ptr %t86 - call void @fn_emit(ptr @.str1373) + call void @fn_emit(ptr @.str1429) %t87 = load ptr, ptr %t82 call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str1374) + call void @fn_emit(ptr @.str1430) %t88 = load ptr, ptr %t84 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1375) + call void @fn_emit(ptr @.str1431) %t89 = load ptr, ptr %t86 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str1376) + call void @fn_emit(ptr @.str1432) %t90 = load ptr, ptr %t84 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1377) + call void @fn_emit(ptr @.str1433) store i32 0, ptr @g_g_term %t91 = load ptr, ptr %t68 %t92 = getelementptr inbounds %Cmp_Node, ptr %t91, i32 0, i32 4 @@ -18987,15 +19205,15 @@ wbody6: %t97 = icmp ne i32 %t96, 0 br i1 %t97, label %then8, label %ifend10 then8: - call void @fn_emit(ptr @.str1378) + call void @fn_emit(ptr @.str1434) %t98 = load ptr, ptr %t49 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str1379) + call void @fn_emit(ptr @.str1435) br label %ifend10 ifend10: %t99 = load ptr, ptr %t86 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str1380) + call void @fn_emit(ptr @.str1436) store i32 0, ptr @g_g_term %t100 = load i32, ptr %t50 %t101 = add i32 %t100, 1 @@ -19008,15 +19226,15 @@ wend7: %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then11, label %ifend13 then11: - call void @fn_emit(ptr @.str1381) + call void @fn_emit(ptr @.str1437) %t106 = load ptr, ptr %t49 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str1382) + call void @fn_emit(ptr @.str1438) br label %ifend13 ifend13: %t107 = load ptr, ptr %t49 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str1383) + call void @fn_emit(ptr @.str1439) store i32 0, ptr @g_g_term %t108 = load i32, ptr @g_nmach %t109 = sub i32 %t108, 1 @@ -19041,7 +19259,7 @@ entry: %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str1384) + call void @fn_perr(ptr @.str1440) br label %ifend2 ifend2: %t5 = load ptr, ptr @g_mach_stk @@ -19080,7 +19298,7 @@ wbody4: %t34 = load ptr, ptr %t0 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 1 %t36 = load ptr, ptr %t35 - %t37 = call i32 @fn_streq(ptr %t33, ptr %t36) + %t37 = call i32 @fn_str_eq(ptr %t33, ptr %t36) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then6, label %ifend8 then6: @@ -19109,7 +19327,7 @@ then9: %t53 = load ptr, ptr %t0 %t54 = getelementptr inbounds %Cmp_Node, ptr %t53, i32 0, i32 1 %t55 = load ptr, ptr %t54 - %t56 = call ptr @fn_sconcat(ptr @.str1385, ptr %t55) + %t56 = call ptr @fn_str_concat(ptr @.str1441, ptr %t55) call void @fn_perr(ptr %t56) br label %ifend11 ifend11: @@ -19123,17 +19341,17 @@ ifend11: %t64 = load ptr, ptr %t63 %t65 = call ptr @fn_emit_expr(ptr %t64) store ptr %t65, ptr %t66 - call void @fn_emit(ptr @.str1386) + call void @fn_emit(ptr @.str1442) %t67 = load ptr, ptr %t61 %t68 = getelementptr inbounds %Cmp_Val, ptr %t67, i32 0, i32 0 %t69 = load ptr, ptr %t68 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str1387) + call void @fn_emit(ptr @.str1443) %t70 = load ptr, ptr %t66 %t71 = getelementptr inbounds %Cmp_Val, ptr %t70, i32 0, i32 0 %t72 = load ptr, ptr %t71 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str1388) + call void @fn_emit(ptr @.str1444) br label %ret ret: ret void @@ -19150,24 +19368,24 @@ entry: store ptr %arg_bytes, ptr %t2 %t3 = load i32, ptr @g_g_iok %t4 = call ptr @fn_itoa(i32 %t3) - %t5 = call ptr @fn_sconcat(ptr @.str1389, ptr %t4) + %t5 = call ptr @fn_str_concat(ptr @.str1445, ptr %t4) store ptr %t5, ptr %t6 %t7 = load i32, ptr @g_g_iok %t8 = add i32 %t7, 1 store i32 %t8, ptr @g_g_iok - call void @fn_emit(ptr @.str1390) + call void @fn_emit(ptr @.str1446) %t9 = load ptr, ptr %t6 call void @fn_emit(ptr %t9) - call void @fn_emit(ptr @.str1391) + call void @fn_emit(ptr @.str1447) %t10 = load ptr, ptr %t0 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str1392) + call void @fn_emit(ptr @.str1448) %t11 = load ptr, ptr %t1 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str1393) + call void @fn_emit(ptr @.str1449) %t12 = load ptr, ptr %t2 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str1394) + call void @fn_emit(ptr @.str1450) br label %ret ret: ret void @@ -19186,19 +19404,19 @@ entry: %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t3, ptr @.str1395, ptr @.str1396) + call void @fn_emit_io(ptr %t3, ptr @.str1451, ptr @.str1452) %t4 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t4, ptr @.str1397, ptr @.str1398) - call void @fn_emit(ptr @.str1399) + call void @fn_emit_io(ptr %t4, ptr @.str1453, ptr @.str1454) + call void @fn_emit(ptr @.str1455) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str1400) + call void @fn_emit(ptr @.str1456) %t6 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t6, ptr @.str1401, ptr @.str1402) + call void @fn_emit_io(ptr %t6, ptr @.str1457, ptr @.str1458) %t7 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t7, ptr @.str1403, ptr @.str1404) + call void @fn_emit_io(ptr %t7, ptr @.str1459, ptr @.str1460) %t8 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t8, ptr @.str1405, ptr @.str1406) + call void @fn_emit_io(ptr %t8, ptr @.str1461, ptr @.str1462) store i32 0, ptr %t9 br label %wcond0 wcond0: @@ -19233,8 +19451,8 @@ then3: %t34 = load ptr, ptr %t33 %t35 = getelementptr inbounds %Cmp_Node, ptr %t34, i32 0, i32 1 %t36 = load ptr, ptr %t35 - %t37 = call ptr @fn_sconcat(ptr @.str1407, ptr %t36) - call void @fn_emit_io(ptr %t28, ptr %t37, ptr @.str1408) + %t37 = call ptr @fn_str_concat(ptr @.str1463, ptr %t36) + call void @fn_emit_io(ptr %t28, ptr %t37, ptr @.str1464) br label %ifend5 ifend5: %t38 = load i32, ptr %t9 @@ -19279,26 +19497,26 @@ then9: store ptr %t66, ptr %t67 %t68 = load i32, ptr %t40 %t69 = call ptr @fn_itoa(i32 %t68) - %t70 = call ptr @fn_sconcat(ptr @.str1409, ptr %t69) + %t70 = call ptr @fn_str_concat(ptr @.str1465, ptr %t69) store ptr %t70, ptr %t71 - call void @fn_emit(ptr @.str1410) + call void @fn_emit(ptr @.str1466) %t72 = load ptr, ptr %t71 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str1411) + call void @fn_emit(ptr @.str1467) %t73 = load ptr, ptr %t67 call void @fn_emit(ptr %t73) - call void @fn_emit(ptr @.str1412) + call void @fn_emit(ptr @.str1468) %t74 = load ptr, ptr %t2 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str1413) + call void @fn_emit(ptr @.str1469) %t75 = load ptr, ptr %t0 %t76 = load ptr, ptr %t67 - %t77 = call ptr @fn_sconcat(ptr @.str1414, ptr %t76) + %t77 = call ptr @fn_str_concat(ptr @.str1470, ptr %t76) %t78 = load ptr, ptr %t71 call void @fn_emit_io(ptr %t75, ptr %t77, ptr %t78) %t79 = load ptr, ptr %t0 %t80 = load ptr, ptr %t67 - %t81 = call ptr @fn_sconcat(ptr @.str1415, ptr %t80) + %t81 = call ptr @fn_str_concat(ptr @.str1471, ptr %t80) %t82 = load ptr, ptr %t2 call void @fn_emit_io(ptr %t79, ptr %t81, ptr %t82) %t83 = load i32, ptr %t40 @@ -19320,43 +19538,43 @@ define void @fn_emit_snapshot() { entry: %t3 = alloca i32 %t7 = alloca i32 - call void @fn_emith(ptr @.str1416) - call void @fn_emith(ptr @.str1417) - call void @fn_emith(ptr @.str1418) - %t0 = call ptr @fn_find_fn(ptr @.str1419) + call void @fn_emith(ptr @.str1472) + call void @fn_emith(ptr @.str1473) + call void @fn_emith(ptr @.str1474) + %t0 = call ptr @fn_find_fn(ptr @.str1475) %t1 = icmp ne ptr %t0, null %t2 = zext i1 %t1 to i32 store i32 %t2, ptr %t3 - %t4 = call ptr @fn_find_fn(ptr @.str1420) + %t4 = call ptr @fn_find_fn(ptr @.str1476) %t5 = icmp ne ptr %t4, null %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t7 - call void @fn_emit(ptr @.str1421) - call void @fn_emit(ptr @.str1422) - call void @fn_emit(ptr @.str1423) - call void @fn_emit(ptr @.str1424) - call void @fn_emit_snapshot_blocks(ptr @.str1425) + call void @fn_emit(ptr @.str1477) + call void @fn_emit(ptr @.str1478) + call void @fn_emit(ptr @.str1479) + call void @fn_emit(ptr @.str1480) + call void @fn_emit_snapshot_blocks(ptr @.str1481) %t8 = load i32, ptr %t3 %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1426) + call void @fn_emit(ptr @.str1482) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1427) - call void @fn_emit(ptr @.str1428) - call void @fn_emit(ptr @.str1429) - call void @fn_emit(ptr @.str1430) - call void @fn_emit(ptr @.str1431) - call void @fn_emit_snapshot_blocks(ptr @.str1432) + call void @fn_emit(ptr @.str1483) + call void @fn_emit(ptr @.str1484) + call void @fn_emit(ptr @.str1485) + call void @fn_emit(ptr @.str1486) + call void @fn_emit(ptr @.str1487) + call void @fn_emit_snapshot_blocks(ptr @.str1488) %t10 = load i32, ptr %t7 %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1433) + call void @fn_emit(ptr @.str1489) br label %ifend5 ifend5: - call void @fn_emit(ptr @.str1434) + call void @fn_emit(ptr @.str1490) br label %ret ret: ret void @@ -19373,7 +19591,7 @@ entry: %t3 = load ptr, ptr %t2 store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - %t6 = call i32 @fn_streq(ptr %t5, ptr @.str1435) + %t6 = call i32 @fn_str_eq(ptr %t5, ptr @.str1491) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: @@ -19381,7 +19599,7 @@ then0: br label %ret ifend2: %t8 = load ptr, ptr %t4 - %t9 = call i32 @fn_streq(ptr %t8, ptr @.str1436) + %t9 = call i32 @fn_str_eq(ptr %t8, ptr @.str1492) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then3, label %ifend5 then3: @@ -19389,7 +19607,7 @@ then3: br label %ret ifend5: %t11 = load ptr, ptr %t4 - %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1437) + %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str1493) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then6, label %ifend8 then6: @@ -19397,7 +19615,7 @@ then6: br label %ret ifend8: %t14 = load ptr, ptr %t4 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str1438) + %t15 = call i32 @fn_str_eq(ptr %t14, ptr @.str1494) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then9, label %ifend11 then9: @@ -19405,7 +19623,7 @@ then9: br label %ret ifend11: %t17 = load ptr, ptr %t4 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str1439) + %t18 = call i32 @fn_str_eq(ptr %t17, ptr @.str1495) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then12, label %ifend14 then12: @@ -19413,7 +19631,7 @@ then12: br label %ret ifend14: %t20 = load ptr, ptr %t4 - %t21 = call i32 @fn_streq(ptr %t20, ptr @.str1440) + %t21 = call i32 @fn_str_eq(ptr %t20, ptr @.str1496) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then15, label %ifend17 then15: @@ -19421,7 +19639,7 @@ then15: br label %ret ifend17: %t23 = load ptr, ptr %t4 - %t24 = call i32 @fn_streq(ptr %t23, ptr @.str1441) + %t24 = call i32 @fn_str_eq(ptr %t23, ptr @.str1497) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then18, label %ifend20 then18: @@ -19472,7 +19690,7 @@ wbody1: %t24 = getelementptr inbounds %Cmp_Node, ptr %t23, i32 0, i32 1 %t25 = load ptr, ptr %t24 %t26 = load ptr, ptr %t1 - %t27 = call i32 @fn_streq(ptr %t25, ptr %t26) + %t27 = call i32 @fn_str_eq(ptr %t25, ptr %t26) %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then3, label %ifend5 then3: @@ -19878,7 +20096,7 @@ then5: %t50 = getelementptr inbounds %Cmp_Node, ptr %t49, i32 0, i32 1 %t51 = load ptr, ptr %t50 %t52 = load ptr, ptr %t6 - %t53 = call i32 @fn_streq(ptr %t51, ptr %t52) + %t53 = call i32 @fn_str_eq(ptr %t51, ptr %t52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then8, label %ifend10 then8: @@ -19919,7 +20137,7 @@ wbody12: %t75 = load i32, ptr %t9 %t76 = getelementptr inbounds ptr, ptr %t74, i32 %t75 %t77 = load ptr, ptr %t76 - %t78 = call ptr @fn_ui_prop(ptr %t77, ptr @.str1442) + %t78 = call ptr @fn_ui_prop(ptr %t77, ptr @.str1498) store ptr %t78, ptr %t79 %t80 = load ptr, ptr %t79 %t81 = icmp ne ptr %t80, null @@ -19941,7 +20159,7 @@ sc17: %t93 = getelementptr inbounds %Cmp_Node, ptr %t92, i32 0, i32 1 %t94 = load ptr, ptr %t93 %t95 = load ptr, ptr %t6 - %t96 = call i32 @fn_streq(ptr %t94, ptr %t95) + %t96 = call i32 @fn_str_eq(ptr %t94, ptr %t95) %t97 = icmp ne i32 %t96, 0 %t98 = zext i1 %t97 to i32 store i32 %t98, ptr %t84 @@ -20047,18 +20265,18 @@ entry: store i32 %arg_idx, ptr %t0 store i32 %arg_key, ptr %t1 store ptr %arg_val, ptr %t2 - call void @fn_emit(ptr @.str1443) + call void @fn_emit(ptr @.str1499) %t3 = load i32, ptr %t0 %t4 = call ptr @fn_itoa(i32 %t3) call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str1444) + call void @fn_emit(ptr @.str1500) %t5 = load i32, ptr %t1 %t6 = call ptr @fn_itoa(i32 %t5) call void @fn_emit(ptr %t6) - call void @fn_emit(ptr @.str1445) + call void @fn_emit(ptr @.str1501) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str1446) + call void @fn_emit(ptr @.str1502) br label %ret ret: ret void @@ -20070,7 +20288,7 @@ entry: %t0 = alloca ptr store ptr %arg_k, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str1447) + %t2 = call i32 @fn_str_eq(ptr %t1, ptr @.str1503) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: @@ -20078,7 +20296,7 @@ then0: br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str1448) + %t5 = call i32 @fn_str_eq(ptr %t4, ptr @.str1504) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: @@ -20086,7 +20304,7 @@ then3: br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str1449) + %t8 = call i32 @fn_str_eq(ptr %t7, ptr @.str1505) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: @@ -20094,7 +20312,7 @@ then6: br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1450) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str1506) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: @@ -20102,7 +20320,7 @@ then9: br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1451) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str1507) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: @@ -20110,7 +20328,7 @@ then12: br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_streq(ptr %t16, ptr @.str1452) + %t17 = call i32 @fn_str_eq(ptr %t16, ptr @.str1508) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: @@ -20118,7 +20336,7 @@ then15: br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_streq(ptr %t19, ptr @.str1453) + %t20 = call i32 @fn_str_eq(ptr %t19, ptr @.str1509) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: @@ -20126,7 +20344,7 @@ then18: br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str1454) + %t23 = call i32 @fn_str_eq(ptr %t22, ptr @.str1510) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: @@ -20134,7 +20352,7 @@ then21: br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str1455) + %t26 = call i32 @fn_str_eq(ptr %t25, ptr @.str1511) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: @@ -20142,7 +20360,7 @@ then24: br label %ret ifend26: %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_streq(ptr %t28, ptr @.str1456) + %t29 = call i32 @fn_str_eq(ptr %t28, ptr @.str1512) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then27, label %ifend29 then27: @@ -20150,7 +20368,7 @@ then27: br label %ret ifend29: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str1457) + %t32 = call i32 @fn_str_eq(ptr %t31, ptr @.str1513) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then30, label %ifend32 then30: @@ -20158,7 +20376,7 @@ then30: br label %ret ifend32: %t34 = load ptr, ptr %t0 - %t35 = call i32 @fn_streq(ptr %t34, ptr @.str1458) + %t35 = call i32 @fn_str_eq(ptr %t34, ptr @.str1514) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then33, label %ifend35 then33: @@ -20166,7 +20384,7 @@ then33: br label %ret ifend35: %t37 = load ptr, ptr %t0 - %t38 = call i32 @fn_streq(ptr %t37, ptr @.str1459) + %t38 = call i32 @fn_str_eq(ptr %t37, ptr @.str1515) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then36, label %ifend38 then36: @@ -20174,7 +20392,7 @@ then36: br label %ret ifend38: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str1460) + %t41 = call i32 @fn_str_eq(ptr %t40, ptr @.str1516) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then39, label %ifend41 then39: @@ -20223,13 +20441,13 @@ entry: store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t1 store ptr %t5, ptr @g_code - call void @fn_emit(ptr @.str1461) + call void @fn_emit(ptr @.str1517) %t6 = load ptr, ptr @g_uiw %t7 = getelementptr inbounds %LSlice, ptr %t6, i32 0, i32 1 %t8 = load i32, ptr %t7 %t9 = call ptr @fn_itoa(i32 %t8) call void @fn_emit(ptr %t9) - call void @fn_emit(ptr @.str1462) + call void @fn_emit(ptr @.str1518) store i32 0, ptr %t10 br label %wcond0 wcond0: @@ -20272,7 +20490,7 @@ wbody1: br i1 %t42, label %then3, label %ifend5 then3: %t43 = load i32, ptr %t10 - call void @fn_ll_ui_set(i32 %t43, i32 17, ptr @.str1463) + call void @fn_ll_ui_set(i32 %t43, i32 17, ptr @.str1519) br label %ifend5 ifend5: store i32 0, ptr %t44 @@ -20311,7 +20529,7 @@ wbody7: %t73 = load ptr, ptr %t72 store ptr %t73, ptr %t74 %t75 = load ptr, ptr %t70 - %t76 = call i32 @fn_streq(ptr %t75, ptr @.str1464) + %t76 = call i32 @fn_str_eq(ptr %t75, ptr @.str1520) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then9, label %ifend11 then9: @@ -20321,34 +20539,34 @@ then9: br label %wcond6 ifend11: %t80 = load ptr, ptr %t70 - %t81 = call i32 @fn_streq(ptr %t80, ptr @.str1465) + %t81 = call i32 @fn_str_eq(ptr %t80, ptr @.str1521) %t82 = icmp ne i32 %t81, 0 br i1 %t82, label %then12, label %else13 then12: %t83 = load ptr, ptr %t74 %t84 = call ptr @fn_emit_expr(ptr %t83) store ptr %t84, ptr %t85 - call void @fn_emit(ptr @.str1466) + call void @fn_emit(ptr @.str1522) %t86 = load i32, ptr %t10 %t87 = call ptr @fn_itoa(i32 %t86) call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str1467) + call void @fn_emit(ptr @.str1523) %t88 = load ptr, ptr %t85 %t89 = getelementptr inbounds %Cmp_Val, ptr %t88, i32 0, i32 0 %t90 = load ptr, ptr %t89 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1468) + call void @fn_emit(ptr @.str1524) br label %ifend14 else13: %t92 = load ptr, ptr %t70 - %t93 = call i32 @fn_streq(ptr %t92, ptr @.str1469) + %t93 = call i32 @fn_str_eq(ptr %t92, ptr @.str1525) %t94 = icmp ne i32 %t93, 0 %t95 = zext i1 %t94 to i32 store i32 %t95, ptr %t91 br i1 %t94, label %scend16, label %sc15 sc15: %t96 = load ptr, ptr %t70 - %t97 = call i32 @fn_streq(ptr %t96, ptr @.str1470) + %t97 = call i32 @fn_str_eq(ptr %t96, ptr @.str1526) %t98 = icmp ne i32 %t97, 0 %t99 = zext i1 %t98 to i32 store i32 %t99, ptr %t91 @@ -20364,12 +20582,12 @@ then17: %t105 = load ptr, ptr %t104 %t106 = getelementptr inbounds %Cmp_Val, ptr %t105, i32 0, i32 0 %t107 = load ptr, ptr %t106 - %t108 = call ptr @fn_sconcat(ptr %t107, ptr @.str1472) - %t109 = call ptr @fn_sconcat(ptr @.str1471, ptr %t108) + %t108 = call ptr @fn_str_concat(ptr %t107, ptr @.str1528) + %t109 = call ptr @fn_str_concat(ptr @.str1527, ptr %t108) %t110 = call ptr @fn_emit_bind(ptr %t109) store ptr %t110, ptr %t111 %t112 = load ptr, ptr %t70 - %t113 = call i32 @fn_streq(ptr %t112, ptr @.str1473) + %t113 = call i32 @fn_str_eq(ptr %t112, ptr @.str1529) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then20, label %else21 then20: @@ -20386,7 +20604,7 @@ ifend22: br label %ifend19 else18: %t119 = load ptr, ptr %t70 - %t120 = call i32 @fn_streq(ptr %t119, ptr @.str1474) + %t120 = call i32 @fn_str_eq(ptr %t119, ptr @.str1530) %t121 = icmp ne i32 %t120, 0 br i1 %t121, label %then23, label %else24 then23: @@ -20402,7 +20620,7 @@ then26: %t129 = load ptr, ptr %t74 %t130 = getelementptr inbounds %Cmp_Node, ptr %t129, i32 0, i32 1 %t131 = load ptr, ptr %t130 - %t132 = call i32 @fn_streq(ptr %t131, ptr @.str1475) + %t132 = call i32 @fn_str_eq(ptr %t131, ptr @.str1531) %t133 = icmp ne i32 %t132, 0 br i1 %t133, label %then29, label %ifend31 then29: @@ -20412,7 +20630,7 @@ ifend31: %t134 = load ptr, ptr %t74 %t135 = getelementptr inbounds %Cmp_Node, ptr %t134, i32 0, i32 1 %t136 = load ptr, ptr %t135 - %t137 = call i32 @fn_streq(ptr %t136, ptr @.str1476) + %t137 = call i32 @fn_str_eq(ptr %t136, ptr @.str1532) %t138 = icmp ne i32 %t137, 0 br i1 %t138, label %then32, label %ifend34 then32: @@ -20476,7 +20694,7 @@ scend39: br i1 %t176, label %then40, label %ifend42 then40: %t177 = load i32, ptr %t10 - call void @fn_ll_ui_set(i32 %t177, i32 6, ptr @.str1477) + call void @fn_ll_ui_set(i32 %t177, i32 6, ptr @.str1533) br label %ifend42 ifend42: br label %ifend37 @@ -20499,14 +20717,14 @@ wend8: wend2: %t182 = load ptr, ptr %t4 store ptr %t182, ptr @g_code - call void @fn_emit(ptr @.str1478) + call void @fn_emit(ptr @.str1534) %t183 = load ptr, ptr @g_falloc %t184 = call ptr @fn_buf_str(ptr %t183) call void @fn_emit(ptr %t184) %t185 = load ptr, ptr %t1 %t186 = call ptr @fn_buf_str(ptr %t185) call void @fn_emit(ptr %t186) - call void @fn_emit(ptr @.str1479) + call void @fn_emit(ptr @.str1535) br label %ret ret: ret void @@ -20537,7 +20755,7 @@ wbody1: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1480) + call void @fn_emit(ptr @.str1536) br label %ifend5 ifend5: %t15 = load ptr, ptr %t0 @@ -20552,7 +20770,7 @@ ifend5: %t24 = load ptr, ptr %t23 %t25 = call ptr @fn_llty(ptr %t24) call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1481) + call void @fn_emit(ptr @.str1537) %t26 = load ptr, ptr %t0 %t27 = getelementptr inbounds %Cmp_Node, ptr %t26, i32 0, i32 7 %t28 = load ptr, ptr %t27 @@ -20606,19 +20824,19 @@ entry: %t11 = call ptr @fn_llty(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t12 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1482) + %t14 = call i32 @fn_str_eq(ptr %t13, ptr @.str1538) %t15 = icmp eq i32 %t14, 0 %t16 = zext i1 %t15 to i32 %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then0, label %ifend2 then0: %t18 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t18, ptr @.str1483) + call void @fn_buf_puts(ptr %t18, ptr @.str1539) %t19 = load ptr, ptr @g_falloc %t20 = load ptr, ptr %t12 call void @fn_buf_puts(ptr %t19, ptr %t20) %t21 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t21, ptr @.str1484) + call void @fn_buf_puts(ptr %t21, ptr @.str1540) br label %ifend2 ifend2: store i32 0, ptr %t22 @@ -20650,21 +20868,21 @@ wbody4: %t44 = call ptr @fn_llty(ptr %t43) %t45 = call ptr @fn_emit_alloca(ptr %t44) store ptr %t45, ptr %t46 - call void @fn_emit(ptr @.str1485) + call void @fn_emit(ptr @.str1541) %t47 = load ptr, ptr %t40 %t48 = getelementptr inbounds %Cmp_Node, ptr %t47, i32 0, i32 3 %t49 = load ptr, ptr %t48 %t50 = call ptr @fn_llty(ptr %t49) call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1486) + call void @fn_emit(ptr @.str1542) %t51 = load ptr, ptr %t40 %t52 = getelementptr inbounds %Cmp_Node, ptr %t51, i32 0, i32 1 %t53 = load ptr, ptr %t52 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str1487) + call void @fn_emit(ptr @.str1543) %t54 = load ptr, ptr %t46 call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str1488) + call void @fn_emit(ptr @.str1544) %t55 = load ptr, ptr %t40 %t56 = getelementptr inbounds %Cmp_Node, ptr %t55, i32 0, i32 1 %t57 = load ptr, ptr %t56 @@ -20688,53 +20906,53 @@ wend5: %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1489) + call void @fn_emit(ptr @.str1545) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str1490) + call void @fn_emit(ptr @.str1546) %t71 = load ptr, ptr %t12 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str1491) + %t72 = call i32 @fn_str_eq(ptr %t71, ptr @.str1547) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then9, label %else10 then9: - call void @fn_emit(ptr @.str1492) + call void @fn_emit(ptr @.str1548) br label %ifend11 else10: %t74 = load ptr, ptr %t12 - %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str1494) - %t76 = call ptr @fn_sconcat(ptr @.str1493, ptr %t75) + %t75 = call ptr @fn_str_concat(ptr %t74, ptr @.str1550) + %t76 = call ptr @fn_str_concat(ptr @.str1549, ptr %t75) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str1495) + call void @fn_emit(ptr @.str1551) %t79 = load ptr, ptr %t12 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str1496) + call void @fn_emit(ptr @.str1552) %t80 = load ptr, ptr %t78 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1497) + call void @fn_emit(ptr @.str1553) br label %ifend11 ifend11: %t81 = load ptr, ptr %t8 store ptr %t81, ptr @g_code - call void @fn_emit(ptr @.str1498) + call void @fn_emit(ptr @.str1554) %t82 = load ptr, ptr %t12 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str1499) + call void @fn_emit(ptr @.str1555) %t83 = load ptr, ptr %t0 %t84 = getelementptr inbounds %Cmp_Node, ptr %t83, i32 0, i32 1 %t85 = load ptr, ptr %t84 call void @fn_emit(ptr %t85) - call void @fn_emit(ptr @.str1500) + call void @fn_emit(ptr @.str1556) %t86 = load ptr, ptr %t0 call void @fn_emit_params_sig(ptr %t86) - call void @fn_emit(ptr @.str1501) + call void @fn_emit(ptr @.str1557) %t87 = load ptr, ptr @g_falloc %t88 = call ptr @fn_buf_str(ptr %t87) call void @fn_emit(ptr %t88) %t89 = load ptr, ptr %t5 %t90 = call ptr @fn_buf_str(ptr %t89) call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1502) + call void @fn_emit(ptr @.str1558) br label %ret ret: ret void @@ -20752,7 +20970,7 @@ entry: store i32 0, ptr @g_g_term call void @fn_loc_reset() store i32 0, ptr @g_nloop - store ptr @.str1503, ptr @g_ret_ty + store ptr @.str1559, ptr @g_ret_ty %t1 = call ptr @fn_buf_new() store ptr %t1, ptr %t2 %t3 = call ptr @fn_buf_new() @@ -20762,10 +20980,10 @@ entry: %t6 = load ptr, ptr %t2 store ptr %t6, ptr @g_code %t7 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t7, ptr @.str1504) - call void @fn_emit(ptr @.str1505) - call void @fn_emit(ptr @.str1506) - call void @fn_emit(ptr @.str1507) + call void @fn_buf_puts(ptr %t7, ptr @.str1560) + call void @fn_emit(ptr @.str1561) + call void @fn_emit(ptr @.str1562) + call void @fn_emit(ptr @.str1563) %t8 = load ptr, ptr %t0 %t9 = getelementptr inbounds %Cmp_Node, ptr %t8, i32 0, i32 4 %t10 = load ptr, ptr %t9 @@ -20776,26 +20994,26 @@ entry: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1508) + call void @fn_emit(ptr @.str1564) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1509) - %t15 = call ptr @fn_emit_bind(ptr @.str1510) + call void @fn_emit(ptr @.str1565) + %t15 = call ptr @fn_emit_bind(ptr @.str1566) store ptr %t15, ptr %t16 - call void @fn_emit(ptr @.str1511) + call void @fn_emit(ptr @.str1567) %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1512) + call void @fn_emit(ptr @.str1568) %t18 = load ptr, ptr %t5 store ptr %t18, ptr @g_code - call void @fn_emit(ptr @.str1513) + call void @fn_emit(ptr @.str1569) %t19 = load ptr, ptr @g_falloc %t20 = call ptr @fn_buf_str(ptr %t19) call void @fn_emit(ptr %t20) %t21 = load ptr, ptr %t2 %t22 = call ptr @fn_buf_str(ptr %t21) call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str1514) + call void @fn_emit(ptr @.str1570) br label %ret ret: ret void @@ -20808,6 +21026,7 @@ entry: store ptr %t0, ptr @g_head %t1 = call ptr @fn_buf_new() store ptr %t1, ptr @g_code + store i32 0, ptr @g_g_uses_str %t2 = getelementptr %LSlice, ptr null, i32 1 %t3 = ptrtoint ptr %t2 to i64 %t4 = call ptr @malloc(i64 %t3) @@ -20998,6 +21217,13 @@ ifend23: wend20: br label %ifend17 ifend17: + %t111 = load i32, ptr @g_g_uses_str + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then24, label %ifend26 +then24: + call void @fn_emit_str_prelude() + br label %ifend26 +ifend26: br label %ret ret: ret void @@ -21031,7 +21257,7 @@ then0: br label %ret ifend2: %t13 = load ptr, ptr %t0 - %t14 = call ptr @fopen(ptr %t13, ptr @.str1515) + %t14 = call ptr @fopen(ptr %t13, ptr @.str1571) store ptr %t14, ptr %t15 %t16 = load ptr, ptr %t15 %t17 = icmp eq ptr %t16, null @@ -21140,7 +21366,7 @@ then0: %t9 = load i32, ptr %t3 %t10 = sub i32 %t9, 6 %t11 = call ptr @fn_substr(ptr %t8, i32 %t10, i32 6) - %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1516) + %t12 = call i32 @fn_str_eq(ptr %t11, ptr @.str1572) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then3, label %ifend5 then3: @@ -21225,7 +21451,7 @@ then3: br label %ret ifend5: %t19 = load ptr, ptr %t0 - %t20 = call ptr @fn_sconcat(ptr %t19, ptr @.str1517) + %t20 = call ptr @fn_str_concat(ptr %t19, ptr @.str1573) store ptr %t20, ptr %retval br label %ret ret: @@ -21290,7 +21516,7 @@ entry: %t8 = getelementptr ptr, ptr %t7, i32 0 %t9 = load ptr, ptr %t8 %t10 = call ptr @fn_base_name(ptr %t9) - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1518) + %t11 = call i32 @fn_str_eq(ptr %t10, ptr @.str1574) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then0, label %ifend2 then0: @@ -21313,7 +21539,7 @@ wbody4: %t22 = load ptr, ptr %t21 store ptr %t22, ptr %t23 %t24 = load ptr, ptr %t23 - %t25 = call i32 @fn_streq(ptr %t24, ptr @.str1519) + %t25 = call i32 @fn_str_eq(ptr %t24, ptr @.str1575) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then6, label %else7 then6: @@ -21321,7 +21547,7 @@ then6: br label %ifend8 else7: %t27 = load ptr, ptr %t23 - %t28 = call i32 @fn_streq(ptr %t27, ptr @.str1520) + %t28 = call i32 @fn_str_eq(ptr %t27, ptr @.str1576) %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then9, label %else10 then9: @@ -21329,7 +21555,7 @@ then9: br label %ifend11 else10: %t30 = load ptr, ptr %t23 - %t31 = call i32 @fn_streq(ptr %t30, ptr @.str1521) + %t31 = call i32 @fn_str_eq(ptr %t30, ptr @.str1577) %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then12, label %else13 then12: @@ -21337,7 +21563,7 @@ then12: br label %ifend14 else13: %t33 = load ptr, ptr %t23 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str1522) + %t34 = call i32 @fn_str_eq(ptr %t33, ptr @.str1578) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then15, label %else16 then15: @@ -21345,7 +21571,7 @@ then15: br label %ifend17 else16: %t36 = load ptr, ptr %t23 - %t37 = call i32 @fn_streq(ptr %t36, ptr @.str1523) + %t37 = call i32 @fn_str_eq(ptr %t36, ptr @.str1579) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then18, label %else19 then18: @@ -21353,7 +21579,7 @@ then18: br label %ifend20 else19: %t39 = load ptr, ptr %t23 - %t40 = call i32 @fn_streq(ptr %t39, ptr @.str1524) + %t40 = call i32 @fn_str_eq(ptr %t39, ptr @.str1580) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then21, label %else22 then21: @@ -21361,7 +21587,7 @@ then21: br label %ifend23 else22: %t42 = load ptr, ptr %t23 - %t43 = call i32 @fn_streq(ptr %t42, ptr @.str1525) + %t43 = call i32 @fn_str_eq(ptr %t42, ptr @.str1581) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then24, label %else25 then24: @@ -21394,8 +21620,8 @@ else25: br i1 %t62, label %then30, label %else31 then30: %t63 = load ptr, ptr %t23 - %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str1527) - %t65 = call ptr @fn_sconcat(ptr @.str1526, ptr %t64) + %t64 = call ptr @fn_str_concat(ptr %t63, ptr @.str1583) + %t65 = call ptr @fn_str_concat(ptr @.str1582, ptr %t64) store ptr %t65, ptr %t66 %t67 = load ptr, ptr @__stderrp %t68 = load ptr, ptr %t66 @@ -21435,7 +21661,7 @@ wend5: %t80 = icmp ne i32 %t79, 0 br i1 %t80, label %then33, label %ifend35 then33: - call void @fn_die(ptr @.str1528) + call void @fn_die(ptr @.str1584) br label %ifend35 ifend35: %t81 = load ptr, ptr %t0 @@ -21447,7 +21673,7 @@ ifend35: %t87 = icmp ne i32 %t86, 0 br i1 %t87, label %then36, label %ifend38 then36: - call void @fn_die(ptr @.str1529) + call void @fn_die(ptr @.str1585) br label %ifend38 ifend38: %t88 = load ptr, ptr %t0 @@ -21555,7 +21781,7 @@ then60: %t140 = load ptr, ptr %t0 %t141 = call ptr @fn_base_name(ptr %t140) %t142 = call ptr @fn_strip_ludic(ptr %t141) - %t143 = call ptr @fn_sconcat(ptr @.str1530, ptr %t142) + %t143 = call ptr @fn_str_concat(ptr @.str1586, ptr %t142) store ptr %t143, ptr %t1 br label %ifend62 ifend62: @@ -21570,12 +21796,12 @@ ifend62: br i1 %t151, label %then63, label %ifend65 then63: %t152 = load ptr, ptr %t146 - %t153 = call ptr @fn_sconcat(ptr @.str1531, ptr %t152) + %t153 = call ptr @fn_str_concat(ptr @.str1587, ptr %t152) %t154 = call i32 @system(ptr %t153) br label %ifend65 ifend65: %t155 = load ptr, ptr %t1 - %t156 = call ptr @fn_sconcat(ptr %t155, ptr @.str1532) + %t156 = call ptr @fn_str_concat(ptr %t155, ptr @.str1588) store ptr %t156, ptr %t157 %t158 = load ptr, ptr %t157 %t159 = call i32 @fn_ir_flush(ptr %t158) @@ -21584,42 +21810,42 @@ ifend65: %t162 = icmp ne i32 %t161, 0 br i1 %t162, label %then66, label %ifend68 then66: - call void @fn_die(ptr @.str1533) + call void @fn_die(ptr @.str1589) br label %ifend68 ifend68: - %t163 = call ptr @fn_getenv_or(ptr @.str1534, ptr @.str1535) + %t163 = call ptr @fn_getenv_or(ptr @.str1590, ptr @.str1591) store ptr %t163, ptr %t164 %t165 = load ptr, ptr @L_argv %t166 = getelementptr ptr, ptr %t165, i32 0 %t167 = load ptr, ptr %t166 %t168 = call ptr @fn_dir_of(ptr %t167) - %t169 = call ptr @fn_getenv_or(ptr @.str1536, ptr %t168) + %t169 = call ptr @fn_getenv_or(ptr @.str1592, ptr %t168) %t170 = call ptr @fn_ensure_slash(ptr %t169) store ptr %t170, ptr %t171 %t172 = load ptr, ptr %t164 %t173 = load ptr, ptr %t157 - %t174 = call ptr @fn_sconcat(ptr @.str1537, ptr %t173) - %t175 = call ptr @fn_sconcat(ptr %t172, ptr %t174) + %t174 = call ptr @fn_str_concat(ptr @.str1593, ptr %t173) + %t175 = call ptr @fn_str_concat(ptr %t172, ptr %t174) store ptr %t175, ptr %t176 %t177 = load i32, ptr @g_g_windowed %t178 = icmp ne i32 %t177, 0 br i1 %t178, label %then69, label %ifend71 then69: %t179 = load ptr, ptr %t171 - %t180 = call ptr @fn_path_join(ptr %t179, ptr @.str1538) + %t180 = call ptr @fn_path_join(ptr %t179, ptr @.str1594) store ptr %t180, ptr %t181 %t182 = load ptr, ptr %t176 %t183 = load ptr, ptr %t181 - %t184 = call ptr @fn_sconcat(ptr %t183, ptr @.str1540) - %t185 = call ptr @fn_sconcat(ptr @.str1539, ptr %t184) - %t186 = call ptr @fn_sconcat(ptr %t182, ptr %t185) + %t184 = call ptr @fn_str_concat(ptr %t183, ptr @.str1596) + %t185 = call ptr @fn_str_concat(ptr @.str1595, ptr %t184) + %t186 = call ptr @fn_str_concat(ptr %t182, ptr %t185) store ptr %t186, ptr %t176 br label %ifend71 ifend71: %t187 = load ptr, ptr %t176 %t188 = load ptr, ptr %t1 - %t189 = call ptr @fn_sconcat(ptr @.str1541, ptr %t188) - %t190 = call ptr @fn_sconcat(ptr %t187, ptr %t189) + %t189 = call ptr @fn_str_concat(ptr @.str1597, ptr %t188) + %t190 = call ptr @fn_str_concat(ptr %t187, ptr %t189) store ptr %t190, ptr %t176 %t191 = load ptr, ptr %t176 %t192 = call i32 @system(ptr %t191) @@ -21631,7 +21857,7 @@ ifend71: br i1 %t197, label %then72, label %ifend74 then72: %t198 = load ptr, ptr %t157 - %t199 = call ptr @fn_sconcat(ptr @.str1542, ptr %t198) + %t199 = call ptr @fn_str_concat(ptr @.str1598, ptr %t198) %t200 = call i32 @system(ptr %t199) br label %ifend74 ifend74: @@ -21641,7 +21867,7 @@ ifend74: %t204 = icmp ne i32 %t203, 0 br i1 %t204, label %then75, label %ifend77 then75: - call void @fn_die(ptr @.str1543) + call void @fn_die(ptr @.str1599) br label %ifend77 ifend77: %t205 = load i32, ptr %t6 diff --git a/selfhost/main.ludic b/selfhost/main.ludic index 861bde52..5a3ca854 100644 --- a/selfhost/main.ludic +++ b/selfhost/main.ludic @@ -26,7 +26,7 @@ fn base_name(path: ptr) -> ptr { fn strip_ludic(name: ptr) -> ptr { let n = slen(name) if n > 6 { - if streq(substr(name, n - 6, 6), ".ludic") { return substr(name, 0, n - 6) } + if (substr(name, n - 6, 6) == ".ludic") { return substr(name, 0, n - 6) } } return name } @@ -43,7 +43,7 @@ fn ensure_slash(d: ptr) -> ptr { let n = slen(d) if n == 0 { return d } if peek8(d, n - 1) == 47 { return d } - return sconcat(d, "/") + return (d + ("/")) } fn die(msg: ptr) -> void { @@ -61,23 +61,23 @@ entry { var run = false # compile then execute the result # multi-call: invoked as `ludic` -> run mode by default - if streq(base_name(os_arg(0)), "ludic") { run = true } + if (base_name(os_arg(0)) == "ludic") { run = true } var ai = 1 while ai < os_argc() { let a = os_arg(ai) - if streq(a, "--windowed") { want = 1 } - else { if streq(a, "--headless") { want = 2 } - else { if streq(a, "--emit-llvm") { emit_ir = true } - else { if streq(a, "--fmt") { fmt = true } - else { if streq(a, "--save-temps") { save = true } - else { if streq(a, "--run") { run = true } - else { if streq(a, "-o") { ai = ai + 1; if ai < os_argc() { out = os_arg(ai) } } + if (a == ("--windowed")) { want = 1 } + else { if (a == ("--headless")) { want = 2 } + else { if (a == ("--emit-llvm")) { emit_ir = true } + else { if (a == ("--fmt")) { fmt = true } + else { if (a == ("--save-temps")) { save = true } + else { if (a == ("--run")) { run = true } + else { if (a == ("-o")) { ai = ai + 1; if ai < os_argc() { out = os_arg(ai) } } else { # an unknown flag is ignored (with a note) rather than mistaken for the # input file — '-' is ASCII 45 if peek8(a, 0) == 45 { - let m = sconcat("ludicc: ignoring unknown flag ", sconcat(a, "\n")) + let m = ("ludicc: ignoring unknown flag " + (a + "\n")) file_write(file_stderr(), m, slen(m)) } else { path = a } } } } } } } } @@ -117,14 +117,14 @@ entry { # a run with no explicit -o lands in a temp file if run and (out == null) { - out = sconcat("/tmp/ludic-run-", strip_ludic(base_name(path))) + out = (("/tmp/ludic-run-") + strip_ludic(base_name(path))) } # make the output directory if the user asked for e.g. bin/app let odir = dir_of(out) - if slen(odir) > 0 { os_system(sconcat("mkdir -p ", odir)) } + if slen(odir) > 0 { os_system((("mkdir -p ") + odir)) } - let ll = sconcat(out, ".ll") + let ll = (out + ".ll") if not ir_flush(ll) { die("ludicc: cannot write IR\n") } let cc = getenv_or("LUDIC_CC", "clang") @@ -134,15 +134,15 @@ entry { # platform layer and the Cocoa framework. # -Wno-override-module: our IR carries an explicit target triple, which clang # would otherwise warn about on every build. - var cmd = sconcat(cc, sconcat(" -O2 -Wno-override-module ", ll)) + var cmd = (cc + ((" -O2 -Wno-override-module ") + ll)) if g_windowed { let cocoa = path_join(home, "runtime/native/cocoa.ll") - cmd = sconcat(cmd, sconcat(" ", sconcat(cocoa, " -framework Cocoa -Wl,-rpath,@loader_path"))) + cmd = (cmd + (" " + (cocoa + (" -framework Cocoa -Wl,-rpath,@loader_path")))) } - cmd = sconcat(cmd, sconcat(" -o ", out)) + cmd = (cmd + ((" -o ") + out)) let rc = os_system(cmd) - if not save { os_system(sconcat("rm -f ", ll)) } + if not save { os_system((("rm -f ") + ll)) } if rc != 0 { die("ludicc: link failed\n") } # run mode: execute the binary we just built and forward its exit code diff --git a/selfhost/parse.ludic b/selfhost/parse.ludic index 9081c5ee..1f15bfbd 100644 --- a/selfhost/parse.ludic +++ b/selfhost/parse.ludic @@ -8,8 +8,8 @@ var g_game_name: ptr # the `game`/`module` name fn cur() -> Tok { return toks[pi] } fn pk(o: int) -> Tok { return toks[pi + o] } -fn is_op(v: ptr) -> bool { let t = toks[pi]; return t.kind == TK_OP and streq(t.text, v) } -fn is_id(v: ptr) -> bool { let t = toks[pi]; return t.kind == TK_ID and streq(t.text, v) } +fn is_op(v: ptr) -> bool { let t = toks[pi]; return t.kind == TK_OP and (t.text == v) } +fn is_id(v: ptr) -> bool { let t = toks[pi]; return t.kind == TK_ID and (t.text == v) } fn is_kw(v: ptr) -> bool { return is_id(v) } fn perr(msg: ptr) -> void { @@ -60,10 +60,10 @@ fn p_primary() -> Node { if t.kind == TK_FLOAT { let n = node(E_FLOAT); n.ival = t.ival; pi = pi + 1; return n } if t.kind == TK_STR { let n = node(E_STR); n.s = t.text; pi = pi + 1; return n } if t.kind == TK_ID { - if streq(t.text, "true") { let n = node(E_BOOL); n.ival = 1; pi = pi + 1; return n } - if streq(t.text, "false") { let n = node(E_BOOL); n.ival = 0; pi = pi + 1; return n } - if streq(t.text, "null") { pi = pi + 1; return node(E_NULL) } - if streq(t.text, "new") { pi = pi + 1; let n = node(E_NEW); n.s = ptype(); return n } + if (t.text == "true") { let n = node(E_BOOL); n.ival = 1; pi = pi + 1; return n } + if (t.text == "false") { let n = node(E_BOOL); n.ival = 0; pi = pi + 1; return n } + if (t.text == "null") { pi = pi + 1; return node(E_NULL) } + if (t.text == "new") { pi = pi + 1; let n = node(E_NEW); n.s = ptype(); return n } let n = node(E_ID); n.s = t.text; pi = pi + 1; return n } if is_op("(") { pi = pi + 1; skipnl(); let e = expr(); skipnl(); eat_op(")"); return e } @@ -153,19 +153,19 @@ fn block() -> Node { fn stmt() -> Node { let t = toks[pi] if t.kind == TK_ID { - if streq(t.text, "let") or streq(t.text, "var") { - var mut = 0; if streq(t.text, "var") { mut = 1 } # let = immutable, var = mutable + if (t.text == "let") or (t.text == "var") { + var mut = 0; if (t.text == "var") { mut = 1 } # let = immutable, var = mutable pi = pi + 1; let n = node(S_LET); n.ival = mut; n.line = toks[pi].line; n.s = eat_id() if is_op(":") { pi = pi + 1; n.ty = ptype() } if is_op("=") { pi = pi + 1; n.a = expr() } return n } - if streq(t.text, "return") { + if (t.text == "return") { pi = pi + 1; let n = node(S_RETURN) if toks[pi].kind != TK_NL and not is_op("}") { n.a = expr() } return n } - if streq(t.text, "if") { + if (t.text == "if") { pi = pi + 1; let n = node(S_IF); n.a = expr(); n.b = block() let save = pi; skipnl() # peek past newlines for a trailing `else` if is_id("else") { pi = pi + 1; skipnl() @@ -173,8 +173,8 @@ fn stmt() -> Node { else { pi = save } # no else: keep the separator for block()'s Rule-B check return n } - if streq(t.text, "while") { pi = pi + 1; let n = node(S_WHILE); n.a = expr(); n.b = block(); return n } - if streq(t.text, "for") { + if (t.text == "while") { pi = pi + 1; let n = node(S_WHILE); n.a = expr(); n.b = block(); return n } + if (t.text == "for") { pi = pi + 1 if is_op("(") { return parse_query_for() } let n = node(S_FOR); n.s = eat_id() @@ -182,8 +182,8 @@ fn stmt() -> Node { n.a = expr(); eat_op(".."); n.b = expr(); n.c = block() return n } - if streq(t.text, "spawn") { return parse_spawn() } - if streq(t.text, "machine") { + if (t.text == "spawn") { return parse_spawn() } + if (t.text == "machine") { pi = pi + 1; let n = node(S_MACHINE); n.a = expr(); skipnl(); eat_op("{") var sidx = 0 # states auto-number by declaration order while true { skipnl(); if is_op("}") { break } @@ -195,17 +195,17 @@ fn stmt() -> Node { push(n.kids, s); sidx = sidx + 1 } eat_op("}"); return n } - if streq(t.text, "become") { pi = pi + 1; let n = node(S_BECOME); n.s = eat_id(); return n } - if streq(t.text, "despawn") { pi = pi + 1; let n = node(S_DESPAWN); n.a = expr(); return n } - if streq(t.text, "enable") or streq(t.text, "disable") { - var en = 0; if streq(t.text, "enable") { en = 1 } + if (t.text == "become") { pi = pi + 1; let n = node(S_BECOME); n.s = eat_id(); return n } + if (t.text == "despawn") { pi = pi + 1; let n = node(S_DESPAWN); n.a = expr(); return n } + if (t.text == "enable") or (t.text == "disable") { + var en = 0; if (t.text == "enable") { en = 1 } pi = pi + 1; let n = node(S_TOGGLE); n.ival = en; n.s = eat_id() # `enable P on e` / `disable Model` / `disable Handler` if is_id("on") { pi = pi + 1; n.a = expr() } # property on an entity return n } - if streq(t.text, "break") { pi = pi + 1; return node(S_BREAK) } - if streq(t.text, "continue") { pi = pi + 1; return node(S_CONTINUE) } - if streq(t.text, "match") { + if (t.text == "break") { pi = pi + 1; return node(S_BREAK) } + if (t.text == "continue") { pi = pi + 1; return node(S_CONTINUE) } + if (t.text == "match") { pi = pi + 1; let n = node(S_MATCH); n.a = expr(); skipnl(); eat_op("{") while true { skipnl(); if is_op("}") { break } @@ -259,7 +259,7 @@ fn dir_of(path: ptr) -> ptr { } fn path_join(dir: ptr, rel: ptr) -> ptr { if peek8(rel, 0) == 47 { return rel } # absolute - return sconcat(dir, rel) + return (dir + rel) } var loaded_paths: []ptr @@ -267,7 +267,7 @@ var cur_dir: ptr fn already_loaded(full: ptr) -> bool { var i = 0 - while i < len(loaded_paths) { if streq(loaded_paths[i], full) { return true }; i = i + 1 } + while i < len(loaded_paths) { if (loaded_paths[i] == full) { return true }; i = i + 1 } return false } @@ -285,15 +285,15 @@ fn parse_one_decl() -> void { var hook_phase: ptr = null # @OnStart / @OnQuit override the phase while is_op("@") { pi = pi + 1; let a = eat_id() # collect a leading @annotation - if streq(a, "export") { is_export = true } - else { if streq(a, "Queries") { qspec = parse_queries_anno() } # @Queries(these: [...], on: ...) - else { if streq(a, "OnSpawn") { eat_op("("); onspawn_model = eat_id(); eat_op(")") } - else { if streq(a, "OnDespawn") { eat_op("("); ondespawn_model = eat_id(); eat_op(")") } - else { if streq(a, "OnAttach") { eat_op("("); onattach_prop = eat_id(); eat_op(")") } - else { if streq(a, "OnEnable") { eat_op("("); onenable_prop = eat_id(); eat_op(")") } - else { if streq(a, "OnDisable") { eat_op("("); ondisable_prop = eat_id(); eat_op(")") } - else { if streq(a, "OnStart") { hook_phase = "Start" } # boot - else { if streq(a, "OnQuit") { hook_phase = "OnQuit" } # shutdown + if (a == "export") { is_export = true } + else { if (a == "Queries") { qspec = parse_queries_anno() } # @Queries(these: [...], on: ...) + else { if (a == "OnSpawn") { eat_op("("); onspawn_model = eat_id(); eat_op(")") } + else { if (a == "OnDespawn") { eat_op("("); ondespawn_model = eat_id(); eat_op(")") } + else { if (a == "OnAttach") { eat_op("("); onattach_prop = eat_id(); eat_op(")") } + else { if (a == "OnEnable") { eat_op("("); onenable_prop = eat_id(); eat_op(")") } + else { if (a == "OnDisable") { eat_op("("); ondisable_prop = eat_id(); eat_op(")") } + else { if (a == "OnStart") { hook_phase = "Start" } # boot + else { if (a == "OnQuit") { hook_phase = "OnQuit" } # shutdown else { if is_op("(") { var d = 0 # any other @anno(args) — parsed and skipped while true { if is_op("(") { d = d + 1 }; if is_op(")") { d = d - 1 }; pi = pi + 1; if d == 0 { break } } } } } } } } } } } } skipnl() @@ -337,7 +337,7 @@ fn do_import(rel: ptr) -> void { if already_loaded(full) { return } push(loaded_paths, full) let src = read_file(full) - if (src == null) { perr(sconcat("cannot open import ", full)) } + if (src == null) { perr(("cannot open import " + full)) } let saved_toks = toks; let saved_pi = pi; let saved_dir = cur_dir cur_dir = dir_of(full) lex(src) # resets the global token stream diff --git a/selfhost/parse_game.ludic b/selfhost/parse_game.ludic index d4b00198..90974ae9 100644 --- a/selfhost/parse_game.ludic +++ b/selfhost/parse_game.ludic @@ -6,7 +6,7 @@ fn parse_component() -> Node { pi = pi + 1; let n = node(N_COMP); n.s = eat_id(); skipnl(); eat_op("{") while true { skipnl(); if is_op("}") { break } var is_computed = false - if is_op("@") { pi = pi + 1; let ann = eat_id(); if streq(ann, "Computed") { is_computed = true }; skipnl() } + if is_op("@") { pi = pi + 1; let ann = eat_id(); if (ann == "Computed") { is_computed = true }; skipnl() } let f = node(N_FIELD); f.s = eat_id(); eat_op(":"); f.ty = ptype() if is_op("=") { pi = pi + 1; f.a = expr() } if is_computed { register_computed(n.s, f.s, f.ty, f.a) } # derived: no storage @@ -104,7 +104,7 @@ fn parse_queries_anno() -> Node { skipnl() if is_op(")") { break } let key = eat_id(); eat_op(":") - if streq(key, "these") { + if (key == "these") { eat_op("["); skipnl() while not is_op("]") { let pname = eat_id() @@ -116,7 +116,7 @@ fn parse_queries_anno() -> Node { skipnl() } eat_op("]") - } else { if streq(key, "on") { + } else { if (key == "on") { let mname = eat_id(); let t = node(E_ID); t.s = mname; t.ival = 1; push(terms.kids, t) # {Model} tag } else { expr() } } # unknown key: skip its value if is_op(",") { pi = pi + 1 } @@ -179,7 +179,7 @@ fn parse_extern() -> Node { fn parse_widget() -> Node { let w = node(N_UI); w.s = eat_id() # widget type name w.b = node(N_BLOCK) # b.kids = props (E_FINIT) - while toks[pi].kind == TK_ID and toks[pi + 1].kind == TK_OP and streq(toks[pi + 1].text, ":") { + while toks[pi].kind == TK_ID and toks[pi + 1].kind == TK_OP and (toks[pi + 1].text == ":") { let pr = node(E_FINIT); pr.s = eat_id(); eat_op(":"); pr.a = expr(); push(w.b.kids, pr) # widget prop `key: value` (Rule A) } skipnl() diff --git a/selfhost/str.ludic b/selfhost/str.ludic index 4e811004..6bedac83 100644 --- a/selfhost/str.ludic +++ b/selfhost/str.ludic @@ -2,18 +2,6 @@ # slicing out substrings, and integer<->text. All over raw NUL-terminated # byte buffers reached with peek8/poke8. -fn streq(a: ptr, b: ptr) -> bool { - var i = 0 - while true { - let ca = peek8(a, i) - let cb = peek8(b, i) - if ca != cb { return false } - if ca == 0 { return true } - i = i + 1 - } - return false -} - fn slen(s: ptr) -> int { var n = 0 while peek8(s, n) != 0 { n = n + 1 } diff --git a/test.sh b/test.sh index e131e6f8..3f70acf6 100755 --- a/test.sh +++ b/test.sh @@ -66,6 +66,11 @@ if ./selfhost/game-build.sh build/ludicc examples/toggle.ludic "/tmp/ludic_tog" && [ "$(/tmp/ludic_tog /tmp/str.out 2>&1 \ + && [ "$(/tmp/ludic_str